sandbox
Loading...
Searching...
No Matches
input.hpp
1#ifndef LIBSBX_DEVICES_INPUT_HPP_
2#define LIBSBX_DEVICES_INPUT_HPP_
3
4#include <cinttypes>
5#include <unordered_map>
6
7#include <GLFW/glfw3.h>
8
9#include <libsbx/utility/bitmask.hpp>
10
11#include <libsbx/math/vector2.hpp>
12
13#include <libsbx/devices/key.hpp>
14#include <libsbx/devices/mouse_button.hpp>
15#include <libsbx/devices/input_action.hpp>
16#include <libsbx/devices/input_mod.hpp>
17
18namespace sbx::devices {
19
20struct key_state {
21 input_action action;
22 input_action last_action;
23}; // struct key_state
24
25class input {
26
27 friend class devices_module;
28 friend class window;
29
30public:
31
32 input() = delete;
33
34 static auto is_key_pressed(key key) -> bool;
35
36 static auto is_key_down(key key) -> bool;
37
38 static auto is_key_released(key key) -> bool;
39
40 static auto is_mouse_button_pressed(mouse_button button) -> bool;
41
42 static auto is_mouse_button_down(mouse_button button) -> bool;
43
44 static auto is_mouse_button_released(mouse_button button) -> bool;
45
46 static auto mouse_position() -> const math::vector2&;
47
48 static auto scroll_delta() -> const math::vector2&;
49
50private:
51
52 static auto _transition_pressed_keys() -> void;
53
54 static auto _transition_pressed_mouse_buttons() -> void;
55
56 static auto _transition_scroll_delta() -> void;
57
58 static auto _update_key_state(key key, input_action action) -> void;
59
60 static auto _update_mouse_button_state(mouse_button button, input_action action) -> void;
61
62 static auto _update_mouse_position(const math::vector2& position) -> void;
63
64 static auto _update_scroll_delta(const math::vector2& delta) -> void;
65
66 static std::unordered_map<key, key_state> _key_states;
67 static std::unordered_map<mouse_button, key_state> _mouse_button_states;
68 static math::vector2 _mouse_position;
69 static math::vector2 _scroll_delta;
70
71}; // class input
72
73} // namespace sbx::devices
74
75#endif // LIBSBX_DEVICES_INPUT_HPP_
Definition: devices_module.hpp:25
Definition: input.hpp:25
Definition: window.hpp:30
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: input.hpp:20