forked from Mirrorlandia_minetest/minetest
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:
parent
ef100f12a1
commit
fa6b21a15b
@ -19,11 +19,6 @@ public class MtNativeActivity extends NativeActivity {
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
}
|
||||
|
||||
|
||||
public void copyAssets() {
|
||||
Intent intent = new Intent(this, MinetestAssetCopy.class);
|
||||
|
@ -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()) {
|
||||
|
23
src/game.cpp
23
src/game.cpp
@ -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
|
||||
@ -1349,6 +1353,7 @@ struct KeyCache {
|
||||
void populate();
|
||||
|
||||
KeyPress key[KEYMAP_INTERNAL_ENUM_COUNT];
|
||||
InputHandler *handler;
|
||||
};
|
||||
|
||||
void KeyCache::populate()
|
||||
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
|
@ -110,6 +110,9 @@ public:
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user