Files
2022-10-26 12:25:11 +08:00

109 lines
2.2 KiB
C++

#ifndef __MAP_UNIT_CACHER_H__
#define __MAP_UNIT_CACHER_H__
//=============================================================================================================================
/// MapUnitCacher
/**
@author Kim Min Wook < taiyo@webzen.co.kr >
@since 2004. 1. 28
@remarks
- 맵 유닛 ( 오브젝트, 풀 등)을 로드하고 객체 관리하는 작업
@note
- 풀만 처리.
-
*/
//=============================================================================================================================
#define MAP_GRASS_KEY_START 100000
#define MAP_SPEED_TREE_KEY_START 200000
#pragma once
#include <MemoryPoolFactory.h>
#include <SolarHashTable.h>
class CWzUnitDraw;
class CWzUnit;
class CDrawBase;
class CWzArchive;
class CWorldBase;
class MapWzUnitDraw
{
public:
enum eUNIT_TYPE
{
UT_OBJECT,
UT_GRASS,
};
MapWzUnitDraw() : pUnitDraw( NULL ), dwAttribute(0), wzId( 0 )
{
}
~MapWzUnitDraw() {}
DWORD dwUniqueID;
WzVector wzRot;
WzID wzId;
DWORD dwAttribute;
CWzUnitDraw * pUnitDraw;
BYTE byAttr; //< 풀에서만 사용
WzColor wzColor; //< 이동되었을 때에는 color를 업데이트 해줘야 한다.
int iPhysicsType;
};
class MapUnitCacher
{
enum
{
CHUNK_OBJECT = 0x1781,
CHUNK_GRASS = 0x1783,
};
class MapWzUnit
{
public:
CWzUnit * m_pwzUnit;
WzID m_wiID;
int m_iPhysicsType;
};
public:
MapUnitCacher();
~MapUnitCacher();
VOID Init( CDrawBase * pDraw);
VOID LoadMapGrassUnit( VOID ); ///< 풀은 스크립트 파일이 전역적임 한번만 로딩
VOID LoadMapGrassUnitDraw( CWorldBase * pWorldBase );
VOID UnloadAll();
CWzUnit * GetMapUnit( WzID dwMapUnitID );
MapWzUnitDraw * GetMapUnitDraw( DWORD dwID );
VOID SetHide(BOOL bHide);
VOID SetFirst();
MapWzUnitDraw * GetNext();
private:
WzColor _getTerrainColor( CWorldBase * pWorldBase, WzVector * pWvPos );
DWORD m_dwUniqueID;
util::SolarHashTable<MapWzUnitDraw *> * m_pMapUnitDrawHashTable; ///< 맵상에 존재하는 풀 객체 ( 랜더링 대상 객체 hash )
util::SolarHashTable<MapWzUnit *> * m_pMapUnitHashTable;
util::CMemoryPoolFactory<MapWzUnit> * m_pWzUnitPool;
CDrawBase * m_pDraw;
};
#endif // __MAP_UNIT_CACHER_H__