#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, nullptr}; 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(); }