diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-11 13:03:35 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-11 13:03:35 -0400 |
| commit | fb5c06777557fc28c0d8e919d9a82bdf51adeea7 (patch) | |
| tree | 2b80595cf3d286a3d72619102d0df06582de41dd /src/player-input.cpp | |
| parent | 40ab6886e72c660d424fec9140feb8685db7d363 (diff) | |
checkpoint for handling player input
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(); +} + |
