📄 effectschedule.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : EffectSchedule.cpp// Written by : excel96// Description : //////////////////////////////////////////////////////////////////////////////#include "EffectSchedule.h"#include "Effect.h"#include "EffectManager.h"#include "Assert.h"#include "Zone.h"#include "ZoneUtil.h"#include "Tile.h"#include "ObjectRegistry.h"#include "skill/EffectVampirePortal.h"#include "Gpackets/GCAddVampirePortal.h"//////////////////////////////////////////////////////////////////////////////// class EffectScheduleWork member methods//////////////////////////////////////////////////////////////////////////////EffectScheduleWork::EffectScheduleWork() throw(){ __BEGIN_TRY m_Code = WORKCODE_MAX; __END_CATCH}EffectScheduleWork::~EffectScheduleWork() throw(){ __BEGIN_TRY //SAFE_DELETE(m_pData); // 内靛俊 蝶扼辑, void* m_pData甫 某胶泼秦辑, // 舅嘎霸 瘤况拎具 茄促. if (m_Code == WORKCODE_ADD_VAMPIRE_PORTAL) { Assert(m_pData == NULL); } else if (m_Code == WORKCODE_DELETE) { Assert(m_pData == NULL); } else { } __END_CATCH}//////////////////////////////////////////////////////////////////////////////// class EffectSchedule member methods//////////////////////////////////////////////////////////////////////////////EffectSchedule::EffectSchedule() throw(){ __BEGIN_TRY m_pEffect = NULL; __END_CATCH}EffectSchedule::~EffectSchedule() throw(){ __BEGIN_TRY while (!m_WorkList.empty()) { EffectScheduleWork* pWork = getFrontWork(); SAFE_DELETE(pWork); } __END_CATCH}void EffectSchedule::addWork(int WorkCode, void* pData) throw(){ __BEGIN_TRY Assert(WorkCode < WORKCODE_MAX); EffectScheduleWork* pWork = new EffectScheduleWork(); pWork->setCode(WorkCode); pWork->setData(pData); m_WorkList.push_back(pWork); __END_CATCH}EffectScheduleWork* EffectSchedule::getFrontWork(void) throw(){ __BEGIN_TRY if (!m_WorkList.empty()) { EffectScheduleWork* pWork = m_WorkList.front(); m_WorkList.pop_front(); return pWork; } return NULL; __END_CATCH}//////////////////////////////////////////////////////////////////////////////// class EffectScheduleManager member methods//////////////////////////////////////////////////////////////////////////////EffectScheduleManager::EffectScheduleManager() throw(){ __BEGIN_TRY __END_CATCH}EffectScheduleManager::~EffectScheduleManager() throw(){ __BEGIN_TRY while (!m_EffectScheduleList.empty()) { EffectSchedule* pSchedule = m_EffectScheduleList.front(); m_EffectScheduleList.pop_front(); SAFE_DELETE(pSchedule); } __END_CATCH}void EffectScheduleManager::addEffectSchedule(EffectSchedule* pEffectSchedule) throw(){ __BEGIN_TRY Assert(pEffectSchedule != NULL); __ENTER_CRITICAL_SECTION(m_Mutex) m_EffectScheduleList.push_back(pEffectSchedule); __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}void EffectScheduleManager::heartbeat(void) throw(){ __BEGIN_TRY __ENTER_CRITICAL_SECTION(m_Mutex) // 葛电 胶纳领阑 贸府且 锭鳖瘤... while (!m_EffectScheduleList.empty()) { EffectSchedule* pEffectSchedule = m_EffectScheduleList.front(); Assert(pEffectSchedule != NULL); Effect* pEffect = pEffectSchedule->getEffect(); // 累诀 措惑捞 登绰 捞棋飘啊 酒流 粮犁茄促搁, 累诀俊 甸绢埃促. if (pEffect != NULL) { // 葛电 老阑 贸府且 锭鳖瘤... while (true) { EffectScheduleWork* pWork = pEffectSchedule->getFrontWork(); // 葛电 老阑 场陈促搁 宏饭捞农 if (pWork == NULL) break; int WorkCode = pWork->getCode(); //void* pData = pWork->getData(); // 阿 累诀 内靛俊 蝶扼辑 老阑 贸府茄促. if (WorkCode == WORKCODE_ADD_VAMPIRE_PORTAL) { Assert(pEffect->getEffectClass() == Effect::EFFECT_CLASS_VAMPIRE_PORTAL); EffectVampirePortal* pEffectVampirePortal = dynamic_cast<EffectVampirePortal*>(pEffect); Assert(pEffectVampirePortal != NULL); // 泅犁 捞棋飘 郴何俊 乐绰 谅钎绰 力老 贸澜俊 啊绊磊 沁带 谅钎促. // 弊 鸥老俊 鞍篮 捞棋飘啊 乐芭唱 窍绰 捞蜡肺 谅钎绰 荐沥瞪 荐 乐促. Zone* pZone = pEffectVampirePortal->getZone(); ZoneCoord_t cx = pEffectVampirePortal->getX(); ZoneCoord_t cy = pEffectVampirePortal->getY(); ZONE_COORD ZoneCoord = pEffectVampirePortal->getZoneCoord(); TPOINT pt = findSuitablePositionForEffect(pZone, cx, cy, Effect::EFFECT_CLASS_VAMPIRE_PORTAL); if (pt.x != -1) { // 谅钎啊 荐沥登菌阑 瘤档 葛福聪, 谅钎甫 荐沥秦霖促. pEffectVampirePortal->setX(pt.x); pEffectVampirePortal->setY(pt.y); // OID甫 殿废罐酒具 find扼电瘤 窍绰 累诀阑 角青且 荐 乐促. ObjectRegistry& OR = pZone->getObjectRegistry(); OR.registerObject(pEffectVampirePortal); // 鸥老 棺 轨颇捞绢 器呕 概聪历俊 殿废茄促. Tile& rTile = pZone->getTile(pt.x, pt.y); rTile.addEffect(pEffectVampirePortal); EffectManager* pVampirePortalManager = pZone->getVampirePortalManager(); pVampirePortalManager->addEffect(pEffectVampirePortal); // 鸥老俊 捞棋飘啊 嘿菌栏聪, 宏肺靛某胶泼阑 秦霖促. GCAddVampirePortal gcAddVampirePortal; gcAddVampirePortal.setObjectID(pEffectVampirePortal->getObjectID()); gcAddVampirePortal.setOwnerID(pEffectVampirePortal->getOwnerID()); gcAddVampirePortal.setX(pt.x); gcAddVampirePortal.setY(pt.y); gcAddVampirePortal.setTargetZoneID(ZoneCoord.id); gcAddVampirePortal.setTargetX(ZoneCoord.x); gcAddVampirePortal.setTargetY(ZoneCoord.y); gcAddVampirePortal.setDuration(pEffectVampirePortal->getRemainDuration()); gcAddVampirePortal.setCreateFlag(1); pZone->broadcastPacket(pt.x, pt.y, &gcAddVampirePortal); } else { SAFE_DELETE(pEffectVampirePortal); } } else if (WorkCode == WORKCODE_DELETE) { pEffect->setDeadline(0); } else { Assert(false); } } } m_EffectScheduleList.pop_front(); SAFE_DELETE(pEffectSchedule); } __LEAVE_CRITICAL_SECTION(m_Mutex) __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -