From d0165ec9a629bf6e91f6c2fe927fdd039d158ac4 Mon Sep 17 00:00:00 2001 From: Moros Smith Date: Mon, 11 Nov 2024 20:29:40 -0500 Subject: [PATCH 1/3] remove duplicate for PK_BACKSLASH --- olcPixelGameEngine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/olcPixelGameEngine.h b/olcPixelGameEngine.h index 0d9e567b..43557fef 100644 --- a/olcPixelGameEngine.h +++ b/olcPixelGameEngine.h @@ -7010,7 +7010,7 @@ namespace olc mapKeys[DOM_PK_CAPS_LOCK] = Key::CAPS_LOCK; mapKeys[DOM_PK_SEMICOLON] = Key::OEM_1; mapKeys[DOM_PK_SLASH] = Key::OEM_2; mapKeys[DOM_PK_BACKQUOTE] = Key::OEM_3; mapKeys[DOM_PK_BRACKET_LEFT] = Key::OEM_4; mapKeys[DOM_PK_BACKSLASH] = Key::OEM_5; mapKeys[DOM_PK_BRACKET_RIGHT] = Key::OEM_6; - mapKeys[DOM_PK_QUOTE] = Key::OEM_7; mapKeys[DOM_PK_BACKSLASH] = Key::OEM_8; + mapKeys[DOM_PK_QUOTE] = Key::OEM_7; // Keyboard Callbacks emscripten_set_keydown_callback("#canvas", 0, 1, keyboard_callback); From c2c9f5036e1846bfa574d00af0b5e241eb860a88 Mon Sep 17 00:00:00 2001 From: Moros Smith Date: Mon, 11 Nov 2024 20:30:12 -0500 Subject: [PATCH 2/3] handle number pad state --- olcPixelGameEngine.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/olcPixelGameEngine.h b/olcPixelGameEngine.h index 43557fef..18b21a30 100644 --- a/olcPixelGameEngine.h +++ b/olcPixelGameEngine.h @@ -7173,6 +7173,41 @@ namespace olc //TY Moros static EM_BOOL keyboard_callback(int eventType, const EmscriptenKeyboardEvent* e, void* userData) { + // we maintain our own state for teh number pad, default true + static bool numPadActive = true; + + // THANK GOD!! for this compute function. And thanks Dandistine for pointing it out! + int pk_code = emscripten_compute_dom_pk_code(e->code); + + if(!numPadActive) + { + /** + * we need to react differently if the numlock is not + * active. this block ensures uniform behavior with + * windows and linux, MacOS is a lost cause due to GLUT. + */ + switch(pk_code) + { + case DOM_PK_NUMPAD_7: pk_code = DOM_PK_HOME; break; + case DOM_PK_NUMPAD_8: pk_code = DOM_PK_ARROW_UP; break; + case DOM_PK_NUMPAD_9: pk_code = DOM_PK_PAGE_UP; break; + case DOM_PK_NUMPAD_4: pk_code = DOM_PK_ARROW_LEFT; break; + case DOM_PK_NUMPAD_5: pk_code = DOM_PK_UNKNOWN; break; + case DOM_PK_NUMPAD_6: pk_code = DOM_PK_ARROW_RIGHT; break; + case DOM_PK_NUMPAD_1: pk_code = DOM_PK_END; break; + case DOM_PK_NUMPAD_2: pk_code = DOM_PK_ARROW_DOWN; break; + case DOM_PK_NUMPAD_3: pk_code = DOM_PK_PAGE_DOWN; break; + case DOM_PK_NUMPAD_0: pk_code = DOM_PK_INSERT; break; + case DOM_PK_NUMPAD_DECIMAL: pk_code = DOM_PK_DELETE; break; + default: + break; + } + } + // check for keydown + numlock and act appropriately + if (eventType == EMSCRIPTEN_EVENT_KEYDOWN && pk_code == DOM_PK_NUM_LOCK) + { + numPadActive = !numPadActive; + } if (eventType == EMSCRIPTEN_EVENT_KEYDOWN) ptrPGE->olc_UpdateKeyState(emscripten_compute_dom_pk_code(e->code), true); From 26f47772797b1cf53d70b7bcf88887fe46f51297 Mon Sep 17 00:00:00 2001 From: Moros Smith Date: Mon, 11 Nov 2024 20:30:49 -0500 Subject: [PATCH 3/3] pass the pk_code directly --- olcPixelGameEngine.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/olcPixelGameEngine.h b/olcPixelGameEngine.h index 18b21a30..a50c540f 100644 --- a/olcPixelGameEngine.h +++ b/olcPixelGameEngine.h @@ -7203,17 +7203,18 @@ namespace olc break; } } + // check for keydown + numlock and act appropriately if (eventType == EMSCRIPTEN_EVENT_KEYDOWN && pk_code == DOM_PK_NUM_LOCK) { numPadActive = !numPadActive; } + if (eventType == EMSCRIPTEN_EVENT_KEYDOWN) - ptrPGE->olc_UpdateKeyState(emscripten_compute_dom_pk_code(e->code), true); + ptrPGE->olc_UpdateKeyState(pk_code, true); - // THANK GOD!! for this compute function. And thanks Dandistine for pointing it out! if (eventType == EMSCRIPTEN_EVENT_KEYUP) - ptrPGE->olc_UpdateKeyState(emscripten_compute_dom_pk_code(e->code), false); + ptrPGE->olc_UpdateKeyState(pk_code, false); //Consume keyboard events so that keys like F1 and F5 don't do weird things return EM_TRUE;