From 761604f9e4815e8f4355637ebb46052314cbed86 Mon Sep 17 00:00:00 2001 From: vimene Date: Wed, 10 Dec 2025 20:40:42 +0100 Subject: renamed .h to .hpp --- src/ctrl/keyboard.hpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/ctrl/keyboard.hpp (limited to 'src/ctrl/keyboard.hpp') diff --git a/src/ctrl/keyboard.hpp b/src/ctrl/keyboard.hpp new file mode 100644 index 0000000..c8ab983 --- /dev/null +++ b/src/ctrl/keyboard.hpp @@ -0,0 +1,52 @@ +#ifndef CTRL_KEYBOARD_H +#define CTRL_KEYBOARD_H + +#include +#include "math/vector.hpp" + +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 +class Keyboard { + public: + 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(key) / (sizeof(std::size_t) * 8)] + |= 1 << (static_cast(key) % (sizeof(std::size_t) * 8)); + key_down_cb(key); + } + + void key_up_event(KeyboardKey key) { + key_down_list[static_cast(key) / (sizeof(std::size_t) * 8)] + &= ~(1 << (static_cast(key) % (sizeof(std::size_t) * 8))); + key_up_cb(key); + } + + constexpr bool is_down(KeyboardKey key) const & { + return (key_down_list[static_cast(key) / (sizeof(std::size_t) * 8)] + & (1 << (static_cast(key) % (sizeof(std::size_t) * 8)))) != 0; + } + + private: + KeyDownCallback key_down_cb; + KeyUpCallback key_up_cb; + std::array key_down_list; +}; + +} + +#endif // CTRL_KEYBOARD_H -- cgit v1.2.3