Files
Client/Engine/Zalla3D Scene Class/HouseObject.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

765 lines
22 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// HouseObject.cpp: implementation of the CHouseObject class.
//
//////////////////////////////////////////////////////////////////////
#include "HouseObject.h"
#include "SceneManager.h"
#include "BaseGraphicsLayer.h"
#include "RenderOption.h"
#include "./OctreeScene.h"
#include "GMMemory.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHouseObject::CHouseObject() : m_pInHouseObject(NULL),m_pMedHouseObject(NULL),m_pOutHouseObject(NULL),m_Lightmap(NULL),m_InLightmap(NULL),
m_pOctree(NULL),m_isHaveLightmap(false),m_isHaveInLightmap(false),m_bModulate2X(false), m_pFlagHouseObject(NULL)
{
}
CHouseObject::~CHouseObject()
{
int i;
/*** *********/
// Octree resource ó¸® ÇØ¾ßÇÔ.COctreeScene *m_pOctree;
if(m_pInHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pInHouseObject);
m_pInHouseObject = NULL;
}
if(m_pMedHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pMedHouseObject);
m_pMedHouseObject = NULL;
}
if(m_pOutHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pOutHouseObject);
m_pOutHouseObject = NULL;
}
if(m_pFlagHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pFlagHouseObject);
m_pFlagHouseObject = NULL;
}
if(m_Lightmap)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_TEXTURE,m_Lightmap);
m_Lightmap = NULL;
}
if(m_InLightmap)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_TEXTURE,m_InLightmap);
m_InLightmap = NULL;
}
if(m_pOctree)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_OCTREESCENE,m_pOctree);
m_pOctree = NULL;
}
for(i = 0; i < (int)m_pVertex.size(); i++ )
{
if(m_pVertex[i])
{
delete[] m_pVertex[i];
m_pVertex[i] = NULL;
}
}
m_pVertex.clear();
for(i = 0; i < (int)m_pIndices.size(); i++ )
{
if(m_pIndices[i])
{
delete[] m_pIndices[i];
m_pIndices[i] = NULL;
}
}
m_pIndices.clear();
m_nVertex.clear();
m_nIndices.clear();
}
const long MAX_OBJECT=100;
void CHouseObject::GenerateNewLightmap(int iValue,matrix matSet,matrix matHouseTM,CSectorLight *pLights,int iLights)
{
}
void CHouseObject::GenerateLightmap(matrix matSet,matrix matHouseTM,int LightmapMode)
{
}
void CHouseObject::Render(LPDIRECT3DDEVICE8 pd3dDevice)
{
/**/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 );
pd3dDevice->SetRenderState( D3DRS_LIGHTING,TRUE);
pd3dDevice->SetTexture(2,NULL);
pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP, D3DTOP_DISABLE);
// 2005.01.10 yundi »õº® 3½Ã¿¡ º¸¿´´Ù ¾Èº¸¿´´Ù ÇÏ´Â house ¹®Á¦ ÇØ°á
color tempColor = CSceneManager::m_WeatherManager.m_InterObjectAmbientColor;
tempColor.a = 0xFF;
if(m_pOutHouseObject && m_pOutHouseObject->IsLoaded())
{
if(m_isHaveLightmap && m_Lightmap->IsLoaded())
{
pd3dDevice->SetTexture(1,m_Lightmap->GetTexture());
pd3dDevice->LightEnable(0,FALSE);
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
pd3dDevice->SetRenderState( D3DRS_AMBIENT, tempColor.c);
/**/
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, tempColor.c);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X );
if(m_bModulate2X)
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
else
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState(0,D3DTSS_TEXCOORDINDEX,0);
pd3dDevice->SetTextureStageState(1,D3DTSS_TEXCOORDINDEX,1);
////
//pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
//pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
m_pOutHouseObject->Render(pd3dDevice);
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
}
else
{
//m_pOutHouseObject->ConvertNormal();
pd3dDevice->SetRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->SetRenderState( D3DRS_LIGHTING,TRUE);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->SetTexture(1,NULL);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
m_pOutHouseObject->Render(pd3dDevice);
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
}
//}//////////////////////////////////////////////////////////////////////////
} //if(m_pOutHouseObject)
else
{
}
if(m_pMedHouseObject && m_pMedHouseObject->IsLoaded())
{
//////////////////////////////////////////////////////////////////////////
//if (strstr(m_pMedHouseObject->m_strName, "_qwe"))
//{
if(m_isHaveLightmap && m_Lightmap->IsLoaded())
{
pd3dDevice->SetTexture(1,m_Lightmap->GetTexture());
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->LightEnable(0,FALSE);
pd3dDevice->SetRenderState( D3DRS_AMBIENT, tempColor.c);
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
///////////// ¿¥ºñ¾ðÆ® ¼öÁ¤
pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, tempColor.c);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
/////////////
m_pMedHouseObject->Render(pd3dDevice);
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
}
else
{
//m_pMedHouseObject->ConvertNormal();
pd3dDevice->SetRenderState( D3DRS_LIGHTING,TRUE);
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
// ¶óÀÌÆ®¸Ê ¾ø´Â ÇϿ콺 ¾ËÆÄÀû¿ë 7.29
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,TRUE);
pd3dDevice->SetRenderState( D3DRS_AMBIENT, CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
//pd3dDevice->SetRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
m_pMedHouseObject->Render(pd3dDevice);
pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,FALSE);
pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,FALSE);
pd3dDevice->SetRenderState( D3DRS_LIGHTING,FALSE);
}
//}//////////////////////////////////////////////////////////////////////////
} // if(m_pMedHouseObject)
if(m_pInHouseObject && m_pInHouseObject->IsLoaded())
{
//////////////////////////////////////////////////////////////////////////
//if (strstr(m_pInHouseObject->m_strName, "_qwe"))
//{
if(m_isHaveInLightmap && m_InLightmap->IsLoaded())
{
pd3dDevice->SetTexture(1,m_InLightmap->GetTexture());
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->LightEnable(0,FALSE);
pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff);
m_pInHouseObject->Render(pd3dDevice);
}
else if(m_isHaveLightmap && m_Lightmap->IsLoaded())
{
pd3dDevice->SetTexture(1,m_Lightmap->GetTexture());
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->LightEnable(0,FALSE);
pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff);
m_pInHouseObject->Render(pd3dDevice);
}
else
{
//m_pInHouseObject->ConvertNormal();
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
//pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
if(BaseGraphicsLayer::m_VoodooOption)
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
else
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
pd3dDevice->SetRenderState(D3DRS_AMBIENT,CSceneManager::m_WeatherManager.m_InterAmbientColor.c);
pd3dDevice->SetLight(0,&CSceneManager::m_WeatherManager.m_SunLight);
m_pInHouseObject->Render(pd3dDevice);
}
//}//////////////////////////////////////////////////////////////////////////
}
if(m_pFlagHouseObject && m_pFlagHouseObject->IsLoaded())
{
// edith 2009.05.05 9¹øÁ¸ ±ê¹ß À§Ä¡À߸ø³ª¿À´Â°Í ¿ÖÀÌ·¸°Ô Çß³Ä
matrix matWorld;
matWorld.MakeIdent();
matWorld._41 = 237305.0f;
matWorld._42 = 16055.0f;
matWorld._43 = 236122.0f;
pd3dDevice->SetTransform(D3DTS_WORLD,matWorld);
pd3dDevice->LightEnable(0,TRUE);
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pFlagHouseObject->Render(pd3dDevice);
}
}
void CHouseObject::GenerateOctree()
{
GetPolygon();
m_pOctree=new COctreeScene();
vector3 pPoly[3];
for(int i=0;i<(int)m_pVertex.size();i++)
{
WORD *pIndices=m_pIndices[i];
vector3 *pVertex=m_pVertex[i];
for(int cIndices=0;cIndices<m_nIndices[i];cIndices++)
{
pPoly[0]=pVertex[pIndices[cIndices*3+0]];
pPoly[1]=pVertex[pIndices[cIndices*3+1]];
pPoly[2]=pVertex[pIndices[cIndices*3+2]];
m_pOctree->AddPoly(pPoly);
}
}
vector3 vecBoundBox[8];
vector3 vecPolyTest[3];
vector3 vecPlaneNormal;
matrix matTrans;
//float fIntersection;
WORD wCollisionIndices[]=
{
4,1,0,
1,4,5,
5,3,1,
3,5,7,
7,2,3,
2,7,6,
6,0,2,
0,6,4
};
vector3 vecDirection[8];
vecDirection[0]=vector3(0.707f,0.0f,0.707f);
vecDirection[1]=vector3(0.707f,0.0f,-0.707f);
vecDirection[2]=vector3(-0.707f,0.0f,0.707f);
vecDirection[3]=vector3(-0.707f,0.0f,-0.707f);
vecDirection[4]=vector3(1.0f,0.0f,0.0f);
vecDirection[5]=vector3(-1.0f,0.0f,0.0f);
vecDirection[6]=vector3(0.0f,0.0f,1.0f);
vecDirection[7]=vector3(0.0f,0.0f,-1.0f);
vector3 vecLens;
/*
matrix matTM;
for(int cObject=0;cObject<m_ObjectList.num;cObject++)
{
matTM=m_ObjectList[cObject]->m_TM;
vecBoundBox[0].x=m_ObjectList[cObject]->m_vecMinBox.x;
vecBoundBox[0].y=m_ObjectList[cObject]->m_vecMinBox.y;
vecBoundBox[0].z=m_ObjectList[cObject]->m_vecMinBox.z;
vecBoundBox[1].x=m_ObjectList[cObject]->m_vecMaxBox.x;
vecBoundBox[1].y=m_ObjectList[cObject]->m_vecMinBox.y;
vecBoundBox[1].z=m_ObjectList[cObject]->m_vecMinBox.z;
vecBoundBox[2].x=m_ObjectList[cObject]->m_vecMinBox.x;
vecBoundBox[2].y=m_ObjectList[cObject]->m_vecMinBox.y;
vecBoundBox[2].z=m_ObjectList[cObject]->m_vecMaxBox.z;
vecBoundBox[3].x=m_ObjectList[cObject]->m_vecMaxBox.x;
vecBoundBox[3].y=m_ObjectList[cObject]->m_vecMinBox.y;
vecBoundBox[3].z=m_ObjectList[cObject]->m_vecMaxBox.z;
vecBoundBox[4].x=m_ObjectList[cObject]->m_vecMinBox.x;
vecBoundBox[4].y=m_ObjectList[cObject]->m_vecMaxBox.y+50.0f;
vecBoundBox[4].z=m_ObjectList[cObject]->m_vecMinBox.z;
vecBoundBox[5].x=m_ObjectList[cObject]->m_vecMaxBox.x;
vecBoundBox[5].y=m_ObjectList[cObject]->m_vecMaxBox.y+50.0f;
vecBoundBox[5].z=m_ObjectList[cObject]->m_vecMinBox.z;
vecBoundBox[6].x=m_ObjectList[cObject]->m_vecMinBox.x;
vecBoundBox[6].y=m_ObjectList[cObject]->m_vecMaxBox.y+50.0f;
vecBoundBox[6].z=m_ObjectList[cObject]->m_vecMaxBox.z;
vecBoundBox[7].x=m_ObjectList[cObject]->m_vecMaxBox.x;
vecBoundBox[7].y=m_ObjectList[cObject]->m_vecMaxBox.y+50.0f;
vecBoundBox[7].z=m_ObjectList[cObject]->m_vecMaxBox.z;
for(int i=0;i<8;i++)
{
matTrans.Translation(vecBoundBox[i]);
matTrans=matTrans*matTM;
vecBoundBox[i]=matTrans.GetLoc();
}
//
//vecPolyTest[0]=vecBoundBox[4];
//vecPolyTest[1]=vecBoundBox[0];
//vecPolyTest[2]=vecBoundBox[1];
bool bAlready=false;
for(int cIndices=0;cIndices<8;cIndices++)
{
vecPolyTest[0]=vecBoundBox[wCollisionIndices[cIndices*3+0]];
vecPolyTest[1]=vecBoundBox[wCollisionIndices[cIndices*3+1]];
vecPolyTest[2]=vecBoundBox[wCollisionIndices[cIndices*3+2]];
m_pOctree->AddPoly(vecPolyTest);
}
}
*/
m_pOctree->GenerateOctree();
}
void CHouseObject::CalcBox(vector3 &MinBox, vector3 &MaxBox,int iCalcObject)
{
if(iCalcObject == 0)
{
if(m_pOutHouseObject)
{
MaxBox=m_pOutHouseObject->m_MaxBox;
MinBox=m_pOutHouseObject->m_MinBox;
}
if(m_pMedHouseObject)
{
if(MaxBox.x < m_pMedHouseObject->m_MaxBox.x)
MaxBox.x=m_pMedHouseObject->m_MaxBox.x;
if(MaxBox.y < m_pMedHouseObject->m_MaxBox.y)
MaxBox.y=m_pMedHouseObject->m_MaxBox.y;
if(MaxBox.z < m_pMedHouseObject->m_MaxBox.z)
MaxBox.z=m_pMedHouseObject->m_MaxBox.z;
if(MinBox.x > m_pMedHouseObject->m_MinBox.x)
MaxBox.x=m_pMedHouseObject->m_MinBox.x;
if(MinBox.y > m_pMedHouseObject->m_MinBox.y)
MinBox.y=m_pMedHouseObject->m_MinBox.y;
if(MinBox.z > m_pMedHouseObject->m_MinBox.z)
MinBox.z=m_pMedHouseObject->m_MinBox.z;
}
if(m_pInHouseObject)
{
if(MaxBox.x < m_pOutHouseObject->m_MaxBox.x)
MaxBox.x=m_pOutHouseObject->m_MaxBox.x;
if(MaxBox.y < m_pOutHouseObject->m_MaxBox.y)
MaxBox.y=m_pOutHouseObject->m_MaxBox.y;
if(MaxBox.z < m_pOutHouseObject->m_MaxBox.z)
MaxBox.z=m_pOutHouseObject->m_MaxBox.z;
if(MinBox.x > m_pOutHouseObject->m_MinBox.x)
MaxBox.x=m_pOutHouseObject->m_MinBox.x;
if(MinBox.y > m_pOutHouseObject->m_MinBox.y)
MinBox.y=m_pOutHouseObject->m_MinBox.y;
if(MinBox.z > m_pOutHouseObject->m_MinBox.z)
MinBox.z=m_pOutHouseObject->m_MinBox.z;
}
}
else if(iCalcObject == 1)
{
if(m_pInHouseObject)
{
MaxBox = m_pInHouseObject->m_MaxBox;
MinBox = m_pInHouseObject->m_MinBox;
}
}
}
void CHouseObject::GetPolygon()
{
int cObject;
m_pIndices.clear();
m_nIndices.clear();
m_pVertex.clear();
if(m_pOutHouseObject)
{
m_pOutHouseObject->AllLockBuffer();
for(cObject=0;cObject<m_pOutHouseObject->GetObjectCount();cObject++)
{
vector3 *AddVertex=new vector3[m_pOutHouseObject->m_nVertex[cObject]];
MultiVertex *pVertex=(MultiVertex*)m_pOutHouseObject->m_pVertex[cObject];
for(int cVertex=0;cVertex<m_pOutHouseObject->m_nVertex[cObject];cVertex++)
AddVertex[cVertex]=pVertex[cVertex].v;
m_pVertex.push_back(AddVertex);
WORD *AddIndices=new WORD[m_pOutHouseObject->m_nIndices[cObject]*3];
memcpy(AddIndices,m_pOutHouseObject->m_pIndices[cObject],sizeof(WORD)*3*m_pOutHouseObject->m_nIndices[cObject]);
m_pIndices.push_back(AddIndices);
m_nIndices.push_back(m_pOutHouseObject->m_nIndices[cObject]);
}
m_pOutHouseObject->AllUnlockBuffer();
}
if(m_pInHouseObject)
{
m_pInHouseObject->AllLockBuffer();
for(cObject=0;cObject<m_pInHouseObject->GetObjectCount();cObject++)
{
vector3 *AddVertex=new vector3[m_pInHouseObject->m_nVertex[cObject]];
MultiVertex *pVertex=(MultiVertex*)m_pInHouseObject->m_pVertex[cObject];
for(int cVertex=0;cVertex<m_pInHouseObject->m_nVertex[cObject];cVertex++)
AddVertex[cVertex]=pVertex[cVertex].v;
m_pVertex.push_back(AddVertex);
WORD *AddIndices=new WORD[m_pInHouseObject->m_nIndices[cObject]*3];
memcpy(AddIndices,m_pInHouseObject->m_pIndices[cObject],sizeof(WORD)*3*m_pInHouseObject->m_nIndices[cObject]);
m_pIndices.push_back(AddIndices);
m_nIndices.push_back(m_pInHouseObject->m_nIndices[cObject]);
}
m_pInHouseObject->AllUnlockBuffer();
}
if(m_pMedHouseObject)
{
m_pMedHouseObject->AllLockBuffer();
for(cObject=0;cObject<m_pMedHouseObject->GetObjectCount();cObject++)
{
vector3 *AddVertex=new vector3[m_pMedHouseObject->m_nVertex[cObject]];
MultiVertex *pVertex=(MultiVertex*)m_pMedHouseObject->m_pVertex[cObject];
for(int cVertex=0;cVertex<m_pMedHouseObject->m_nVertex[cObject];cVertex++)
AddVertex[cVertex]=pVertex[cVertex].v;
m_pVertex.push_back(AddVertex);
WORD *AddIndices=new WORD[m_pMedHouseObject->m_nIndices[cObject]*3];
memcpy(AddIndices,m_pMedHouseObject->m_pIndices[cObject],sizeof(WORD)*3*m_pMedHouseObject->m_nIndices[cObject]);
m_pIndices.push_back(AddIndices);
m_nIndices.push_back(m_pMedHouseObject->m_nIndices[cObject]);
}
m_pMedHouseObject->AllUnlockBuffer();
}
}
bool CHouseObject::LoadOut(char *strOutName)
{
if(m_pOutHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pOutHouseObject);
}
m_pOutHouseObject = (CROSSM::CNMesh *)CSceneManager::_GetResource(CROSSM::RESOURCE_MESH,strOutName);
return true;
}
bool CHouseObject::LoadIn(char *strInName)
{
if(m_pInHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pInHouseObject);
}
m_pInHouseObject = (CROSSM::CNMesh *)CSceneManager::_GetResource(CROSSM::RESOURCE_MESH,strInName);
return true;
}
bool CHouseObject::LoadMed(char *strMedName)
{
if(m_pMedHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pMedHouseObject);
}
m_pMedHouseObject = (CROSSM::CNMesh *)CSceneManager::_GetResource(CROSSM::RESOURCE_MESH,strMedName);
return true;
}
bool CHouseObject::LoadFlag(char *strFlagName)
{
if(m_pFlagHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH, m_pFlagHouseObject);
}
m_pFlagHouseObject = (CROSSM::CNMesh *)CSceneManager::_GetResource(CROSSM::RESOURCE_MESH, strFlagName);
return true;
}
bool CHouseObject::LoadOctree(char *strOct)
{
//m_pOctree
if(m_pOctree)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_OCTREESCENE,m_pOctree);
}
m_pOctree = (COctreeScene *)CSceneManager::_GetResource(CROSSM::RESOURCE_OCTREESCENE,strOct);
return true;
}
bool CHouseObject::LoadLightmap(char *strName)
{
if(m_Lightmap)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_TEXTURE,m_Lightmap);
}
m_Lightmap = (CROSSM::CNTexture *)CSceneManager::_GetResource(CROSSM::RESOURCE_TEXTURE,strName);
m_isHaveLightmap = true;
return true;
}
bool CHouseObject::LoadInLightmap(char *strName)
{
if(m_InLightmap)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_TEXTURE,m_InLightmap);
}
m_InLightmap = (CROSSM::CNTexture *)CSceneManager::_GetResource(CROSSM::RESOURCE_TEXTURE,strName);
m_isHaveInLightmap = true;
return true;
}
void CHouseObject::ReleaseOut()
{
if(m_pOutHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pOutHouseObject);
m_pOutHouseObject = NULL;
}
}
void CHouseObject::ReleaseIn()
{
if(m_pInHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pInHouseObject);
m_pInHouseObject = NULL;
}
}
void CHouseObject::ReleaseMed()
{
if(m_pMedHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH,m_pMedHouseObject);
m_pMedHouseObject = NULL;
}
}
void CHouseObject::ReleaseFlag()
{
if(m_pFlagHouseObject)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_MESH, m_pFlagHouseObject);
m_pFlagHouseObject = NULL;
}
}
void CHouseObject::ReleaseOctree()
{
if(m_pOctree)
{
CSceneManager::_ReleaseResource(CROSSM::RESOURCE_OCTREESCENE,m_pOctree);
m_pOctree = NULL;
}
}
void CHouseObject::RenderOctree(IDirect3DDevice8* pDevice)
{
if (m_pOctree)
{
m_pOctree->RenderOctreeTriangle(pDevice);
}
}