aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Input/HLE/NpadController.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Input/HLE/NpadController.cs')
-rw-r--r--src/Ryujinx.Input/HLE/NpadController.cs24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs
index 8411c10a..cde20f5d 100644
--- a/src/Ryujinx.Input/HLE/NpadController.cs
+++ b/src/Ryujinx.Input/HLE/NpadController.cs
@@ -203,8 +203,6 @@ namespace Ryujinx.Input.HLE
new(Key.NumLock, 10),
};
- private bool _isValid;
-
private MotionInput _leftMotionInput;
private MotionInput _rightMotionInput;
@@ -222,7 +220,6 @@ namespace Ryujinx.Input.HLE
{
State = default;
Id = null;
- _isValid = false;
_cemuHookClient = cemuHookClient;
}
@@ -234,11 +231,10 @@ namespace Ryujinx.Input.HLE
Id = config.Id;
_gamepad = GamepadDriver.GetGamepad(Id);
- _isValid = _gamepad != null;
UpdateUserConfiguration(config);
- return _isValid;
+ return _gamepad != null;
}
public void UpdateUserConfiguration(InputConfig config)
@@ -262,10 +258,7 @@ namespace Ryujinx.Input.HLE
_config = config;
- if (_isValid)
- {
- _gamepad.SetConfiguration(config);
- }
+ _gamepad?.SetConfiguration(config);
}
private void UpdateMotionInput(MotionConfigController motionConfig)
@@ -282,18 +275,21 @@ namespace Ryujinx.Input.HLE
public void Update()
{
- if (_isValid && GamepadDriver != null)
+ // _gamepad may be altered by other threads
+ var gamepad = _gamepad;
+
+ if (gamepad != null && GamepadDriver != null)
{
- State = _gamepad.GetMappedStateSnapshot();
+ State = gamepad.GetMappedStateSnapshot();
if (_config is StandardControllerInputConfig controllerConfig && controllerConfig.Motion.EnableMotion)
{
if (controllerConfig.Motion.MotionBackend == MotionInputBackendType.GamepadDriver)
{
- if (_gamepad.Features.HasFlag(GamepadFeaturesFlag.Motion))
+ if (gamepad.Features.HasFlag(GamepadFeaturesFlag.Motion))
{
- Vector3 accelerometer = _gamepad.GetMotionData(MotionInputId.Accelerometer);
- Vector3 gyroscope = _gamepad.GetMotionData(MotionInputId.Gyroscope);
+ Vector3 accelerometer = gamepad.GetMotionData(MotionInputId.Accelerometer);
+ Vector3 gyroscope = gamepad.GetMotionData(MotionInputId.Gyroscope);
accelerometer = new Vector3(accelerometer.X, -accelerometer.Z, accelerometer.Y);
gyroscope = new Vector3(gyroscope.X, -gyroscope.Z, gyroscope.Y);