forked from ShuriZma/suyu
1
0
Fork 0

input_interpreter: Make use of NpadButton instead of a u64

Allows us to be more explicit with the representation of button states and use the provided bit manipulation operators
This commit is contained in:
Morph 2021-11-29 18:26:52 -05:00
parent 322339a5fd
commit 5deecd714b
2 changed files with 9 additions and 9 deletions

View File

@ -20,7 +20,7 @@ InputInterpreter::InputInterpreter(Core::System& system)
InputInterpreter::~InputInterpreter() = default; InputInterpreter::~InputInterpreter() = default;
void InputInterpreter::PollInput() { void InputInterpreter::PollInput() {
const u64 button_state = npad.GetAndResetPressState(); const auto button_state = npad.GetAndResetPressState();
previous_index = current_index; previous_index = current_index;
current_index = (current_index + 1) % button_states.size(); current_index = (current_index + 1) % button_states.size();
@ -32,30 +32,30 @@ void InputInterpreter::ResetButtonStates() {
previous_index = 0; previous_index = 0;
current_index = 0; current_index = 0;
button_states[0] = 0xFFFFFFFFFFFFFFFF; button_states[0] = Core::HID::NpadButton::All;
for (std::size_t i = 1; i < button_states.size(); ++i) { for (std::size_t i = 1; i < button_states.size(); ++i) {
button_states[i] = 0; button_states[i] = Core::HID::NpadButton::None;
} }
} }
bool InputInterpreter::IsButtonPressed(Core::HID::NpadButton button) const { bool InputInterpreter::IsButtonPressed(Core::HID::NpadButton button) const {
return (button_states[current_index] & static_cast<u64>(button)) != 0; return True(button_states[current_index] & button);
} }
bool InputInterpreter::IsButtonPressedOnce(Core::HID::NpadButton button) const { bool InputInterpreter::IsButtonPressedOnce(Core::HID::NpadButton button) const {
const bool current_press = (button_states[current_index] & static_cast<u64>(button)) != 0; const bool current_press = True(button_states[current_index] & button);
const bool previous_press = (button_states[previous_index] & static_cast<u64>(button)) != 0; const bool previous_press = True(button_states[previous_index] & button);
return current_press && !previous_press; return current_press && !previous_press;
} }
bool InputInterpreter::IsButtonHeld(Core::HID::NpadButton button) const { bool InputInterpreter::IsButtonHeld(Core::HID::NpadButton button) const {
u64 held_buttons{button_states[0]}; Core::HID::NpadButton held_buttons{button_states[0]};
for (std::size_t i = 1; i < button_states.size(); ++i) { for (std::size_t i = 1; i < button_states.size(); ++i) {
held_buttons &= button_states[i]; held_buttons &= button_states[i];
} }
return (held_buttons & static_cast<u64>(button)) != 0; return True(held_buttons & button);
} }

View File

@ -105,7 +105,7 @@ private:
Service::HID::Controller_NPad& npad; Service::HID::Controller_NPad& npad;
/// Stores 9 consecutive button states polled from HID. /// Stores 9 consecutive button states polled from HID.
std::array<u64, 9> button_states{}; std::array<Core::HID::NpadButton, 9> button_states{};
std::size_t previous_index{}; std::size_t previous_index{};
std::size_t current_index{}; std::size_t current_index{};