⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigger.cpp

📁 C语言大赛的平台。分为环境模块和策略模块。
💻 CPP
字号:
#include "GKL.h"

using namespace GKL;


Trigger::Trigger(bool needDelete/* = true*/, bool isList/* = false*/):
	mNeedDelete(needDelete),
	mpTriggerList(NULL),
	mpParentTrigger(NULL),
	mState(TRIGGER_STATE_NORMAL)
{
	if(isList)
		mpTriggerList = new list<Trigger*>;
}

Trigger::~Trigger(void)
{
	if(mpTriggerList != NULL)
	{
		clearTriggerList();
		delete mpTriggerList;
	}
}

void Trigger::addTrigger(Trigger *pTrigger)
{
	alert(mpTriggerList == NULL);

	mpTriggerList->push_back(pTrigger);
	pTrigger->mpParentTrigger = this;
}

void Trigger::removeTrigger(Trigger *pTrigger)
{
	alert(mpTriggerList == NULL);

	list<Trigger*>::iterator itor;
	itor = find(mpTriggerList->begin(), mpTriggerList->end(), pTrigger);
	alert(itor == mpTriggerList->end());

	if(pTrigger->mNeedDelete)
		delete *itor;
	else
		(*itor)->mpParentTrigger = NULL;

	mpTriggerList->erase(itor);
}

void Trigger::clearTriggerList(void)
{
	alert(mpTriggerList == NULL);

	list<Trigger*>::iterator itor;
	for(itor = mpTriggerList->begin(); itor != mpTriggerList->end(); itor++)
	{
		if((*itor)->mNeedDelete)
			delete *itor;
		else
			(*itor)->mpParentTrigger = NULL;
	}

	mpTriggerList->clear();
}

void Trigger::pause(void)
{
	mState = TRIGGER_STATE_PAUSE;
}

void Trigger::resume(void)
{
	mState = TRIGGER_STATE_NORMAL;
}

void Trigger::remove(void)
{
	alert(mpParentTrigger == NULL);

	mpParentTrigger->removeTrigger(this);
}

int Trigger::trigger(void *pParam/* = NULL*/)
{
	if(mState == TRIGGER_STATE_PAUSE)
		return 0;

	if(mpTriggerList == NULL)
		return onTrigger(pParam);
	else
	{
		int retVal = 0;
		list<Trigger*>::iterator itor;
		for(itor = mpTriggerList->begin(); itor != mpTriggerList->end(); )
		{
			retVal = (*itor++)->trigger(pParam);
			if(retVal < 0)
				break;
		}
		return retVal;
	}
}

int Trigger::onTrigger(void *pParam)
{
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -