Browse Source
[hid_core] Fix a crash related to setting controls while the game is running (#2747 )
This fixes a crash related to setting controls while the game is running. Fixes BOTW, TOTK, MK8D and possibly others as well.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2747
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
pull/2748/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
8 additions and
6 deletions
src/hid_core/frontend/emulated_controller.cpp
src/hid_core/frontend/emulated_controller.h
@ -763,14 +763,11 @@ void EmulatedController::StartMotionCalibration() {
}
}
void EmulatedController : : SetButton ( const Common : : Input : : CallbackStatus & callback , std : : size_t index , Common : : UUID uuid ) {
const auto player_index = Service : : HID : : NpadIdTypeToIndex ( npad_id_type ) ;
const auto & player = Settings : : values . players . GetValue ( ) [ player_index ] ;
void EmulatedController : : SetButton ( const Common : : Input : : CallbackStatus & callback , std : : size_t index ,
Common : : UUID uuid ) {
if ( index > = controller . button_values . size ( ) ) {
return ;
}
std : : unique_lock lock { mutex } ;
bool value_changed = false ;
const auto new_status = TransformToButton ( callback ) ;
@ -923,9 +920,12 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
lock . unlock ( ) ;
if ( player . connected ) {
const auto player_index = Service : : HID : : NpadIdTypeToIndex ( npad_id_type ) ;
if ( ! is_connected & & ! controller_connected [ player_index ] ) {
Connect ( ) ;
controller_connected [ player_index ] = true ;
}
TriggerOnChange ( ControllerTriggerType : : Button , true ) ;
}
@ -20,6 +20,7 @@
# include "common/settings.h"
# include "common/vector_math.h"
# include "hid_core/frontend/motion_input.h"
# include "hid_core/hid_core.h"
# include "hid_core/hid_types.h"
# include "hid_core/irsensor/irs_types.h"
@ -588,6 +589,7 @@ private:
std : : array < VibrationValue , 2 > last_vibration_value { DEFAULT_VIBRATION_VALUE ,
DEFAULT_VIBRATION_VALUE } ;
std : : array < std : : chrono : : steady_clock : : time_point , 2 > last_vibration_timepoint { } ;
std : : array < bool , HIDCore : : available_controllers - 2 > controller_connected { } ;
/ / Temporary values to avoid doing changes while the controller is in configuring mode
NpadStyleIndex tmp_npad_type { NpadStyleIndex : : None } ;