Files
Sun1602/Server/GameServer/ResrcManager.h
T
2022-10-26 12:25:11 +08:00

108 lines
3.5 KiB
C++

//=============================================================================================================================
/// ResrcManager class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2006. 8. 2
@note
- Load된 맵관련 리소스를 관리하는 클래스
@history
*/
//=============================================================================================================================
#pragma once
#include <hash_map>
#include <MemoryPoolFactory.h>
class FieldInfo;
class UnitRegenInfoManager;
class UnitGroupInfoManager;
class SharedFieldInfo;
class ResrcManager
{
typedef STLX_HASH_MAP<DWORD, FieldInfo *> _FIELD_HASH;
typedef STLX_HASH_MAP<DWORD, UnitRegenInfoManager *> _REGEN_HASH;
typedef STLX_HASH_MAP<DWORD, UnitGroupInfoManager *> _GROUP_HASH;
typedef STLX_HASH_MAP<DWORD, SharedFieldInfo*> _SHAREDFIELD_HASH;
public:
ResrcManager(void);
~ResrcManager(void);
static void SetPoolSize( DWORD field_size, DWORD sector_size );
void Destroy();
void Establish();
__inline FieldInfo * FindFieldInfo( FIELDCODE fieldcode, WORD wmocode )
{
DWORD code = MAKEDWORD(fieldcode, wmocode);
_FIELD_HASH::iterator it = m_FieldInfoHash.find(code);
if( it == m_FieldInfoHash.end() ) return NULL;
return it->second;
}
__inline UnitRegenInfoManager * FindRegenInfoMgr( FIELDCODE fieldcode, WORD wutcode )
{
DWORD code = MAKEDWORD(fieldcode, wutcode);
_REGEN_HASH::iterator it = m_UnitRegenInfoMgrHash.find(code);
if( it == m_UnitRegenInfoMgrHash.end() ) return NULL;
return it->second;
}
__inline UnitGroupInfoManager * FindGroupInfoMgr( FIELDCODE fieldcode, WORD wutcode )
{
DWORD code = MAKEDWORD(fieldcode, wutcode);
_GROUP_HASH::iterator it = m_UnitGroupInfoMgrHash.find(code);
if( it == m_UnitGroupInfoMgrHash.end() ) return NULL;
return it->second;
}
__inline SharedFieldInfo * FindSharedFieldInfo( FIELDCODE fieldcode, WORD wmocode )
{
DWORD code = MAKEDWORD(fieldcode, wmocode);
_SHAREDFIELD_HASH::iterator it = m_SharedFieldInfoHash.find(code);
if( it == m_SharedFieldInfoHash.end() ) return NULL;
return it->second;
}
private:
void Establish( sMAPINFO * mapinfo );
__inline void InsertFieldInfo( FIELDCODE fieldcode, WORD wmocode, FieldInfo * p )
{
DWORD code = MAKEDWORD(fieldcode, wmocode);
std::pair<_FIELD_HASH::iterator,bool> ret = m_FieldInfoHash.insert( _FIELD_HASH::value_type(code, p) );
ASSERT(ret.second);
}
__inline void InsertRegenInfoMgr( FIELDCODE fieldcode, WORD wutcode, UnitRegenInfoManager * p )
{
DWORD code = MAKEDWORD(fieldcode, wutcode);
std::pair<_REGEN_HASH::iterator,bool> ret = m_UnitRegenInfoMgrHash.insert( _REGEN_HASH::value_type(code, p) );
ASSERT(ret.second);
}
__inline void InsertGroupInfoMgr( FIELDCODE fieldcode, WORD wutcode, UnitGroupInfoManager * p )
{
DWORD code = MAKEDWORD(fieldcode, wutcode);
std::pair<_GROUP_HASH::iterator,bool> ret = m_UnitGroupInfoMgrHash.insert( _GROUP_HASH::value_type(code, p) );
ASSERT(ret.second);
}
__inline void InsertSharedFieldInfo( FIELDCODE fieldcode, WORD wmocode, SharedFieldInfo * p )
{
DWORD code = MAKEDWORD(fieldcode, wmocode);
std::pair<_SHAREDFIELD_HASH::iterator,bool> ret = m_SharedFieldInfoHash.insert( _SHAREDFIELD_HASH::value_type(code, p) );
ASSERT(ret.second);
}
_FIELD_HASH m_FieldInfoHash;
_REGEN_HASH m_UnitRegenInfoMgrHash;
_GROUP_HASH m_UnitGroupInfoMgrHash;
static util::CMemoryPoolFactory<GameField> m_GameFieldPool;
static util::CMemoryPoolFactory<Sector> m_SectorPool;
_SHAREDFIELD_HASH m_SharedFieldInfoHash;
};
extern ResrcManager g_ResrcMgr;