#ifndef __FILED_INFO_H__ #define __FILED_INFO_H__ #pragma once //#include "MapDefine.h" #include #include #include #include //#include //#include <3DEngine/Common/BoundingVolume.h> //#include #pragma warning(push) #pragma warning(disable : 4100 4201) #include <3DEngine/3DTerrain/WorldBase.h> #pragma warning(pop) class CWorldBase; struct WzVector; class ViewPortManager; class MAPOBJECT_INFO { public: MAPOBJECT_INFO(){} ~MAPOBJECT_INFO(){} DWORD dwMapObjectID; WzID wzId; DWORD dwAttribute; WzVector wvPos; WzVector wzRot; WzVector wzScale; WzBoundingVolume wzBV; }; class SectorInfo { enum { MAX_NEIGHBOR_SECTOR_NUM = 8, }; public: SectorInfo( DWORD index ); ~SectorInfo(); inline DWORD GetSectorIndex() { return m_dwSectorIndex; } VOID AddNeighbor( SectorInfo * pSectorInfo ); inline util::CLinkedlist & GetNeighborList() { return m_NeighborSectorInfo; } private: DWORD m_dwSectorIndex; util::CLinkedlist m_NeighborSectorInfo; }; class FieldInfo { enum { _MAX_MAPOBJECT_INFO_NUM = 100, }; public: FieldInfo(); ~FieldInfo(); // °¢ Field¸¶´Ù È£ÃâµÇ¾î¾ß ÇÏ´Â ÇÔ¼ö INT Init(); VOID Release( INT Index ); VOID Create( const sFIELDINFO * pInfoIn ); //, ViewPortManager *pViewPortManager ); VOID Destroy(); BOOL Load(); VOID EstablishSectorInfo( WORD wSectorSize, BOOL bViewport ); //get,set FIELDCODE GetFieldCode() { return m_pFieldInfo->FieldCode; } DWORD GetSectorIndexFor( WzVector* pwzVec ); VOID GetSectorIndexFor( WzVector * pwzVec, DWORD & dwXIndexOut, DWORD & dwYIndexOut ); inline DWORD GetSectorSize() { return m_dwSectorSize; } inline SectorInfo* GetSectorInfo( DWORD dwIndex ) { return m_ppSectorInfo[dwIndex]; } inline CWorldBase* GetWorldBase() { return m_pWorldBase; } inline DWORD GetTotalSectorNum() { return m_dwTotalSectorNum; } inline DWORD GetSectorXNum() { return m_dwSectorXNum; } inline DWORD GetSectorYNum() { return m_dwSectorYNum; } inline VOID SetFieldInfo( const sFIELDINFO * pInfoIn ){ m_pFieldInfo = pInfoIn; } inline const sFIELDINFO * GetFieldInfo() { return m_pFieldInfo; } BOOL CheckMapVersion( DWORD dwCheckSum ); VOID SetStartingTileIndex(); // DWORD GetRandomStartingTileIndex(); WzSpecialArea * GetAreaInfo( WzID AreaID ) { return m_pWorldBase->GetSpecialArea( AreaID ); } WzSpecialArea * GetAreaInfoByIndex( INT index ) { return m_pWorldBase->GetSpecialAreaByIndex(index); } util::SolarHashTable *GetMapObjectInfoHashTable() { return m_pMapObjectInfoHashTable; } BOOL GetViewPort() { return m_bViewport; } template VOID ForeachArea( AreaOperator & op ) { int num = m_pWorldBase->GetNumberOfSpecialArea(); for( int i = 0 ; i < num ; ++i ) { WzSpecialArea * pArea = m_pWorldBase->GetSpecialAreaByIndex(i); op(pArea); } } BOOL IsValidCoordinates( WzVector* pwzVec ); private: //VOID _loadAreaInfo( CWzArchive & archive ); VOID _loadMapObjectInfo( CWzArchive & archive ); //VOID _unloadAreaInfo(); VOID _unloadMapObjectInfo(); //WORD m_wFieldID; BOOL m_bViewport; // ºäÆ÷Æ® 󸮸¦ ÇÏ´Â ¸ÊÀÎÁö WzVector m_wvStartingVector; const sFIELDINFO * m_pFieldInfo; DWORD m_dwSectorSize; // ´ÜÀ§ ¼½ÅÍÀÇ Å©±â(ÀüÁ¦Á¶°Ç : Á¤»ç°¢Çü) DWORD m_dwSectorXNum; // Çʵ带 ±¸¼ºÇÏ´Â XÁÂÇ¥»óÀÇ ¼½ÅÍ °¹¼ö DWORD m_dwSectorYNum; // Çʵ带 ±¸¼ºÇÏ´Â YÁÂÇ¥»óÀÇ ¼½ÅÍ °¹¼ö DWORD m_dwTotalSectorNum; // ÃÑ ¼½ÅÍ °¹¼ö(m_dwSectorXNum * m_dwSectorYNum) // ¼½ÅÍ À妽º¸¦ °è»êÇϱâ À§ÇÑ º¯¼ö int m_iShiftMinX; // ¸Ê»óÀÇ ÃÖ¼Ò XÁÂÇ¥ÀÇ Àý´ë°ª int m_iShiftMinY; // ¸Ê»óÀÇ ÃÖ¼Ò YÁÂÇ¥ÀÇ Àý´ë°ª int m_iShiftMaxX; // ¸Ê»óÀÇ ÃÖ´ë XÁÂÇ¥ÀÇ Àý´ë°ª int m_iShiftMaxY; // ¸Ê»óÀÇ ÃÖ´ë YÁÂÇ¥ÀÇ Àý´ë°ª //char m_szFileName[MAX_PATH]; CWorldBase * m_pWorldBase; SectorInfo ** m_ppSectorInfo; // MAPÆÄÀÏÀÇ ¿µ¿ª Á¤º¸ //util::SolarHashTable * m_pAreaInfoHashTable; util::SolarHashTable * m_pMapObjectInfoHashTable; STLX_VECTOR m_StartTiles; ViewPortManager *m_pViewPortManager; }; class MapInfo { friend class Map; friend class MapInfoLoader; enum { _MAX_FIELD_IN_MAP_NUM = 10, }; public: MapInfo(); ~MapInfo(); CODETYPE GetMapCode() { return m_pMapInfo->MapCode; } inline VOID SetMapInfo( const sMAPINFO * pInfoIn ) { m_pMapInfo = pInfoIn; } const sMAPINFO * GetMapInfo() { return m_pMapInfo; } VOID AddFieldInfo( FieldInfo * pFieldInfo ); FieldInfo* GetFieldInfo( CODETYPE FieldCode ) { return m_FieldInfoHashTable.GetData( FieldCode ); } util::SolarHashTable * GetFieldInfoHashTable() { return &m_FieldInfoHashTable; } protected: VOID setFirst() { m_FieldInfoHashTable.SetFirst(); } FieldInfo * getNext() { return m_FieldInfoHashTable.GetNext(); } private: const sMAPINFO * m_pMapInfo; util::SolarHashTable m_FieldInfoHashTable; }; #endif // __FILED_INFO_H__