diff options
Diffstat (limited to 'src/player-input.cpp')
| -rw-r--r-- | src/player-input.cpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/player-input.cpp b/src/player-input.cpp new file mode 100644 index 0000000..148eb22 --- /dev/null +++ b/src/player-input.cpp @@ -0,0 +1,119 @@ + +#include "player-input.hpp" +#include "window.hpp" +#include "game-settings.hpp" + +TypeSafeInt_B(InputEventHash); +TypeSafeInt_B(InputEventType); +TypeSafeInt_B(InputCursorEntered); +TypeSafeInt_B(InputKeyboardKeyAction); +TypeSafeInt_B(InputMouseButtonAction); +TypeSafeInt_B(InputWindowFocused); + +DynArray<PkeInputEvent> UnhandledPkeInputEvents{0}; + +void PkeInput_Tick() { } + +void CursorEnterCallback(GLFWwindow *window, int entered) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_CURSOR_ENTER; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = InputCursorEntered{static_cast<InputCursorEntered_T>(entered)}; + ev.keyboardKeyAction = PKE_INPUT_KEYBOARD_KEY_ACTION_UNSET; + ev.mouseButtonAction = PKE_INPUT_MOUSE_BUTTON_ACTION_UNSET; + ev.windowFocused = PKE_INPUT_WINDOW_FOCUSED_UNSET; + ev.x = 0; + ev.y = 0; + ev.button = 0; + ev.scanCode = 0; + ev.mods = 0; +} + +void CursorPosCallback(GLFWwindow *window, double xPos, double yPos) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_CURSOR_POS; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = PKE_INPUT_CURSOR_ENTERED_UNSET; + ev.keyboardKeyAction = PKE_INPUT_KEYBOARD_KEY_ACTION_UNSET; + ev.mouseButtonAction = PKE_INPUT_MOUSE_BUTTON_ACTION_UNSET; + ev.windowFocused = PKE_INPUT_WINDOW_FOCUSED_UNSET; + ev.x = xPos; + ev.y = yPos; + ev.button = 0; + ev.scanCode = 0; + ev.mods = 0; +} + +void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_KEY; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = PKE_INPUT_CURSOR_ENTERED_UNSET; + ev.keyboardKeyAction = InputKeyboardKeyAction{static_cast<InputKeyboardKeyAction_T>(action)}; + ev.mouseButtonAction = PKE_INPUT_MOUSE_BUTTON_ACTION_UNSET; + ev.windowFocused = PKE_INPUT_WINDOW_FOCUSED_UNSET; + ev.x = 0; + ev.y = 0; + ev.button = key; + ev.scanCode = scancode; + ev.mods = mods; +} + +void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_MOUSE_BUTTON; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = PKE_INPUT_CURSOR_ENTERED_UNSET; + ev.keyboardKeyAction = PKE_INPUT_KEYBOARD_KEY_ACTION_UNSET; + ev.mouseButtonAction = InputMouseButtonAction{static_cast<InputMouseButtonAction_T>(action)}; + ev.windowFocused = PKE_INPUT_WINDOW_FOCUSED_UNSET; + ev.x = 0; + ev.y = 0; + ev.button = button; + ev.scanCode = 0; + ev.mods = mods; +} + +void ScrollCallback(GLFWwindow *window, double xOffset, double yOffset) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_SCROLL; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = PKE_INPUT_CURSOR_ENTERED_UNSET; + ev.keyboardKeyAction = PKE_INPUT_KEYBOARD_KEY_ACTION_UNSET; + ev.mouseButtonAction = PKE_INPUT_MOUSE_BUTTON_ACTION_UNSET; + ev.windowFocused = PKE_INPUT_WINDOW_FOCUSED_UNSET; + ev.x = xOffset; + ev.y = yOffset; + ev.button = 0; + ev.scanCode = 0; + ev.mods = 0; +} + +void WindowFocusCallback(GLFWwindow *window, int focused) { + auto &ev = UnhandledPkeInputEvents.Push(); + ev.type = PKE_INPUT_EVENT_TYPE_WINDOW_FOCUS; + ev.timePoint = pkeSettings.steadyClock.now(); + ev.cursorEntered = PKE_INPUT_CURSOR_ENTERED_UNSET; + ev.keyboardKeyAction = PKE_INPUT_KEYBOARD_KEY_ACTION_UNSET; + ev.mouseButtonAction = PKE_INPUT_MOUSE_BUTTON_ACTION_UNSET; + ev.windowFocused = InputWindowFocused{static_cast<InputWindowFocused_T>(focused)}; + ev.x = 0; + ev.y = 0; + ev.button = 0; + ev.scanCode = 0; + ev.mods = 0; +} + +void PkeInput_Init() { + glfwSetCursorEnterCallback(window, CursorEnterCallback); + glfwSetCursorPosCallback(window, CursorPosCallback); + glfwSetKeyCallback(window, KeyCallback); + glfwSetMouseButtonCallback(window, MouseButtonCallback); + glfwSetScrollCallback(window, ScrollCallback); + glfwSetWindowFocusCallback(window, WindowFocusCallback); +} + +void PkeInput_Teardown() { + UnhandledPkeInputEvents.~DynArray(); +} + |
