www.pudn.com > zfxcengine-0.1.0.zip > ceEventTriggerer.cpp


// $Id: ceEventTriggerer.cpp,v 1.1 2005/08/24 23:01:11 florianxx Exp $ 
//////////////////////////////////////////////////////////////////////////////// 
// 
//  Module:     Core 
//  File:       ceEventTriggerer.h 
//  Created:    13.08.2005 
//  Author:     Florian Bauer aka Florianx 
//	Licence:    See licence file in root 
//  Last Mod:	$Id: ceEventTriggerer.cpp,v 1.1 2005/08/24 23:01:11 florianxx Exp $ 
// 
//////////////////////////////////////////////////////////////////////////////// 
#include "Core/ceEventTriggerer.h" 
#include "Core/ceExceptions.h" 
 
using namespace ZFXCE; 
using namespace std; 
 
ceEventTriggerer::ceEventTriggerer() 
{ 
	// empty 
} 
 
ceEventTriggerer::~ceEventTriggerer() 
{ 
	// empty  
} 
 
void ceEventTriggerer::AddEventListener(const ceEvent& ev, const ceEventFunctor& func) 
{ 
	PUSH_FUNCTION; 
 
	if (1 == m_EventList.count(ev.m_ID)) 
		m_EventList[ev.m_ID].push_back(func); 
	else CE_EXCEPTION("Can't add event-listener.\n"+ev.m_ID+" is not triggerable by this controller.", 2); 
} 
 
void ceEventTriggerer::RemoveEventListener(const ceEvent& ev, const ceEventFunctor& func) 
{ 
	PUSH_FUNCTION; 
 
	if (1 == m_EventList.count(ev.m_ID)) 
	{ 
		list::iterator it = find(m_EventList[ev.m_ID].begin(), m_EventList[ev.m_ID].end(), func); 
		if(it != m_EventList[ev.m_ID].end()) 
			m_EventList[ev.m_ID].erase(it); 
	} 
} 
 
bool ceEventTriggerer::IsEventTriggerable(const ceEvent& ev) 
{ 
	PUSH_FUNCTION; 
 
	return (m_EventList.count(ev.m_ID)==1); 
} 
 
void ceEventTriggerer::AddTriggerableEvent(const ceEvent& ev) 
{ 
	PUSH_FUNCTION; 
 
	if(m_EventList.count(ev.m_ID) < 1) 
		m_EventList[ev.m_ID].clear(); 
} 
 
void ceEventTriggerer::TriggerEvent(const ceEvent& ev, const ceEventData* data) 
{ 
	if(m_EventList.count(ev.m_ID)==1) 
	{ 
		for(std::list::iterator it = m_EventList[ev.m_ID].begin(); 
			it != m_EventList[ev.m_ID].end(); it++) 
			(*it)(ev, data);  
	} 
}