2010-04-21 07:48:36 -07:00
|
|
|
#include "EventHandler.h"
|
2019-03-07 19:18:07 -08:00
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <string.h>
|
2019-04-10 23:41:14 -07:00
|
|
|
#include <Utility.h>
|
2019-03-07 19:18:07 -08:00
|
|
|
|
|
|
|
using namespace irr;
|
|
|
|
using namespace irr::video;
|
|
|
|
using namespace irr::gui;
|
2010-04-21 07:48:36 -07:00
|
|
|
|
|
|
|
// Public
|
|
|
|
EventHandler::EventHandler( IrrlichtDevice *device )
|
|
|
|
{
|
|
|
|
m_Device = device;
|
|
|
|
m_EventReceivers = new map<EventReceiverType, IEventReceiver *>();
|
|
|
|
}
|
|
|
|
|
|
|
|
EventHandler::~EventHandler()
|
|
|
|
{
|
|
|
|
delete m_EventReceivers;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool EventHandler::addEventReceiver( EventReceiverType type, IEventReceiver *receiver )
|
|
|
|
{
|
|
|
|
m_EventReceivers->insert( make_pair( type, receiver ));
|
2019-03-07 10:23:54 -08:00
|
|
|
return true;
|
2010-04-21 07:48:36 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// IEventReceiver
|
|
|
|
bool EventHandler::OnEvent( const SEvent &event )
|
|
|
|
{
|
2019-03-07 19:18:07 -08:00
|
|
|
if (event.EventType == EET_GUI_EVENT)
|
2010-04-21 07:48:36 -07:00
|
|
|
{
|
|
|
|
// Pass to User Interface Handler
|
|
|
|
map<EventReceiverType,IEventReceiver *>::iterator iter = m_EventReceivers->find( ERT_USERINTERFACE );
|
|
|
|
iter->second->OnEvent( event );
|
|
|
|
}
|
2019-03-07 19:18:07 -08:00
|
|
|
else if (event.EventType == EET_MOUSE_INPUT_EVENT)
|
2010-04-21 07:48:36 -07:00
|
|
|
{
|
|
|
|
map<EventReceiverType,IEventReceiver *>::iterator iter = m_EventReceivers->find( ERT_3DVIEW );
|
|
|
|
iter->second->OnEvent( event );
|
|
|
|
}
|
2019-03-07 19:18:07 -08:00
|
|
|
else if (event.EventType == EET_KEY_INPUT_EVENT) {
|
2019-03-07 21:52:29 -08:00
|
|
|
map<EventReceiverType,IEventReceiver *>::iterator iter = m_EventReceivers->find( ERT_USERINTERFACE );
|
|
|
|
iter->second->OnEvent( event );
|
2019-03-07 19:18:07 -08:00
|
|
|
}
|
|
|
|
else if (event.EventType == EET_USER_EVENT)
|
2010-04-23 00:28:59 -07:00
|
|
|
{
|
2019-03-07 19:18:07 -08:00
|
|
|
if (event.UserEvent.UserData1 == UEI_WINDOWSIZECHANGED) {
|
|
|
|
// Window resize handling - send to all subscribers
|
|
|
|
map<EventReceiverType,IEventReceiver *>::iterator iter;
|
|
|
|
for( iter = m_EventReceivers->begin(); iter != m_EventReceivers->end(); iter ++ )
|
|
|
|
iter->second->OnEvent( event );
|
|
|
|
}
|
2010-04-23 00:28:59 -07:00
|
|
|
}
|
|
|
|
|
2010-04-21 07:48:36 -07:00
|
|
|
return false;
|
|
|
|
}
|