From fb5c06777557fc28c0d8e919d9a82bdf51adeea7 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Wed, 11 Oct 2023 13:03:35 -0400 Subject: checkpoint for handling player input --- src/player-input.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/player-input.cpp (limited to 'src/player-input.cpp') 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 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(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(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(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(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(); +} + -- cgit v1.2.3