152 lines
4.9 KiB
C++
152 lines
4.9 KiB
C++
#pragma once
|
|
|
|
#include <Object/GameObject.h>
|
|
#include <Object/RenderObject.h>
|
|
|
|
//¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´
|
|
//
|
|
struct MSG_BASE;
|
|
class GameObject;
|
|
|
|
|
|
|
|
//¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´
|
|
// <ObjectManager>
|
|
class ObjectManager
|
|
{
|
|
friend class ObjectManagerUpdater;
|
|
friend struct OBJ_OP_BASE;
|
|
friend struct OBJ_OP_USER;
|
|
friend struct OBJ_OP_PLAYER;
|
|
friend struct OBJ_OP_MONSTER;
|
|
private:
|
|
typedef STLX_MAP<DWORD, RenderObject*> GAME_OBJECT_MAP;
|
|
typedef GAME_OBJECT_MAP::iterator GAME_OBJECT_MAP_IT;
|
|
|
|
private: ObjectManager();
|
|
~ObjectManager();
|
|
public: static void CreateInstance();
|
|
static void DestroyInstance();
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
class ObjectManagerUpdater : public IWorkNode
|
|
{
|
|
public:
|
|
ObjectManagerUpdater() {}
|
|
~ObjectManagerUpdater() {}
|
|
public:
|
|
virtual BOOL DoInit();
|
|
virtual BOOL DoProcess();
|
|
virtual BOOL IsComplete();
|
|
virtual BOOL DoRelease();
|
|
|
|
virtual void OnMsg(sSIG_MSG* pSIG_MSG);
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
public: static RenderObject* FindObject(DWORD dwObjectKey);
|
|
static BOOL RegisterObject(RenderObject* pOBJECT);
|
|
static BOOL UnRegisterObject(RenderObject* pOBJECT);
|
|
|
|
inline static
|
|
void OnMsg(sSIG_MSG* pSIG_MSG) { Updater().OnMsg(pSIG_MSG); }
|
|
inline static
|
|
ObjectManagerUpdater& Updater() { return m_pInstance->m_Updater; }
|
|
|
|
|
|
template<typename _TY_RENDER_INFO> inline static
|
|
_TY_RENDER_INFO& ALIGN_RENDER_INFO(RenderObject* pRENDER, _TY_RENDER_INFO* IN pINFO)
|
|
{
|
|
const DWORD dwOffset = offsetof(_TY_RENDER_INFO, m_StateTotalInfo);// (DWORD) (__int64)&(((_TY_RENDER_INFO*)0)->m_StateTotalInfo);
|
|
_TY_RENDER_INFO& rINFO = pRENDER->RenderTypeOf<_TY_RENDER_INFO>();
|
|
DWORD dwAppendSize = sizeof(STATE_TOTAL_INFO) * pINFO->m_StateTotalInfo.m_Count;
|
|
CopyMemory(&rINFO, pINFO, dwOffset+dwAppendSize);
|
|
return rINFO;
|
|
}
|
|
|
|
private: RenderObject* AllocObject(GAME_OBJECT::TYPE eOBJTYPE);
|
|
BOOL FreeObject(RenderObject* pOBJECT);
|
|
|
|
//private: void OnEnter(sSIG_OBJCTRL* pSIG_MSG);
|
|
// void OnLeave(sSIG_OBJCTRL* pSIG_MSG);
|
|
// void OnAttack(sSIG_OBJCTRL* pSIG_MSG);
|
|
// void OnMove(sSIG_OBJCTRL* pSIG_MSG);
|
|
// void OnStatus(sSIG_OBJCTRL* pSIG_MSG);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <FIELDs>
|
|
private: static ObjectManager* m_pInstance;
|
|
ObjectManagerUpdater m_Updater;
|
|
GAME_OBJECT_MAP m_OBJMAP;
|
|
};
|
|
|
|
|
|
|
|
|
|
//¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´
|
|
//
|
|
//
|
|
#define OBJCTRL_HANDLER_DECL(prefix, name) \
|
|
virtual void On##name(ObjectManager& rMANAGER, sSIG_OBJCTRL& rSIG_MSG)
|
|
#define OBJCTRL_HANDLER_IMPL(prefix, name) \
|
|
void prefix::On##name(ObjectManager& rMANAGER, sSIG_OBJCTRL& rSIG_MSG)
|
|
|
|
//¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´
|
|
// <HANDLERs>
|
|
|
|
//¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦´
|
|
struct OBJ_OP_BASE
|
|
{
|
|
OBJ_OP_BASE() {}
|
|
virtual ~OBJ_OP_BASE() {}
|
|
OBJ_OP_BASE(RenderObject* pOBJECT) : m_pOBJECT(pOBJECT) {}
|
|
OBJ_OP_BASE(OBJ_OP_BASE& rCHILD) : m_pOBJECT(rCHILD.m_pOBJECT) {}
|
|
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, RenderInfo);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, Enter);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, Leave);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, Attack) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, Move) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_BASE, Status) { DEBUGGING_CODE_L3(""); }
|
|
|
|
RenderObject* m_pOBJECT;
|
|
};
|
|
|
|
struct OBJ_OP_USER : OBJ_OP_BASE
|
|
{
|
|
OBJ_OP_USER(RenderObject* pOBJECT) : OBJ_OP_BASE(pOBJECT) {}
|
|
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_USER, RenderInfo);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_USER, Attack) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_USER, Move) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_USER, Status) { DEBUGGING_CODE_L3(""); }
|
|
};
|
|
|
|
struct OBJ_OP_PLAYER : OBJ_OP_BASE
|
|
{
|
|
OBJ_OP_PLAYER(RenderObject* pOBJECT) : OBJ_OP_BASE(pOBJECT) {}
|
|
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, RenderInfo);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, Enter) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, Leave) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, Attack) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, Move) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_PLAYER, Status) { DEBUGGING_CODE_L3(""); }
|
|
};
|
|
|
|
struct OBJ_OP_MONSTER : OBJ_OP_BASE
|
|
{
|
|
OBJ_OP_MONSTER(RenderObject* pOBJECT) : OBJ_OP_BASE(pOBJECT) {}
|
|
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, RenderInfo);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, Enter);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, Leave);
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, Attack) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, Move) { DEBUGGING_CODE_L3(""); }
|
|
OBJCTRL_HANDLER_DECL(OBJ_OP_MONSTER, Status) { DEBUGGING_CODE_L3(""); }
|
|
};
|
|
|
|
|