Files
Client/GameTools/Zallad3D SceneClass/InstanceObjectManager.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

243 lines
7.8 KiB
C++

// InstanceObjectManager.cpp: implementation of the CInstanceObjectManager class.
//
//////////////////////////////////////////////////////////////////////
#include "InstanceObjectManager.h"
#include "SceneManager.h"
#include "BaseGraphicsLayer.h"
#include "SceneStateMgr.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CInstanceObjectManager::CInstanceObjectManager()
{
m_TotalInstanceObjectID=0;
}
CInstanceObjectManager::~CInstanceObjectManager()
{
}
int CInstanceObjectManager::AddInstanceObject(char *strObjectName, vector3 vecPos)
{
CSceneManager::m_MeshObjectContainer.SetPath(INSTANCEOBJECTPATH);
InstanceObjectNode AddNode;
AddNode.m_ID=m_TotalInstanceObjectID;
AddNode.m_Color.c=0x0;
if(strcmp(strObjectName,"")!=0)
{
AddNode.m_pMeshObject=CSceneManager::m_MeshObjectContainer.GetMeshObject(strObjectName);
AddNode.m_pMeshObject->ConvertNormal();
}
else
{
AddNode.m_pMeshObject=NULL;
}
AddNode.m_vecPosition=vecPos;
strcpy(AddNode.m_strMeshName,strObjectName);
m_InstanceObjectList.Add(AddNode);
m_TotalInstanceObjectID++;
return AddNode.m_ID;
}
void CInstanceObjectManager::DeleteInstanceObject(int InstanceObjectID)
{
for(int i=0;i<m_InstanceObjectList.num;i++)
{
if(m_InstanceObjectList[i].m_ID==InstanceObjectID)
{
CSceneManager::m_MeshObjectContainer.DeleteMeshObject(m_InstanceObjectList[i].m_strMeshName);
m_InstanceObjectList.DelIndex(i);
break;
}
}
}
void CInstanceObjectManager::Render(LPDIRECT3DDEVICE8 pd3dDevice)
{
//pd3dDevice->CaptureStateBlock(oldStateBlock);
//pd3dDevice->ApplyStateBlock(m_ObjectRenderStateBlock);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_DIFFUSE);
CSceneStateMgr::_SetD3DTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE);
CSceneStateMgr::_SetD3DTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->LightEnable(1,FALSE);
pd3dDevice->LightEnable(2,FALSE);
pd3dDevice->LightEnable(3,FALSE);
pd3dDevice->LightEnable(4,FALSE);
pd3dDevice->LightEnable(5,FALSE);
pd3dDevice->LightEnable(6,FALSE);
pd3dDevice->LightEnable(7,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,TRUE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
/////
pd3dDevice->LightEnable(0,TRUE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE2X);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_COLORARG2,D3DTA_CURRENT);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
CSceneStateMgr::_SetD3DTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);
pd3dDevice->SetTexture(0,NULL);
pd3dDevice->SetTexture(1,NULL);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
D3DMATERIAL8 mtrl;
ZeroMemory( &mtrl, sizeof(D3DMATERIAL8) );
mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
mtrl.Diffuse.b = mtrl.Ambient.b = 1.0f;
mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;
pd3dDevice->SetMaterial( &mtrl );
CSceneStateMgr::_SetD3DRenderState(D3DRS_LIGHTING,TRUE);
matrix matTrans;
CSceneNode SceneNode;
SceneNode.m_fRad=200.0f;
float w;
vector3 vecResult;
D3DLIGHT8 ColorLight=CSceneManager::m_WeatherManager.m_SunLight;
for(int cObject=0;cObject<m_InstanceObjectList.num;cObject++)
{
matTrans.Translation(m_InstanceObjectList[cObject].m_vecPosition);
SceneNode.m_AccumulateTM=matTrans;
if(SceneNode.isCulling())
{
if(m_InstanceObjectList[cObject].m_Color.c!=0x0)
{
ColorLight.Diffuse.r=(float)m_InstanceObjectList[cObject].m_Color.r/255.0f;
ColorLight.Diffuse.g=(float)m_InstanceObjectList[cObject].m_Color.g/255.0f;;
ColorLight.Diffuse.b=(float)m_InstanceObjectList[cObject].m_Color.b/255.0f;;
CSceneStateMgr::_SetD3DRenderState(D3DRS_AMBIENT,m_InstanceObjectList[cObject].m_Color.c);
pd3dDevice->SetLight(0,&ColorLight);
}
else
{
//CSceneStateMgr::_SetD3DRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_InterObjectAmbientColor.c);
//CSceneStateMgr::_SetD3DRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
CSceneStateMgr::_SetD3DRenderState(D3DRS_AMBIENT,0xffcccccc);
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
}
pd3dDevice->SetTransform(D3DTS_WORLD,matTrans);
BaseGraphicsLayer::TransformVector(m_InstanceObjectList[cObject].m_vecPosition,vecResult,w);
m_InstanceObjectList[cObject].m_ptMousePick.x=(int)vecResult.x;
m_InstanceObjectList[cObject].m_ptMousePick.y=(int)vecResult.y;
if(m_InstanceObjectList[cObject].m_pMeshObject)
m_InstanceObjectList[cObject].m_pMeshObject->Render(pd3dDevice);
}
else
{
m_InstanceObjectList[cObject].m_ptMousePick.x=
m_InstanceObjectList[cObject].m_ptMousePick.y=-1;
}
}
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
CSceneStateMgr::_SetD3DRenderState( D3DRS_ALPHATESTENABLE,FALSE);
//pd3dDevice->ApplyStateBlock(oldStateBlock);
}
void CInstanceObjectManager::Create(LPDIRECT3DDEVICE8 pd3dDevice)
{
/* pd3dDevice->CreateStateBlock(D3DSBT_ALL,&m_ObjectRenderStateBlock);
pd3dDevice->BeginStateBlock();
pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState(0,D3DTSS_ALPHAARG2,D3DTA_DIFFUSE);
pd3dDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_DISABLE);
pd3dDevice->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_DISABLE);
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->LightEnable(1,FALSE);
pd3dDevice->LightEnable(2,FALSE);
pd3dDevice->LightEnable(3,FALSE);
pd3dDevice->LightEnable(4,FALSE);
pd3dDevice->LightEnable(5,FALSE);
pd3dDevice->LightEnable(6,FALSE);
pd3dDevice->LightEnable(7,FALSE);
pd3dDevice->SetRenderState(D3DRS_LIGHTING,TRUE);
pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
/*
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
pd3dDevice->SetRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_AmbientColor->c);
*/
// pd3dDevice->EndStateBlock(&m_ObjectRenderStateBlock);
}
int CInstanceObjectManager::MouseOnCheckInstanceObject(int px, int py)
{
for(int i=0;i<m_InstanceObjectList.num;i++)
{
if(m_InstanceObjectList[i].m_ptMousePick.x!=-1)
{
if( m_InstanceObjectList[i].m_ptMousePick.x > px-30 &&
m_InstanceObjectList[i].m_ptMousePick.x < px+30 &&
m_InstanceObjectList[i].m_ptMousePick.y > py-30 &&
m_InstanceObjectList[i].m_ptMousePick.y < py+30)
{
return m_InstanceObjectList[i].m_ID;
}
}
}
return -1;
}
void CInstanceObjectManager::SetInstanceObjectColor(int ID, color Color)
{
for(int i=0;i<m_InstanceObjectList.num;i++)
{
if(m_InstanceObjectList[i].m_ID==ID)
{
m_InstanceObjectList[i].m_Color=Color;
break;
}
}
}
void CInstanceObjectManager::SetAllObjectColor(color Color)
{
for(int i=0;i<m_InstanceObjectList.num;i++)
{
m_InstanceObjectList[i].m_Color=Color;
}
}