📄 objectfactory.cpp
字号:
// ObjectFactory.cpp: implementation of the CObjectFactory class.
//
//////////////////////////////////////////////////////////////////////
#include "Stdafx.h"
#include "ObjectFactory.h"
#include "Player.h"
#include "BossMonster.h"
#include "Npc.h"
#include "TacticObject.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CObjectFactory * g_pObjectFactory=NULL;
CObjectFactory::CObjectFactory()
{
PlayerPool = NULL;
MonsterPool = NULL;
NpcPool = NULL;
TacticPool = NULL;
BossMonsterPool = NULL;
// ItemObjectPool = NULL;
}
CObjectFactory::~CObjectFactory()
{
Release();
}
void CObjectFactory::Init()
{
PlayerPool = new CMemoryPoolTempl<CPlayer>;
MonsterPool = new CMemoryPoolTempl<CMonster>;
NpcPool = new CMemoryPoolTempl<CNpc>;
TacticPool = new CMemoryPoolTempl<CTacticObject>;
BossMonsterPool = new CMemoryPoolTempl<CBossMonster>;
// ItemObjectPool = new CMemoryPool<CItemObject>;
PlayerPool->Init(MAX_TOTAL_PLAYER_NUM,100,"PlayerPool");
MonsterPool->Init(MAX_TOTAL_MONSTER_NUM,100,"MonsterPool");
BossMonsterPool->Init(MAX_TOTAL_BOSSMONSTER_NUM, 5, "BossMonsterPool");
NpcPool->Init(MAX_TOTAL_NPC_NUM,10,"NpcPool");
TacticPool->Init(MAX_TOTAL_TACTIC_NUM,10,"TacticPool");
// ItemObjectPool->Init(MAX_TOTAL_OBJECT_NUM);
}
void CObjectFactory::Release()
{
SAFE_DELETE(PlayerPool);
SAFE_DELETE(MonsterPool);
SAFE_DELETE(NpcPool);
SAFE_DELETE(TacticPool);
SAFE_DELETE(BossMonsterPool);
// SAFE_DELETE(ItemObjectPool);
}
CObject* CObjectFactory::MakeNewObject(EObjectKind Kind,DWORD AgentNum, BASEOBJECT_INFO* pBaseObjectInfo)
{
CObject* pObject;
switch(Kind)
{
case eObjectKind_Player:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)PlayerPool->Alloc();
break;
case eObjectKind_Monster:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)MonsterPool->Alloc();
break;
case eObjectKind_Npc:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)NpcPool->Alloc();
break;
/*
case eObjectKind_Item:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)ItemObjectPool->Alloc();
break;
*/
case eObjectKind_Tactic:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)TacticPool->Alloc();
break;
case eObjectKind_BossMonster:
// 按眉甫 积己秦辑 府畔矫难霖促
pObject = (CObject*)BossMonsterPool->Alloc();
break;
}
ASSERT(pObject);
if(pObject->Init(Kind,AgentNum,pBaseObjectInfo) == FALSE)
{
ReleaseObject(pObject);
return FALSE;
}
return pObject;
}
void CObjectFactory::ReleaseObject(CObject* pObject)
{
BYTE Kind = pObject->GetObjectKind();
pObject->Release();
switch(Kind)
{
case eObjectKind_Player:
// 按眉甫 积己秦辑 府畔矫难霖促
PlayerPool->Free((CPlayer*)pObject);
break;
case eObjectKind_Monster:
// 按眉甫 积己秦辑 府畔矫难霖促
MonsterPool->Free((CMonster*)pObject);
break;
case eObjectKind_Npc:
// 按眉甫 积己秦辑 府畔矫难霖促
NpcPool->Free((CNpc*)pObject);
break;
case eObjectKind_Tactic:
// 按眉甫 积己秦辑 府畔矫难霖促
TacticPool->Free((CTacticObject*)pObject);
break;
case eObjectKind_BossMonster:
// 按眉甫 积己秦辑 府畔矫难霖促
BossMonsterPool->Free((CBossMonster*)pObject);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -