summaryrefslogtreecommitdiff
path: root/lib/nes/app/input/input-buffer.hh
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-02-01 23:32:55 +0100
committerHannes Schulze <haschu0103@outlook.de>2025-02-01 23:32:55 +0100
commit8062afc25e895cb49e76f6e26e51a7d4a1ad2df2 (patch)
treef64e6522a84a8f58912b9e58a66c187fbcaadd78 /lib/nes/app/input/input-buffer.hh
parentbf88e17d552d85cd18bc31757ef9d73049b327c4 (diff)
revamp input system
Diffstat (limited to 'lib/nes/app/input/input-buffer.hh')
-rw-r--r--lib/nes/app/input/input-buffer.hh41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/nes/app/input/input-buffer.hh b/lib/nes/app/input/input-buffer.hh
new file mode 100644
index 0000000..68fca6b
--- /dev/null
+++ b/lib/nes/app/input/input-buffer.hh
@@ -0,0 +1,41 @@
+#pragma once
+
+#include "nes/app/input/key.hh"
+#include "nes/common/list.hh"
+
+namespace nes::app
+{
+ class input_event;
+
+ class input_buffer
+ {
+ struct event final : list<event>::node
+ {
+ bool pressed{ false };
+ };
+
+ event key_events_[key_count]{};
+ list<event> event_queue_;
+
+ public:
+ explicit input_buffer() = default;
+
+ input_buffer(input_buffer const&) = delete;
+ input_buffer(input_buffer&&) = delete;
+ auto operator=(input_buffer const&) -> input_buffer& = delete;
+ auto operator=(input_buffer&&) -> input_buffer& = delete;
+
+ /// Record a key-down event.
+ auto key_down(key) -> void;
+ /// Record a key-up event.
+ auto key_up(key) -> void;
+
+ auto read_key(key) -> bool;
+ auto poll_event() -> input_event;
+
+ private:
+ auto get_event(key) -> event&;
+ auto get_key(event const&) -> key;
+ auto set_pressed(key, bool) -> void;
+ };
+} // namespace nes::app \ No newline at end of file