Show EventManager.cpp syntax highlighted
#include "StdAfx.h"
#include "EventManager.h"
#include "kernel.h"
extern Kernel* g_kernel;
EventManager* EventManager::instance = new EventManager;
EventManager::EventManager(void)
{
}
/** Add a Listener */
void EventManager::AddListener( IEventListener* listener )
{
type_ListTypes::iterator it = m_listeners.find( listener->GetListenerType() );
if ( it != m_listeners.end() )
{
// already this type of listener, just add it to a list
m_listeners[ listener->GetListenerType() ].push_back( listener );
}
else
{ // a new type of listener
type_Listeners list;
list.push_back( listener );
m_listeners[ listener->GetListenerType() ] = list;
}
}
/** Remove a listener */
void EventManager::RemoveListener( IEventListener* listener)
{
type_ListTypes::iterator iter = m_listeners.find( listener->GetListenerType() );
if ( iter != m_listeners.end() )
{
// now find it in the list for deletion
type_Listeners::iterator it = iter->second.begin();
for ( ; it != iter->second.end(); it++ )
{
if ( (*it) == listener )
{
iter->second.erase( it );
return;
//delete listener; // dont delete because this is created on the stack
}
}
}
}
/** Trigger an event NOW */
void EventManager::TriggerEvent( IEvent &e )
{
type_ListTypes::iterator iter = m_listeners.find( e.GetListenerType() );
if ( iter != m_listeners.end() )
{
type_Listeners::iterator it = iter->second.begin();
for ( ; it != iter->second.end(); it++ )
{
(*it)->HandleEvent( &e );
}
}
}
/** Update, trigger any events in the queue */
void EventManager::UpdateEventQueue( long deltaTime )
{
EmptyQueue( true );
}
/** Queue an Event */
bool EventManager::QueueEvent( IEvent *e )
{
m_events.push( e );
return false;
}
/** Abort an event */
bool EventManager::AbortQueuedEvent( const IEvent &e )
{
return false;
}
/** Empty all events */
void EventManager::EmptyQueue( bool executeAllEvents )
{
while( !m_events.empty() )
{
IEvent *e = m_events.front();
if ( executeAllEvents )
{
TriggerEvent( *e );
m_events.pop();
}
delete e;
}
}
See more files for this project here