summaryrefslogtreecommitdiff
path: root/src/nes/util/button-mask.hh
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-01-13 23:42:17 +0100
committerHannes Schulze <haschu0103@outlook.de>2025-01-13 23:42:17 +0100
commit5734a139d3f218972b5ebaff0e51167770352bcf (patch)
treeadae3fee4a9cca191bd6e5903067964841da99bf /src/nes/util/button-mask.hh
parenta2edbedb520f2ada936c00308cc6dfd75717b0d8 (diff)
finish ui
Diffstat (limited to 'src/nes/util/button-mask.hh')
-rw-r--r--src/nes/util/button-mask.hh43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/nes/util/button-mask.hh b/src/nes/util/button-mask.hh
new file mode 100644
index 0000000..b010b9e
--- /dev/null
+++ b/src/nes/util/button-mask.hh
@@ -0,0 +1,43 @@
+#pragma once
+
+#include <cstdint>
+
+namespace nes
+{
+ class button_mask
+ {
+ std::uint8_t raw_value_{ 0 };
+
+ public:
+ constexpr explicit button_mask() = default;
+
+ static constexpr auto from_raw_value(std::uint8_t const raw_value) -> button_mask
+ {
+ return button_mask{ raw_value };
+ }
+
+ constexpr auto add(button_mask const other) -> void { raw_value_ |= other.raw_value_; }
+ constexpr auto remove(button_mask const other) -> void { raw_value_ ^= other.raw_value_; }
+ constexpr auto contains(button_mask const other) const -> bool { return (raw_value_ & other.raw_value_) == other.raw_value_; }
+ constexpr auto is_empty() const -> bool { return raw_value_ == 0; }
+ constexpr auto get_raw_value() const -> std::uint8_t { return raw_value_; }
+
+ private:
+ constexpr explicit button_mask(std::uint8_t const raw_value)
+ : raw_value_{ raw_value }
+ {
+ }
+ };
+
+ namespace buttons
+ {
+ static constexpr auto a = button_mask::from_raw_value(1 << 0);
+ static constexpr auto b = button_mask::from_raw_value(1 << 1);
+ static constexpr auto select = button_mask::from_raw_value(1 << 2);
+ static constexpr auto start = button_mask::from_raw_value(1 << 3);
+ static constexpr auto up = button_mask::from_raw_value(1 << 4);
+ static constexpr auto down = button_mask::from_raw_value(1 << 5);
+ static constexpr auto left = button_mask::from_raw_value(1 << 6);
+ static constexpr auto right = button_mask::from_raw_value(1 << 7);
+ } // namespace buttons
+} // namespace nes \ No newline at end of file