Skip to content

Commit

Permalink
Tell irrlicht if we handle a key or not.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
est31 committed May 26, 2016
1 parent ef100f1 commit fa6b21a
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 11 deletions.
Expand Up @@ -19,11 +19,6 @@ public void onCreate(Bundle savedInstanceState) {
public void onDestroy() {
super.onDestroy();
}

@Override
public void onBackPressed() {
}


public void copyAssets() {
Intent intent = new Intent(this, MinetestAssetCopy.class);
Expand Down
37 changes: 32 additions & 5 deletions src/client/inputhandler.h
Expand Up @@ -42,11 +42,15 @@ class MyEventReceiver : public IEventReceiver

// 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;
}
}

Expand Down Expand Up @@ -116,6 +120,15 @@ class MyEventReceiver : public IEventReceiver
return b;
}

void listenForKey(const KeyPress &keyCode)
{
keysListenedFor.set(keyCode);
}
void dontListenForKeys()
{
keysListenedFor.clear();
}

s32 getMouseWheel()
{
s32 a = mouse_wheel;
Expand Down Expand Up @@ -168,6 +181,12 @@ class MyEventReceiver : public IEventReceiver
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;
};


Expand All @@ -192,6 +211,14 @@ class RealInputHandler : public InputHandler
{
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()) {
Expand Down
23 changes: 22 additions & 1 deletion src/game.cpp
Expand Up @@ -1297,7 +1297,11 @@ static void updateChat(Client &client, f32 dtime, bool show_debug,
*/
struct KeyCache {

KeyCache() { populate(); }
KeyCache()
{
handler = NULL;
populate();
}

enum {
// Player movement
Expand Down Expand Up @@ -1349,6 +1353,7 @@ struct KeyCache {
void populate();

KeyPress key[KEYMAP_INTERNAL_ENUM_COUNT];
InputHandler *handler;
};

void KeyCache::populate()
Expand Down Expand Up @@ -1399,6 +1404,19 @@ void KeyCache::populate()
key[KEYMAP_ID_QUICKTUNE_DEC] = getKeySetting("keymap_quicktune_dec");

key[KEYMAP_ID_DEBUG_STACKS] = getKeySetting("keymap_print_debug_stacks");

if (handler) {
// First clear all keys, then re-add the ones we listen for
handler->dontListenForKeys();
for (size_t i = 0; i < KEYMAP_INTERNAL_ENUM_COUNT; i++) {
handler->listenForKey(key[i]);
}
handler->listenForKey(EscapeKey);
handler->listenForKey(CancelKey);
for (size_t i = 0; i < 10; i++) {
handler->listenForKey(NumberKey[i]);
}
}
}


Expand Down Expand Up @@ -1829,6 +1847,9 @@ bool Game::startup(bool *kill,
this->chat_backend = chat_backend;
this->simple_singleplayer_mode = simple_singleplayer_mode;

keycache.handler = input;
keycache.populate();

driver = device->getVideoDriver();
smgr = device->getSceneManager();

Expand Down
3 changes: 3 additions & 0 deletions src/game.h
Expand Up @@ -110,6 +110,9 @@ class InputHandler
virtual bool isKeyDown(const KeyPress &keyCode) = 0;
virtual bool wasKeyDown(const KeyPress &keyCode) = 0;

virtual void listenForKey(const KeyPress &keyCode) {}
virtual void dontListenForKeys() {}

virtual v2s32 getMousePos() = 0;
virtual void setMousePos(s32 x, s32 y) = 0;

Expand Down

0 comments on commit fa6b21a

Please sign in to comment.