// cubemanager.h #ifndef _3DTERRAIN_CUBEMANAGER_H_ #define _3DTERRAIN_CUBEMANAGER_H_ #include #include #include class COctree; #define DFLT_CUBE_SIZE ( 20.0f) // Å¥ºê ÇϳªÀÇ Á¤º¸ typedef WORD WzCubeIndex; typedef struct { WzCubeIndex m_wciMyIndex; // ÀÚ½ÅÀÇ Å¥ºê ¹øÈ£ int m_iNumNearCubes; // Àα٠ťºê °³¼ö WzCubeIndex m_wciNearCubes[26]; } St_CubeInfo; class CCubeManager { public: CCubeManager(void); virtual ~CCubeManager(void); virtual void Clear(); public: BOOL Create( COctree *pOctree, float fCubeSize = DFLT_CUBE_SIZE); void Destroy(); BOOL Serialize( CWzArchive *pArchive); // --- ¿µ¿ª ºÐÇÒ Á¤º¸ protected: BvAABB m_aabbRegion; float m_fCubeSize; WORD m_wDivisionCount[3]; int m_iNumCube; St_CubeInfo *m_pCubeInfo; // Å¥ºê Á¤º¸¸¦ ´ã´Â °÷ CWzHashTable m_htCubeInfo; // À妽º °è»ê WzCubeIndex CubeIndex( int x, int y, int z); int CubeElement( WzCubeIndex wciIndex, int iElement); // À妽º¿Í °æ°è °£ °è»ê WORD GetElementIndex( float fPos, int iElement); // Å¥ºê À妽º ¾òÀ»¶§ ÁÂÇ¥Ãà º° À妽º ¾ò±â float GetElementPos( int iIndex, int iElement); // ÁÂÇ¥Ãà º° À妽º¸¦ ÅëÇØ ¿µ¿ª °æ°è ¾ò±â // ±âŸ public: WzCubeIndex GetCubeIndex( WzVector wvPos); // ÇØ´ç ÁÂÇ¥°¡ Æ÷ÇÔµÉ Å¥ºê À妽º ¾ò±â BvAABB GetCubeRegion( WzCubeIndex wciIndex); // Å¥ºê°¡ Â÷ÁöÇÏ´Â ¿µ¿ª ¾ò±â int GetTotalNumberOfCubeInfo() { return ( m_iNumCube); } // Å¥ºê °³¼ö ¾ò±â St_CubeInfo* GetCubeInfoByIndex( int iIndex) { return ( &m_pCubeInfo[iIndex]); } // À妽º¿¡ ÀÇÇØ Å¥ºê Á¤º¸ ¾ò±â int GetNearCubeList( WzCubeIndex wciCube, WzCubeIndex *pwciResult, int iMaxCount); // Àα٠ťºê ¸®½ºÆ® ¾ò±â (°³¼ö ¸®ÅÏ) void AddNearCube( St_CubeInfo *pCubeInfo, WzCubeIndex wciNear); }; #endif // _3DTERRAIN_CUBEMANAGER_H_