diff options
Diffstat (limited to 'src/player-input.cpp')
| -rw-r--r-- | src/player-input.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/player-input.cpp b/src/player-input.cpp index 412be75..2bf412c 100644 --- a/src/player-input.cpp +++ b/src/player-input.cpp @@ -441,6 +441,49 @@ const pke_input_event *pke_input_query_by_action_name(const char *actionName) { return ev; } +void pke_input_query_by_mask(pke_input_event_mask mask, pke_input_event &ev) { + pke_input_event_hash type = mask.computedHash & PKE_INPUT_HASH_ALL_EVENTS; + switch (type) { + case PKE_INPUT_HASH_EVENT_TYPE_CURSOR_ENTER: + /* no-op */ + break; + case PKE_INPUT_HASH_EVENT_TYPE_CURSOR_POS: + /* no-op */ + break; + case PKE_INPUT_HASH_EVENT_TYPE_KEY: + ev.type = PKE_INPUT_HASH_EVENT_TYPE_KEY; + ev.sourceSet = pke_input_action_set_handle_MAX; + ev.data.key.button = mask.button; + ev.data.key.isPressed = bool(glfwGetKey(window, mask.button)); + ev.data.key.mods = 0; + ev.data.key.thisTick = false; + break; + case PKE_INPUT_HASH_EVENT_TYPE_MOUSE_BUTTON: + ev.type = PKE_INPUT_HASH_EVENT_TYPE_MOUSE_BUTTON; + ev.sourceSet = pke_input_action_set_handle_MAX; + ev.data.mouse_button.button = mask.button; + ev.data.mouse_button.isPressed = bool(glfwGetMouseButton(window, mask.button)); + ev.data.mouse_button.mods = 0; + ev.data.mouse_button.thisTick = false; + break; + case PKE_INPUT_HASH_EVENT_TYPE_SCROLL: + /* no-op */ + break; + case PKE_INPUT_HASH_EVENT_TYPE_WINDOW_FOCUS: + /* no-op */ + break; + default: + fprintf(stderr, "[pke_input_query_by_mask] unhandled input type: %i", pke_input_event_hash_T(type)); + break; + } + return; +} + +void pke_input_query_mouse_pos(double &x, double &y) { + x = lastMousePos.x; + y = lastMousePos.y; +} + void CursorEnterCallback(GLFWwindow *window, int entered) { if (registeredCursorEnterEvents.next) { pk_arr_append_t(&unhandled_events, { .type = PKE_INPUT_HASH_EVENT_TYPE_CURSOR_ENTER, .data = { .cursor_enter = { .entered = bool(entered) } } }); |
