#pragma once ////////////////////////////////////////////////////////////////////////// // #include "MapTypes.h" #include class GameZone; ////////////////////////////////////////////////////////////////////////// // class WiseMapInfo { public: WiseMapInfo(EngineInstances& rINSTANCE) : m_rINSTANCE(rINSTANCE) { ; } ~WiseMapInfo() { _Clear(); } public: TERRAIN_ID_T Create(CWzArchive& archive, MAPCODE mcCODE); static BOOL ConstructInstance(MAPCODE mcCODE, GameZone*& IN OUT rpGameZone); static BOOL DestructInstance(GameZone*& IN OUT rpGameZone); private: inline MapFieldInfo* FindMapFieldInfo(FIELDCODE fcCODE); inline MapWmoInfo* FindMapWmoInfo(FIELDCODE fcCODE); inline sSharedFieldInfo* FindSharedMapInfo(FIELDCODE fcFIELD, FIELDCODE fcWMO); inline void AddMapFieldInfo(FIELDCODE fcCODE, MapFieldInfo* pINFO); inline void AddMapWmoInfo(FIELDCODE fcCODE, MapWmoInfo* pINFO); void AddSharedMapInfo(FIELDCODE fcFIELD, MapFieldInfo* pFIELD, FIELDCODE fcWMO, MapWmoInfo* pWMO); BOOL _CheckVersion_MAPnWMO(DWORD verMAP, DWORD verWMO); void _Clear(); void _Destroy(); private: EngineInstances& m_rINSTANCE; MAP_CONTAINER_HASH m_MAP_CONTAINER_HASH; SHARED_FIELD_INFO_HASH m_SHARED_FIELD_HASH; MAP_FIELD_INFO_HASH m_MAP_FIELD_HASH; MAP_WMO_INFO_HASH m_MAP_WMO_HASH; }; MapFieldInfo* WiseMapInfo::FindMapFieldInfo(FIELDCODE fcCODE) { MapFieldInfo* pINFO = NULL; MAP_FIELD_INFO_HASH_IT itFIND = m_MAP_FIELD_HASH.find(fcCODE); if(itFIND != m_MAP_FIELD_HASH.end()) pINFO = itFIND->second; return pINFO; } MapWmoInfo* WiseMapInfo::FindMapWmoInfo(FIELDCODE fcCODE) { MapWmoInfo* pINFO = NULL; MAP_WMO_INFO_HASH_IT itFIND = m_MAP_WMO_HASH.find(fcCODE); if(itFIND != m_MAP_WMO_HASH.end()) pINFO = itFIND->second; return pINFO; } sSharedFieldInfo* WiseMapInfo::FindSharedMapInfo(FIELDCODE fcFIELD, FIELDCODE fcWMO) { sSharedFieldInfo* pINFO = NULL; uFIELD_ID uID; uID.FIELD = fcFIELD; uID.WMO = fcWMO; SHARED_FIELD_INFO_HASH_IT itFIND = m_SHARED_FIELD_HASH.find(uID.ID); if(itFIND != m_SHARED_FIELD_HASH.end()) { sSharedFieldInfo& rINFO = (itFIND->second); return &rINFO; } return pINFO; } void WiseMapInfo::AddMapFieldInfo(FIELDCODE fcCODE, MapFieldInfo* pINFO) { m_MAP_FIELD_HASH.insert(make_pair(fcCODE, pINFO)); } void WiseMapInfo::AddMapWmoInfo(FIELDCODE fcCODE, MapWmoInfo* pINFO) { m_MAP_WMO_HASH.insert(make_pair(fcCODE, pINFO)); } //////////////////////////////////////////////////////////////////////////// //// //class WiseMapInfo //{ //public: WiseMapInfo(EngineInstances& rINSTANCE) : m_rINSTANCE(rINSTANCE), m_pWorldBase(NULL), m_wVersion(0) { m_FIELD_ID.ID = 0; } // ~WiseMapInfo() { _Clear(); } // //public: BOOL Create(MAPCODE mcCODE); // BOOL Create(const CHAR* pszFieldPath, FIELDCODE fcFIELD, FIELDCODE fcWMO, BOOL bUsePathEngine); // inline // CWorldBase& EIWORLDBASE() { return *m_pWorldBase; } // inline // FIELDCODE CODEofFIELD() { return m_FIELD_ID.FIELD; } // inline // FIELDCODE CODEofWMO() { return m_FIELD_ID.WMO; } // inline // DWORD GUIDofFIELD() { return m_FIELD_ID.ID; } // inline // TriggerInfoManager& ManagerOfTriggerInfo() { return m_TriggerInfoManager; } // //private: BOOL _Load(const CHAR* pszFieldPath); // BOOL _Load_WMO(CWzArchive& archive); // BOOL _Load_WMO_MAPOBJECT(CWzArchive& archive); // BOOL _Load_WMO_TRIGGER(CWzArchive& archive); // BOOL _CheckVersion_MAPnWMO(DWORD verMAP, DWORD verWMO); // void _Clear(); // void _Destroy(); // //private: EngineInstances& m_rINSTANCE; // CWorldBase* m_pWorldBase; // uFIELD_ID m_FIELD_ID; // WORD m_wVersion; // Field Version // MAPOBJECT_INFO_HASH m_MapObjHash; // //#ifdef __NA_000360_20070323_TRIGGER_LIBRARY // TriggerInfoManager m_TriggerInfoManager; //#endif // //};