From 633f885c65ea5ca6e078c674e0472094d363f103 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sat, 9 Mar 2024 15:11:29 +0100 Subject: [PATCH] imgui key map --- src/solanaceae/doom.cpp | 20 ++++++++ src/solanaceae/doom.hpp | 14 +++--- src/solanaceae/doom_imgui.cpp | 94 +++++++++++++++++++++++++++++++++-- src/solanaceae/doom_imgui.hpp | 3 -- 4 files changed, 117 insertions(+), 14 deletions(-) diff --git a/src/solanaceae/doom.cpp b/src/solanaceae/doom.cpp index 17d0e20..8e052b6 100644 --- a/src/solanaceae/doom.cpp +++ b/src/solanaceae/doom.cpp @@ -85,3 +85,23 @@ uint64_t Doom::getTexID(void) { return _render_texture; } +void Doom::doomKeyDown(doom_key_t key) { + doom_key_down(key); +} + +void Doom::doomKeyUp(doom_key_t key) { + doom_key_up(key); +} + +void Doom::doomButtonDown(doom_button_t button) { + doom_button_down(button); +} + +void Doom::doomButtonUp(doom_button_t button) { + doom_button_up(button); +} + +void Doom::doomMouseMove(int delta_x, int delta_y) { + doom_mouse_move(delta_x, delta_y); +} + diff --git a/src/solanaceae/doom.hpp b/src/solanaceae/doom.hpp index 8155d90..7aa35f7 100644 --- a/src/solanaceae/doom.hpp +++ b/src/solanaceae/doom.hpp @@ -21,13 +21,13 @@ class Doom { public: // custom doom api uint64_t getTexID(void); -// since we dont have an abstraction for this, or wont know what to do with it -// these have to be called from the outside -//void doom_key_down(doom_key_t key); -//void doom_key_up(doom_key_t key); -//void doom_button_down(doom_button_t button); -//void doom_button_up(doom_button_t button); -//void doom_mouse_move(int delta_x, int delta_y); + // since we dont have an abstraction for this, or wont know what to do with it + // these have to be called from the outside + void doomKeyDown(doom_key_t key); + void doomKeyUp(doom_key_t key); + void doomButtonDown(doom_button_t button); + void doomButtonUp(doom_button_t button); + void doomMouseMove(int delta_x, int delta_y); //void doom_set_default_int(const char* name, int value); //void doom_set_default_string(const char* name, const char* value); diff --git a/src/solanaceae/doom_imgui.cpp b/src/solanaceae/doom_imgui.cpp index 127b1de..e1ae270 100644 --- a/src/solanaceae/doom_imgui.cpp +++ b/src/solanaceae/doom_imgui.cpp @@ -2,6 +2,8 @@ #include +#include + DoomIMGUI::DoomIMGUI( TextureUploaderI& tu ) : _doom(tu) { @@ -10,13 +12,97 @@ DoomIMGUI::DoomIMGUI( DoomIMGUI::~DoomIMGUI(void) { } +const static std::vector> g_all_keys { + {ImGuiKey_A, DOOM_KEY_A}, + {ImGuiKey_Tab, DOOM_KEY_TAB}, + {ImGuiKey_Enter, DOOM_KEY_ENTER}, + {ImGuiKey_Escape, DOOM_KEY_ESCAPE}, + {ImGuiKey_Space, DOOM_KEY_SPACE}, + {ImGuiKey_Apostrophe, DOOM_KEY_APOSTROPHE}, + {ImGuiKey_KeypadMultiply, DOOM_KEY_MULTIPLY}, // keypad? + {ImGuiKey_Comma, DOOM_KEY_COMMA}, + {ImGuiKey_Minus, DOOM_KEY_MINUS}, + {ImGuiKey_Period, DOOM_KEY_PERIOD}, + {ImGuiKey_Slash, DOOM_KEY_SLASH}, + {ImGuiKey_0, DOOM_KEY_0}, + {ImGuiKey_1, DOOM_KEY_1}, + {ImGuiKey_2, DOOM_KEY_2}, + {ImGuiKey_3, DOOM_KEY_3}, + {ImGuiKey_4, DOOM_KEY_4}, + {ImGuiKey_5, DOOM_KEY_5}, + {ImGuiKey_6, DOOM_KEY_6}, + {ImGuiKey_7, DOOM_KEY_7}, + {ImGuiKey_8, DOOM_KEY_8}, + {ImGuiKey_9, DOOM_KEY_9}, + {ImGuiKey_Semicolon, DOOM_KEY_SEMICOLON}, + {ImGuiKey_Equal, DOOM_KEY_EQUALS}, + {ImGuiKey_LeftBracket, DOOM_KEY_LEFT_BRACKET}, + {ImGuiKey_RightBracket, DOOM_KEY_RIGHT_BRACKET}, + {ImGuiKey_A, DOOM_KEY_A}, + {ImGuiKey_B, DOOM_KEY_B}, + {ImGuiKey_C, DOOM_KEY_C}, + {ImGuiKey_D, DOOM_KEY_D}, + {ImGuiKey_E, DOOM_KEY_E}, + {ImGuiKey_F, DOOM_KEY_F}, + {ImGuiKey_G, DOOM_KEY_G}, + {ImGuiKey_H, DOOM_KEY_H}, + {ImGuiKey_I, DOOM_KEY_I}, + {ImGuiKey_J, DOOM_KEY_J}, + {ImGuiKey_K, DOOM_KEY_K}, + {ImGuiKey_L, DOOM_KEY_L}, + {ImGuiKey_M, DOOM_KEY_M}, + {ImGuiKey_N, DOOM_KEY_N}, + {ImGuiKey_O, DOOM_KEY_O}, + {ImGuiKey_P, DOOM_KEY_P}, + {ImGuiKey_Q, DOOM_KEY_Q}, + {ImGuiKey_R, DOOM_KEY_R}, + {ImGuiKey_S, DOOM_KEY_S}, + {ImGuiKey_T, DOOM_KEY_T}, + {ImGuiKey_U, DOOM_KEY_U}, + {ImGuiKey_V, DOOM_KEY_V}, + {ImGuiKey_W, DOOM_KEY_W}, + {ImGuiKey_X, DOOM_KEY_X}, + {ImGuiKey_Y, DOOM_KEY_Y}, + {ImGuiKey_Z, DOOM_KEY_Z}, + {ImGuiKey_Backspace, DOOM_KEY_BACKSPACE}, + {ImGuiKey_ModCtrl, DOOM_KEY_CTRL}, + {ImGuiKey_LeftArrow, DOOM_KEY_LEFT_ARROW}, + {ImGuiKey_UpArrow, DOOM_KEY_UP_ARROW}, + {ImGuiKey_RightArrow, DOOM_KEY_RIGHT_ARROW}, + {ImGuiKey_DownArrow, DOOM_KEY_DOWN_ARROW}, + {ImGuiKey_ModShift, DOOM_KEY_SHIFT}, + {ImGuiKey_ModAlt, DOOM_KEY_ALT}, + {ImGuiKey_F1, DOOM_KEY_F1}, + {ImGuiKey_F2, DOOM_KEY_F2}, + {ImGuiKey_F3, DOOM_KEY_F3}, + {ImGuiKey_F4, DOOM_KEY_F4}, + {ImGuiKey_F5, DOOM_KEY_F5}, + {ImGuiKey_F6, DOOM_KEY_F6}, + {ImGuiKey_F7, DOOM_KEY_F7}, + {ImGuiKey_F8, DOOM_KEY_F8}, + {ImGuiKey_F9, DOOM_KEY_F9}, + {ImGuiKey_F10, DOOM_KEY_F10}, + {ImGuiKey_F11, DOOM_KEY_F11}, + {ImGuiKey_F12, DOOM_KEY_F12}, + {ImGuiKey_Pause, DOOM_KEY_PAUSE}, +}; + float DoomIMGUI::render(float time_delta) { - // tick doom either way - // while this is computing, and as such could be run in tick(), its still rendering - const float doom_interval = _doom.render(time_delta); + float doom_interval {1.f}; if (ImGui::Begin("doom")) { - ImGui::Image(reinterpret_cast(_doom.getTexID()), {320, 200}); + for (const auto& [imkey, dokey] : g_all_keys) { + // TODO: unpress all keys on focus loss + if (ImGui::IsKeyPressed(imkey, false)) { + _doom.doomKeyDown(dokey); + } + if (ImGui::IsKeyReleased(imkey)) { + _doom.doomKeyUp(dokey); + } + } + + doom_interval = _doom.render(time_delta); + ImGui::Image(reinterpret_cast(_doom.getTexID()), {320, 200*1.2}); } ImGui::End(); diff --git a/src/solanaceae/doom_imgui.hpp b/src/solanaceae/doom_imgui.hpp index ddeaac5..be7f0bf 100644 --- a/src/solanaceae/doom_imgui.hpp +++ b/src/solanaceae/doom_imgui.hpp @@ -14,8 +14,5 @@ class DoomIMGUI { // render imgui float render(float time_delta); - - public: // custom doom api - uint64_t getTexID(void); };