diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2025-01-13 23:42:17 +0100 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2025-01-13 23:42:17 +0100 |
| commit | 5734a139d3f218972b5ebaff0e51167770352bcf (patch) | |
| tree | adae3fee4a9cca191bd6e5903067964841da99bf /src/nes/util | |
| parent | a2edbedb520f2ada936c00308cc6dfd75717b0d8 (diff) | |
finish ui
Diffstat (limited to 'src/nes/util')
| -rw-r--r-- | src/nes/util/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/nes/util/button-mask.hh | 43 |
2 files changed, 44 insertions, 0 deletions
diff --git a/src/nes/util/CMakeLists.txt b/src/nes/util/CMakeLists.txt index 1d30125..f78a26f 100644 --- a/src/nes/util/CMakeLists.txt +++ b/src/nes/util/CMakeLists.txt @@ -2,4 +2,5 @@ target_sources( nes PRIVATE address.hh + button-mask.hh rgb.hh)
\ No newline at end of file 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 |
