mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 04:34:07 +01:00 
			
		
		
		
	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
					
				@ -12,7 +12,9 @@ InputInterpreter::InputInterpreter(Core::System& system)
 | 
			
		||||
    : npad{system.ServiceManager()
 | 
			
		||||
               .GetService<Service::HID::Hid>("hid")
 | 
			
		||||
               ->GetAppletResource()
 | 
			
		||||
               ->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad)} {}
 | 
			
		||||
               ->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad)} {
 | 
			
		||||
    ResetButtonStates();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
InputInterpreter::~InputInterpreter() = default;
 | 
			
		||||
 | 
			
		||||
@ -25,6 +27,17 @@ void InputInterpreter::PollInput() {
 | 
			
		||||
    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 {
 | 
			
		||||
    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.
 | 
			
		||||
    void PollInput();
 | 
			
		||||
 | 
			
		||||
    /// Resets all the button states to their defaults.
 | 
			
		||||
    void ResetButtonStates();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks whether the button is pressed.
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user