Browse Source
[hid_core] Fix a specific case where all controllers get disconnected by certain games (#2759 )
There's a bug in some games where all controllers get disconnected. This fixes those specific cases where controllers set to Handheld or Player 1 need to remain connected.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2759
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
pull/2761/head
MaranBr
2 months ago
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
2 changed files with
15 additions and
5 deletions
src/hid_core/frontend/emulated_controller.cpp
src/hid_core/frontend/emulated_controller.h
@ -924,10 +924,20 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
lock . unlock ( ) ;
lock . unlock ( ) ;
if ( ! is_connected & & ! controller_connected [ player_index ] ) {
if ( player . connected ) {
Connect ( ) ;
controller_connected [ player_index ] = true ;
if ( ! is_connected ) {
if ( npad_type = = NpadStyleIndex : : Handheld ) {
if ( npad_id_type = = NpadIdType : : Handheld ) {
Connect ( ) ;
controller_connected [ player_index ] = true ;
}
} else if ( npad_type ! = NpadStyleIndex : : Handheld ) {
if ( npad_id_type = = NpadIdType : : Player1 ) {
Connect ( ) ;
controller_connected [ player_index ] = true ;
} else if ( player . connected & & ! controller_connected [ player_index ] ) {
Connect ( ) ;
controller_connected [ player_index ] = true ;
}
}
}
}
}
@ -589,7 +589,7 @@ private:
std : : array < VibrationValue , 2 > last_vibration_value { DEFAULT_VIBRATION_VALUE ,
std : : array < VibrationValue , 2 > last_vibration_value { DEFAULT_VIBRATION_VALUE ,
DEFAULT_VIBRATION_VALUE } ;
DEFAULT_VIBRATION_VALUE } ;
std : : array < std : : chrono : : steady_clock : : time_point , 2 > last_vibration_timepoint { } ;
std : : array < std : : chrono : : steady_clock : : time_point , 2 > last_vibration_timepoint { } ;
std : : array < bool , HIDCore : : available_controllers - 2 > controller_connected { } ;
std : : array < bool , HIDCore : : available_controllers > controller_connected { } ;
/ / Temporary values to avoid doing changes while the controller is in configuring mode
/ / Temporary values to avoid doing changes while the controller is in configuring mode
NpadStyleIndex tmp_npad_type { NpadStyleIndex : : None } ;
NpadStyleIndex tmp_npad_type { NpadStyleIndex : : None } ;