diff options
author | vimene <vincent.menegaux@gmail.com> | 2025-01-03 08:19:05 +0100 |
---|---|---|
committer | vimene <vincent.menegaux@gmail.com> | 2025-01-03 08:19:05 +0100 |
commit | 0485661fd05af686acf886cb2c96dd4a5e38bb4d (patch) | |
tree | 6676d203c3c3156f4c45bdc90cc7dd8b8ec1efaa /src/ctrl | |
parent | 77cd3a0538d342e25010132317734f27af4bed8e (diff) | |
download | engine-master.tar.gz |
Diffstat (limited to 'src/ctrl')
-rw-r--r-- | src/ctrl/keyboard.h | 43 | ||||
-rw-r--r-- | src/ctrl/mouse.h | 13 |
2 files changed, 47 insertions, 9 deletions
diff --git a/src/ctrl/keyboard.h b/src/ctrl/keyboard.h index de7297c..4f3b4ef 100644 --- a/src/ctrl/keyboard.h +++ b/src/ctrl/keyboard.h @@ -1,15 +1,50 @@ #ifndef CTRL_KEYBOARD_H #define CTRL_KEYBOARD_H +#include <cstdint> +#include "math/vector.h" + +using engine::math::Vector2; + namespace engine::controllers { +enum class KeyboardKey { + fw, + bw, + key_left, + key_right, + zoom, +}; + +static constexpr std::size_t keyboard_key_count = 5; + +template<typename KeyDownCallback, typename KeyUpCallback> class Keyboard { public: - bool fw_down, bw_down, left_down, right_down, zoom_down; + constexpr Keyboard(KeyDownCallback key_down_cb, KeyUpCallback key_up_cb) : + key_down_cb{key_down_cb}, key_up_cb{key_up_cb}, key_down_list{{{}}} {} + + void key_down_event(KeyboardKey key) { + key_down_list[static_cast<std::size_t>(key) / (sizeof(std::size_t) * 8)] + |= 1 << (static_cast<std::size_t>(key) % (sizeof(std::size_t) * 8)); + key_down_cb(key); + } + + void key_up_event(KeyboardKey key) { + key_down_list[static_cast<std::size_t>(key) / (sizeof(std::size_t) * 8)] + &= ~(1 << (static_cast<std::size_t>(key) % (sizeof(std::size_t) * 8))); + key_up_cb(key); + } + + constexpr bool is_down(KeyboardKey key) const & { + return (key_down_list[static_cast<std::size_t>(key) / (sizeof(std::size_t) * 8)] + & (1 << (static_cast<std::size_t>(key) % (sizeof(std::size_t) * 8)))) != 0; + } - constexpr Keyboard() : - fw_down{false}, bw_down{false}, left_down{false}, - right_down{false}, zoom_down{false} {} + private: + KeyDownCallback key_down_cb; + KeyUpCallback key_up_cb; + std::array<std::size_t, (keyboard_key_count + sizeof(std::size_t) * 8 - 1) / (sizeof(std::size_t) * 8)> key_down_list; }; } diff --git a/src/ctrl/mouse.h b/src/ctrl/mouse.h index 8b66cee..521b0a4 100644 --- a/src/ctrl/mouse.h +++ b/src/ctrl/mouse.h @@ -3,16 +3,19 @@ #include "math/vector.h" -using engine::math::Vector2; - namespace engine::controllers { +template<typename MouseMotionCallback> class Mouse { public: - bool moved; - Vector2 rel_motion; + constexpr Mouse(MouseMotionCallback mouse_motion_cb) : mouse_motion_cb{mouse_motion_cb} {} + + void mouse_motion_event(Vector2 rel) const & { + mouse_motion_cb(rel); + } - constexpr Mouse() : moved{false}, rel_motion{0.f, 0.f} {} + private: + MouseMotionCallback mouse_motion_cb; }; } |