input_interpreter: Fix button hold being interpreted incorrectly on init
We reset all the button states to 0 except the first index (which has all the buttons as pressed) to prevent a button hold being interpreted as a button that was pressed once on the first poll.
This commit is contained in:
parent
f6e6913f8f
commit
aa3adf6c3f
2 changed files with 17 additions and 1 deletions
|
@ -12,7 +12,9 @@ InputInterpreter::InputInterpreter(Core::System& system)
|
||||||
: npad{system.ServiceManager()
|
: npad{system.ServiceManager()
|
||||||
.GetService<Service::HID::Hid>("hid")
|
.GetService<Service::HID::Hid>("hid")
|
||||||
->GetAppletResource()
|
->GetAppletResource()
|
||||||
->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad)} {}
|
->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad)} {
|
||||||
|
ResetButtonStates();
|
||||||
|
}
|
||||||
|
|
||||||
InputInterpreter::~InputInterpreter() = default;
|
InputInterpreter::~InputInterpreter() = default;
|
||||||
|
|
||||||
|
@ -25,6 +27,17 @@ void InputInterpreter::PollInput() {
|
||||||
button_states[current_index] = button_state;
|
button_states[current_index] = button_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputInterpreter::ResetButtonStates() {
|
||||||
|
previous_index = 0;
|
||||||
|
current_index = 0;
|
||||||
|
|
||||||
|
button_states[0] = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
for (std::size_t i = 1; i < button_states.size(); ++i) {
|
||||||
|
button_states[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool InputInterpreter::IsButtonPressed(HIDButton button) const {
|
bool InputInterpreter::IsButtonPressed(HIDButton button) const {
|
||||||
return (button_states[current_index] & (1U << static_cast<u8>(button))) != 0;
|
return (button_states[current_index] & (1U << static_cast<u8>(button))) != 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,9 @@ public:
|
||||||
/// Gets a button state from HID and inserts it into the array of button states.
|
/// Gets a button state from HID and inserts it into the array of button states.
|
||||||
void PollInput();
|
void PollInput();
|
||||||
|
|
||||||
|
/// Resets all the button states to their defaults.
|
||||||
|
void ResetButtonStates();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the button is pressed.
|
* Checks whether the button is pressed.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue