Expand Up
@@ -41,13 +41,24 @@ class MyEventReceiver : public IEventReceiver
}
// Remember whether each key is down or up
// Get the Key that triggered the Event
if (event.EventType == irr::EET_KEY_INPUT_EVENT) {
if (event.KeyInput .PressedDown ) {
bool down = event.KeyInput .PressedDown ;
if (down) {
if (keyIsDown[event.KeyInput ]) {
keyPressed.set (event.KeyInput );
}
keyDown.set (event.KeyInput );
keyIsDown.set (event.KeyInput );
keyWasDown.set (event.KeyInput );
} else {
keyIsDown.unset (event.KeyInput );
}
} else {
keyDown.unset (event.KeyInput );
keyIsDown.unset (event.KeyInput );
keyPressed.unset (event.KeyInput );
keyReleased.set (event.KeyInput );
}
}
#ifdef HAVE_TOUCHSCREENGUI
Expand All
@@ -60,32 +71,59 @@ class MyEventReceiver : public IEventReceiver
#endif
// handle mouse events
if (event.EventType == irr::EET_MOUSE_INPUT_EVENT) {
if (noMenuActive () == false ) {
left_active = false ;
middle_active = false ;
right_active = false ;
} else {
left_active = event.MouseInput .isLeftPressed ();
middle_active = event.MouseInput .isMiddlePressed ();
right_active = event.MouseInput .isRightPressed ();
if (event.MouseInput .Event == EMIE_LMOUSE_PRESSED_DOWN) {
leftclicked = true ;
}
if (event.MouseInput .Event == EMIE_RMOUSE_PRESSED_DOWN) {
rightclicked = true ;
}
if (event.MouseInput .Event == EMIE_LMOUSE_LEFT_UP) {
leftreleased = true ;
}
if (event.MouseInput .Event == EMIE_RMOUSE_LEFT_UP) {
rightreleased = true ;
}
// handle mouse buttons
// left
if (event.MouseInput .Event == EMIE_LMOUSE_PRESSED_DOWN) {
if (keyIsDown[" KEY_LBUTTON" ]) {
keyPressed.set (" KEY_LBUTTON" );
}
keyDown.set (" KEY_LBUTTON" );
keyIsDown.set (" KEY_LBUTTON" );
keyWasDown.set (" KEY_LBUTTON" );
} else if (event.MouseInput .Event == EMIE_LMOUSE_LEFT_UP) {
keyDown.unset (" KEY_LBUTTON" );
keyIsDown.unset (" KEY_LBUTTON" );
keyPressed.unset (" KEY_LBUTTON" );
keyReleased.set (" KEY_LBUTTON" );
}
// right
else if (event.MouseInput .Event == EMIE_RMOUSE_PRESSED_DOWN) {
if (keyIsDown[" KEY_RBUTTON" ]) {
keyPressed.set (" KEY_RBUTTON" );
}
keyDown.set (" KEY_RBUTTON" );
keyIsDown.set (" KEY_RBUTTON" );
keyWasDown.set (" KEY_RBUTTON" );
} else if (event.MouseInput .Event == EMIE_RMOUSE_LEFT_UP) {
keyDown.unset (" KEY_RBUTTON" );
keyIsDown.unset (" KEY_RBUTTON" );
keyPressed.unset (" KEY_RBUTTON" );
keyReleased.set (" KEY_RBUTTON" );
}
// middle
else if (event.MouseInput .Event == EMIE_MMOUSE_PRESSED_DOWN) {
if (keyIsDown[" KEY_MBUTTON" ]) {
keyPressed.set (" KEY_MBUTTON" );
}
keyDown.set (" KEY_MBUTTON" );
keyIsDown.set (" KEY_MBUTTON" );
keyWasDown.set (" KEY_MBUTTON" );
} else if (event.MouseInput .Event == EMIE_MMOUSE_LEFT_UP) {
keyDown.unset (" KEY_MBUTTON" );
keyIsDown.set (" KEY_MBUTTON" );
keyPressed.unset (" KEY_MBUTTON" );
keyReleased.set (" KEY_MBUTTON" );
}
else if (noMenuActive ()) {
if (event.MouseInput .Event == EMIE_MOUSE_WHEEL) {
mouse_wheel += event.MouseInput .Wheel ;
}
}
}
if (event.EventType == irr::EET_LOG_TEXT_EVENT) {
dstream << std::string (" Irrlicht log: " ) + std::string (event.LogEvent .Text )
<< std::endl;
Expand All
@@ -97,7 +135,17 @@ class MyEventReceiver : public IEventReceiver
bool IsKeyDown (const KeyPress &keyCode) const
{
return keyIsDown[keyCode];
return keyDown[keyCode];
}
bool IsKeyActive (const KeyPress &keyCode) const
{
return keyPressed[keyCode] || keyIsDown[keyCode];
}
bool IsKeyReleased (const KeyPress &keyCode) const
{
return keyReleased[keyCode];
}
// Checks whether a key was down and resets the state
Expand All
@@ -109,6 +157,16 @@ class MyEventReceiver : public IEventReceiver
return b;
}
void resetKeyClicked (const KeyPress &keyCode)
{
keyDown.unset (keyCode);
}
void resetKeyReleased (const KeyPress &keyCode)
{
keyReleased.unset (keyCode);
}
s32 getMouseWheel ()
{
s32 a = mouse_wheel;
Expand All
@@ -118,17 +176,11 @@ class MyEventReceiver : public IEventReceiver
void clearInput ()
{
keyDown.clear ();
keyIsDown.clear ();
keyWasDown.clear ();
leftclicked = false ;
rightclicked = false ;
leftreleased = false ;
rightreleased = false ;
left_active = false ;
middle_active = false ;
right_active = false ;
keyReleased.clear ();
keyPressed.clear ();
mouse_wheel = 0 ;
}
Expand All
@@ -141,15 +193,6 @@ class MyEventReceiver : public IEventReceiver
#endif
}
bool leftclicked;
bool rightclicked;
bool leftreleased;
bool rightreleased;
bool left_active;
bool middle_active;
bool right_active;
s32 mouse_wheel;
#ifdef HAVE_TOUCHSCREENGUI
Expand All
@@ -158,7 +201,10 @@ class MyEventReceiver : public IEventReceiver
private:
// The current state of keys
KeyList keyDown;
KeyList keyIsDown;
KeyList keyPressed;
KeyList keyReleased;
// Whether a key has been pressed or not
KeyList keyWasDown;
};
Expand All
@@ -185,68 +231,40 @@ class RealInputHandler : public InputHandler
{
return m_receiver->WasKeyDown (keyCode);
}
virtual bool getKeyState (const KeyPress &keyCode)
{
return m_receiver->IsKeyActive (keyCode);
}
virtual bool getKeyReleased (const KeyPress &keyCode)
{
return m_receiver->IsKeyReleased (keyCode);
}
virtual void resetKeyClicked (const KeyPress &keyCode)
{
m_receiver->resetKeyClicked (keyCode);
}
virtual void resetKeyReleased (const KeyPress &keyCode)
{
m_receiver->resetKeyReleased (keyCode);
}
virtual v2s32 getMousePos ()
{
if (m_device->getCursorControl ()) {
return m_device->getCursorControl ()->getPosition ();
}
else {
} else {
return m_mousepos;
}
}
virtual void setMousePos (s32 x, s32 y)
{
if (m_device->getCursorControl ()) {
m_device->getCursorControl ()->setPosition (x, y);
}
else {
} else {
m_mousepos = v2s32 (x,y);
}
}
virtual bool getLeftState ()
{
return m_receiver->left_active ;
}
virtual bool getRightState ()
{
return m_receiver->right_active ;
}
virtual bool getLeftClicked ()
{
return m_receiver->leftclicked ;
}
virtual bool getRightClicked ()
{
return m_receiver->rightclicked ;
}
virtual void resetLeftClicked ()
{
m_receiver->leftclicked = false ;
}
virtual void resetRightClicked ()
{
m_receiver->rightclicked = false ;
}
virtual bool getLeftReleased ()
{
return m_receiver->leftreleased ;
}
virtual bool getRightReleased ()
{
return m_receiver->rightreleased ;
}
virtual void resetLeftReleased ()
{
m_receiver->leftreleased = false ;
}
virtual void resetRightReleased ()
{
m_receiver->rightreleased = false ;
}
virtual s32 getMouseWheel ()
{
return m_receiver->getMouseWheel ();
Expand All
@@ -269,72 +287,88 @@ class RandomInputHandler : public InputHandler
{
leftdown = false ;
rightdown = false ;
middledown = false ;
leftclicked = false ;
rightclicked = false ;
middleclicked = false ;
leftreleased = false ;
rightreleased = false ;
middlereleased = false ;
keydown.clear ();
}
virtual bool isKeyDown (const KeyPress &keyCode)
{
if (keyCode == getKeySetting (" keymap_dig" )) {
return leftclicked;
}
else if (keyCode == getKeySetting (" keymap_place" )) {
return rightclicked;
} /* else if (keyCode == getKeySetting("keymap_middle")) {
return middleclicked;
}*/
return keydown[keyCode];
}
virtual bool wasKeyDown (const KeyPress &keyCode)
{
return false ;
}
virtual v2s32 getMousePos ()
{
return mousepos;
}
virtual void setMousePos (s32 x, s32 y)
{
mousepos = v2s32 (x, y);
}
virtual bool getLeftState ()
{
return leftdown;
}
virtual bool getRightState ()
virtual bool getKeyState (const KeyPress &keyCode)
{
return rightdown;
}
virtual bool getLeftClicked ()
{
return leftclicked;
}
virtual bool getRightClicked ()
{
return rightclicked;
if (keyCode == getKeySetting (" keymap_dig" )) {
return leftdown;
} else if (keyCode == getKeySetting (" keymap_place" )) {
return rightdown;
} /* else if (keyCode == getKeySetting("keymap_middle")) {
return middledown;
}*/
return false ;
}
virtual void resetLeftClicked ( )
virtual bool getKeyReleased ( const KeyPress &keyCode )
{
leftclicked = false ;
if (keyCode == getKeySetting (" keymap_dig" )) {
return leftreleased;
} else if (keyCode == getKeySetting (" keymap_place" )) {
return rightreleased;
} /* else if (keyCode == getKeySetting("keymap_middle")) {
return middlereleased;
}*/
return false ;
}
virtual void resetRightClicked ()
{
rightclicked = false ;
virtual void resetKeyClicked (const KeyPress &keyCode)
{
if (keyCode == getKeySetting (" keymap_dig" )) {
leftclicked = false ;
return ;
} else if (keyCode == getKeySetting (" keymap_place" )) {
rightclicked = false ;
return ;
} /* else if (keyCode == getKeySetting("keymap_middle")) {
middleclicked = false;
return;
}*/
}
virtual void resetKeyReleased (const KeyPress &keyCode)
{
if (keyCode == getKeySetting (" keymap_dig" )) {
leftreleased = false ;
return ;
} else if (keyCode == getKeySetting (" keymap_place" )) {
rightreleased = false ;
return ;
} /* else if (keyCode == getKeySetting("keymap_middle")) {
middlereleased = false;
return;
}*/
}
virtual bool getLeftReleased ()
{
return leftreleased;
}
virtual bool getRightReleased ()
{
return rightreleased;
}
virtual void resetLeftReleased ()
virtual v2s32 getMousePos ()
{
leftreleased = false ;
return mousepos ;
}
virtual void resetRightReleased ( )
virtual void setMousePos (s32 x, s32 y )
{
rightreleased = false ;
mousepos = v2s32 (x, y) ;
}
virtual s32 getMouseWheel ()
{
return 0 ;
Expand Down
Expand Up
@@ -406,6 +440,18 @@ class RandomInputHandler : public InputHandler
rightreleased = true ;
}
}
{
static float counter1 = 0 ;
counter1 -= dtime;
if (counter1 < 0.0 ) {
counter1 = 0.1 * Rand (1 , 45 );
middledown = !middledown;
if (middledown)
middleclicked = true ;
if (!middledown)
middlereleased = true ;
}
}
mousepos += mousespeed;
}
Expand All
@@ -419,10 +465,13 @@ class RandomInputHandler : public InputHandler
v2s32 mousespeed;
bool leftdown;
bool rightdown;
bool middledown;
bool leftclicked;
bool rightclicked;
bool middleclicked;
bool leftreleased;
bool rightreleased;
bool middlereleased;
};
#endif
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is stuff like this really necessary?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I think so. To handle the mouse buttons I need to write the states of them into keyIsDown keyPressed and so on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Zeno- I think we should let the PR as it is and make another pull request with a rework of the KeyList Class.