1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Tell irrlicht if we handle a key or not.

We can remove the function in MtNativeActivity now
as it serves precisely that purpose: to tell irrlicht
that we handled the esc key.

TODO for later:
 * Perhaps try to find a more performant container than KeyList
This commit is contained in:
est31 2016-05-14 16:25:57 +02:00
parent ef100f12a1
commit fa6b21a15b
4 changed files with 57 additions and 11 deletions

View file

@ -42,11 +42,15 @@ public:
// Remember whether each key is down or up
if (event.EventType == irr::EET_KEY_INPUT_EVENT) {
if (event.KeyInput.PressedDown) {
keyIsDown.set(event.KeyInput);
keyWasDown.set(event.KeyInput);
} else {
keyIsDown.unset(event.KeyInput);
const KeyPress &keyCode = event.KeyInput;
if (keysListenedFor[keyCode]) {
if (event.KeyInput.PressedDown) {
keyIsDown.set(keyCode);
keyWasDown.set(keyCode);
} else {
keyIsDown.unset(keyCode);
}
return true;
}
}
@ -116,6 +120,15 @@ public:
return b;
}
void listenForKey(const KeyPress &keyCode)
{
keysListenedFor.set(keyCode);
}
void dontListenForKeys()
{
keysListenedFor.clear();
}
s32 getMouseWheel()
{
s32 a = mouse_wheel;
@ -168,6 +181,12 @@ private:
KeyList keyIsDown;
// Whether a key has been pressed or not
KeyList keyWasDown;
// List of keys we listen for
// TODO perhaps the type of this is not really
// performant as KeyList is designed for few but
// often changing keys, and keysListenedFor is expected
// to change seldomly but contain lots of keys.
KeyList keysListenedFor;
};
@ -192,6 +211,14 @@ public:
{
return m_receiver->WasKeyDown(keyCode);
}
virtual void listenForKey(const KeyPress &keyCode)
{
m_receiver->listenForKey(keyCode);
}
virtual void dontListenForKeys()
{
m_receiver->dontListenForKeys();
}
virtual v2s32 getMousePos()
{
if (m_device->getCursorControl()) {