diff --git a/Walnut/src/Walnut/Input/Input.cpp b/Walnut/src/Walnut/Input/Input.cpp index 6f2340e2..359e6002 100644 --- a/Walnut/src/Walnut/Input/Input.cpp +++ b/Walnut/src/Walnut/Input/Input.cpp @@ -6,6 +6,31 @@ namespace Walnut { + std::unordered_map> Input::s_KeyCallbackMap; + + void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) + { + if (action == GLFW_PRESS || action == GLFW_REPEAT) + { + auto funcIter = Input::s_KeyCallbackMap.find(key); + if (funcIter != Input::s_KeyCallbackMap.end()) + { + funcIter->second(); + } + } + } + + void Input::InitKeysCallBack() + { + GLFWwindow* windowHandle = Application::Get().GetWindowHandle(); + glfwSetKeyCallback(windowHandle, KeyCallback); + } + + void Input::SetKeyCallback(KeyCode keycode, std::function func) + { + s_KeyCallbackMap[(int)keycode] = func; + } + bool Input::IsKeyDown(KeyCode keycode) { GLFWwindow* windowHandle = Application::Get().GetWindowHandle(); diff --git a/Walnut/src/Walnut/Input/Input.h b/Walnut/src/Walnut/Input/Input.h index de4192c6..133a336d 100644 --- a/Walnut/src/Walnut/Input/Input.h +++ b/Walnut/src/Walnut/Input/Input.h @@ -2,6 +2,8 @@ #include "KeyCodes.h" +#include +#include #include namespace Walnut { @@ -9,12 +11,19 @@ namespace Walnut { class Input { public: + static void InitKeysCallBack(); + + static void SetKeyCallback(KeyCode keycode, std::function func); + static bool IsKeyDown(KeyCode keycode); + static bool IsMouseButtonDown(MouseButton button); static glm::vec2 GetMousePosition(); static void SetCursorMode(CursorMode mode); + + static std::unordered_map> s_KeyCallbackMap; }; }