📄 conditionfactorymanager.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// Filename : ConditionFactoryManager.cpp // Written By : // Description :////////////////////////////////////////////////////////////////////////////////#include "Assert.h"#include "ConditionFactoryManager.h"#include "StringStream.h"#include "ConditionAnsweredBy.h"#include "ConditionAtFirst.h"#include "ConditionTalkedBy.h"#include "ConditionAnsweredBy.h"#include "ConditionIdle.h"#include "ConditionEveryTime.h"#include "ConditionFlagOn.h"#include "ConditionFlagOff.h"#include "ConditionAttrComp.h"#include "ConditionRaceComp.h"#include "ConditionSameClan.h"#include "ConditionPayPlay.h"#include "ConditionEnterMasterLair.h"#include "ConditionEnterCastle.h"#include "ConditionEnterHolyLand.h"#include "ConditionEnterCastleDungeon.h"#include "ConditionHasQuest.h"#include "ConditionHasInvenSpace.h"#include "ConditionCanEnterPayZone.h"#include "ConditionCanEnterBeginnerZone.h"#include "ConditionCanWarpGate.h"#include "ConditionCanEnterLevelWarZone.h"#include "ConditionCanPetQuest.h"#include "ConditionCanEnterEventZone.h"////////////////////////////////////////////////////////////////////////////////// constructor////////////////////////////////////////////////////////////////////////////////ConditionFactoryManager::ConditionFactoryManager () throw (): m_Factories(NULL) , m_Size(Condition::CONDITION_MAX){ __BEGIN_TRY Assert(m_Size > 0); // 牧叼记蒲配府硅凯阑 积己茄促. m_Factories = new ConditionFactory*[ m_Size ]; // 蒲配府俊 措茄 器牢磐甸阑 NULL 肺 檬扁拳茄促. for (int i = 0 ; i < m_Size ; i ++) m_Factories[i] = NULL; __END_CATCH} ////////////////////////////////////////////////////////////////////////////////// destructor////////////////////////////////////////////////////////////////////////////////ConditionFactoryManager::~ConditionFactoryManager () throw (){ __BEGIN_TRY Assert(m_Factories != NULL); // 阿阿狼 牧叼记蒲配府甸阑 昏力茄促. for (int i = 0 ; i < m_Size ; i ++) { if (m_Factories[i] != NULL) { delete m_Factories[i]; m_Factories[i] = NULL; } } // 牧叼记蒲配府硅凯阑 昏力茄促. delete [] m_Factories; m_Factories = NULL; __END_CATCH}////////////////////////////////////////////////////////////////////////////////// 沥狼等 葛电 牧叼记蒲配府甸阑 咯扁俊 眠啊茄促.////////////////////////////////////////////////////////////////////////////////void ConditionFactoryManager::init () throw (Error){ __BEGIN_TRY addFactory(new ConditionAtFirstFactory()); addFactory(new ConditionTalkedByFactory()); addFactory(new ConditionIdleFactory()); addFactory(new ConditionEveryTimeFactory()); addFactory(new ConditionAnsweredByFactory()); addFactory(new ConditionFlagOnFactory()); addFactory(new ConditionFlagOffFactory()); addFactory(new ConditionAttrCompFactory()); addFactory(new ConditionRaceCompFactory()); addFactory(new ConditionSameClanFactory()); addFactory(new ConditionPayPlayFactory()); addFactory(new ConditionEnterMasterLairFactory()); addFactory(new ConditionEnterCastleFactory()); addFactory(new ConditionEnterHolyLandFactory()); addFactory(new ConditionEnterCastleDungeonFactory()); addFactory(new ConditionHasQuestFactory()); addFactory(new ConditionHasInvenSpaceFactory()); addFactory(new ConditionCanEnterPayZoneFactory()); addFactory(new ConditionCanEnterBeginnerZoneFactory()); addFactory(new ConditionCanWarpGateFactory()); addFactory(new ConditionCanEnterLevelWarZoneFactory()); addFactory(new ConditionCanPetQuestFactory()); addFactory(new ConditionCanEnterEventZoneFactory()); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// add condition factory to factories array////////////////////////////////////////////////////////////////////////////////void ConditionFactoryManager::addFactory (ConditionFactory * pFactory) throw (Error){ __BEGIN_TRY Assert(pFactory != NULL); if (m_Factories[ pFactory->getConditionType() ] != NULL) { StringStream msg; msg << "duplicate condition factories, " << pFactory->getConditionName() ; cout << msg.toString() << endl; throw Error(msg.toString()); } // 牧叼记蒲配府甫 殿废茄促. m_Factories[ pFactory->getConditionType() ] = pFactory; __END_CATCH} ////////////////////////////////////////////////////////////////////////////////// create condition object with condition type////////////////////////////////////////////////////////////////////////////////Condition * ConditionFactoryManager::createCondition (ConditionType_t conditionType) const throw (Error){ __BEGIN_TRY if (conditionType >= m_Size || m_Factories[conditionType] == NULL) { StringStream msg; msg << "condition factory [" << conditionType << "] not exist."; cout << msg.toString() << endl; throw Error(msg.toString()); } return m_Factories[conditionType]->createCondition(); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get condition name with condition type////////////////////////////////////////////////////////////////////////////////string ConditionFactoryManager::getConditionName (ConditionType_t conditionType) const throw (Error){ __BEGIN_TRY // 牧叼记 鸥涝捞 裹困甫 逞绢级栏肺 牢秦辑 Seg.Fault 啊 惯积窍瘤 臼档废. // 捞繁 荤侩磊绰 寸厘 漏扼具 茄促. if (conditionType >= m_Size || m_Factories[conditionType] == NULL) { StringStream msg; msg << "invalid condition type (" << conditionType << ")"; cout << msg.toString() << endl; throw Error(msg.toString()); } return m_Factories[conditionType]->getConditionName(); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////ConditionType_t ConditionFactoryManager::getConditionType (const string & conditionname) const throw (Error){ __BEGIN_TRY#ifdef __OUTPUT_INIT__ cout << "Condition[" << conditionname << "]...";#endif for (int i = 0 ; i < m_Size ; i ++) { if (m_Factories[i] != NULL) { if (m_Factories[i]->getConditionName() == conditionname) { return i; } } } string msg = "no such condition type : " + conditionname; cout << msg << endl; throw Error(msg); __END_CATCH}////////////////////////////////////////////////////////////////////////////////// get debug string////////////////////////////////////////////////////////////////////////////////string ConditionFactoryManager::toString () const throw (){ __BEGIN_TRY StringStream msg; msg << "ConditionFactoryManager(\n"; for (int i = 0 ; i < m_Size ; i ++) { msg << "ConditionFactories[" << i << "] == "; msg << (m_Factories[i] == NULL ? "NULL" : m_Factories[i]->getConditionName()) ; msg << "\n"; } msg << ")"; return msg.toString(); __END_CATCH}// global variable declarationConditionFactoryManager * g_pConditionFactoryManager = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -