Files
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

109 lines
3.6 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 );
void EstablishOneMapSafe( 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;