From 8062afc25e895cb49e76f6e26e51a7d4a1ad2df2 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sat, 1 Feb 2025 23:32:55 +0100 Subject: revamp input system --- lib/nes/app/input/modifier-mask.hh | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/nes/app/input/modifier-mask.hh (limited to 'lib/nes/app/input/modifier-mask.hh') diff --git a/lib/nes/app/input/modifier-mask.hh b/lib/nes/app/input/modifier-mask.hh new file mode 100644 index 0000000..e18cddb --- /dev/null +++ b/lib/nes/app/input/modifier-mask.hh @@ -0,0 +1,39 @@ +#pragma once + +#include "nes/common/types.hh" + +namespace nes::app +{ + /// Keyboard modifiers. + class modifier_mask + { + u8 raw_value_{ 0 }; + + public: + constexpr explicit modifier_mask() = default; + + static constexpr auto from_raw_value(u8 const raw_value) -> modifier_mask + { + return modifier_mask{ raw_value }; + } + + constexpr auto add(modifier_mask const other) -> void { raw_value_ |= other.raw_value_; } + constexpr auto remove(modifier_mask const other) -> void { raw_value_ ^= other.raw_value_; } + constexpr auto contains(modifier_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 -> u8 { return raw_value_; } + + private: + constexpr explicit modifier_mask(u8 const raw_value) + : raw_value_{ raw_value } + { + } + }; + + namespace modifiers + { + inline constexpr auto control = modifier_mask::from_raw_value(1 << 0); + inline constexpr auto shift = modifier_mask::from_raw_value(1 << 1); + inline constexpr auto alt = modifier_mask::from_raw_value(1 << 2); + } // namespace modifiers +} // namespace nes::app \ No newline at end of file -- cgit v1.3.1