aboutsummaryrefslogtreecommitdiff
path: root/src/ctrl/keyboard.hpp
diff options
context:
space:
mode:
authorvimene <vincent.menegaux@gmail.com>2025-12-10 20:40:42 +0100
committervimene <vincent.menegaux@gmail.com>2025-12-10 20:40:42 +0100
commit761604f9e4815e8f4355637ebb46052314cbed86 (patch)
treeb9cd6dde75ebf5897f8e67835522c6411d6ab7cb /src/ctrl/keyboard.hpp
parentc666035bc6a51e4dd76daebefffaf8bbc951977c (diff)
downloadengine-761604f9e4815e8f4355637ebb46052314cbed86.tar.gz
renamed .h to .hpp
Diffstat (limited to 'src/ctrl/keyboard.hpp')
-rw-r--r--src/ctrl/keyboard.hpp52
1 files changed, 52 insertions, 0 deletions
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 <cstdint>
+#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<typename KeyDownCallback, typename KeyUpCallback>
+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<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;
+ }
+
+ 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;
+};
+
+}
+
+#endif // CTRL_KEYBOARD_H