Im EventReceiver:
Code:
#pragma once
#include <irrlicht.h>
#include "Globals.h"
using namespace irr; using namespace core; using namespace scene;
using namespace video; using namespace io; using namespace gui;
// Event Handler
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_KEY_INPUT_EVENT)
KeyIsDown[event.KeyInput.Key] = event.KeyInput.PressedDown;
if (event.EventType == EET_MOUSE_INPUT_EVENT)
MouseEvent = FetchMouseInput(event);
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
IGUIEnvironment* guienv = device->getGUIEnvironment();
switch(event.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
pMenu->setActive(false);
if (id == 101)
{
//..
return true;
}
break;
default:
break;
}
}
return false;
}
SEvent::SMouseInput GetMouseInput(){return MouseEvent;}
virtual bool IsKeyDown(EKEY_CODE keyCode) const {return KeyIsDown[keyCode];}
MyEventReceiver(){for(u32 i=0; i<KEY_KEY_CODES_COUNT; ++i) KeyIsDown[i] = false;}
private:
bool KeyIsDown[KEY_KEY_CODES_COUNT];
SEvent::SMouseInput FetchMouseInput(const SEvent& event){return event.MouseInput;}
SEvent::SMouseInput MouseEvent;
};
später im Hauptprogramm:
Code:
while(device->run())
{
if(device->isWindowActive())
{
// keys W A S D pressed?
if (receiver.IsKeyDown(KEY_KEY_W)){/**/}
if (receiver.IsKeyDown(KEY_KEY_S)){/**/}
if (receiver.IsKeyDown(KEY_KEY_A)){/**/}
if (receiver.IsKeyDown(KEY_KEY_D)){/**/}
// keys 1...9 pressed?
if (receiver.IsKeyDown(KEY_KEY_1)){/*...*/}
//...
// mouse input
SEvent::SMouseInput emi = receiver.GetMouseInput();
// LEFTMOUSE
if (emi.Event == EMIE_LMOUSE_PRESSED_DOWN && ... )
{
//...
}
//...
// RIGHTMOUSE
if (emi.Event == EMIE_RMOUSE_PRESSED_DOWN)
{ ...