Files
Sun1602/Tools/WiseClient/Information/Zone/WiseMapInfo.h
T
2022-10-26 12:25:11 +08:00

128 lines
3.8 KiB
C++

#pragma once
//////////////////////////////////////////////////////////////////////////
//
#include "MapTypes.h"
#include <TriggerInfoManager.h>
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 //
//};