summaryrefslogtreecommitdiff
path: root/src/player-input.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-11 13:03:35 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-10-11 13:03:35 -0400
commitfb5c06777557fc28c0d8e919d9a82bdf51adeea7 (patch)
tree2b80595cf3d286a3d72619102d0df06582de41dd /src/player-input.cpp
parent40ab6886e72c660d424fec9140feb8685db7d363 (diff)
checkpoint for handling player input
Diffstat (limited to 'src/player-input.cpp')
-rw-r--r--src/player-input.cpp119
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();
+}
+