aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Models
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Ava/UI/Models')
-rw-r--r--src/Ryujinx.Ava/UI/Models/Input/ControllerInputConfig.cs580
-rw-r--r--src/Ryujinx.Ava/UI/Models/Input/KeyboardInputConfig.cs422
-rw-r--r--src/Ryujinx.Ava/UI/Models/InputConfiguration.cs456
3 files changed, 456 insertions, 1002 deletions
diff --git a/src/Ryujinx.Ava/UI/Models/Input/ControllerInputConfig.cs b/src/Ryujinx.Ava/UI/Models/Input/ControllerInputConfig.cs
deleted file mode 100644
index 4929e582..00000000
--- a/src/Ryujinx.Ava/UI/Models/Input/ControllerInputConfig.cs
+++ /dev/null
@@ -1,580 +0,0 @@
-using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.Common.Configuration.Hid;
-using Ryujinx.Common.Configuration.Hid.Controller;
-using Ryujinx.Common.Configuration.Hid.Controller.Motion;
-using System;
-
-namespace Ryujinx.Ava.UI.Models.Input
-{
- public class ControllerInputConfig : BaseModel
- {
- public bool EnableCemuHookMotion { get; set; }
- public string DsuServerHost { get; set; }
- public int DsuServerPort { get; set; }
- public int Slot { get; set; }
- public int AltSlot { get; set; }
- public bool MirrorInput { get; set; }
- public int Sensitivity { get; set; }
- public double GyroDeadzone { get; set; }
-
- public float WeakRumble { get; set; }
- public float StrongRumble { get; set; }
-
- public string Id { get; set; }
- public ControllerType ControllerType { get; set; }
- public PlayerIndex PlayerIndex { get; set; }
-
- private StickInputId _leftJoystick;
- public StickInputId LeftJoystick
- {
- get => _leftJoystick;
- set
- {
- _leftJoystick = value;
- OnPropertyChanged();
- }
- }
-
- private bool _leftInvertStickX;
- public bool LeftInvertStickX
- {
- get => _leftInvertStickX;
- set
- {
- _leftInvertStickX = value;
- OnPropertyChanged();
- }
- }
-
- private bool _leftInvertStickY;
- public bool LeftInvertStickY
- {
- get => _leftInvertStickY;
- set
- {
- _leftInvertStickY = value;
- OnPropertyChanged();
- }
- }
-
- private bool _leftRotate90;
- public bool LeftRotate90
- {
- get => _leftRotate90;
- set
- {
- _leftRotate90 = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _leftStickButton;
- public GamepadInputId LeftStickButton
- {
- get => _leftStickButton;
- set
- {
- _leftStickButton = value;
- OnPropertyChanged();
- }
- }
-
- private StickInputId _rightJoystick;
- public StickInputId RightJoystick
- {
- get => _rightJoystick;
- set
- {
- _rightJoystick = value;
- OnPropertyChanged();
- }
- }
-
- private bool _rightInvertStickX;
- public bool RightInvertStickX
- {
- get => _rightInvertStickX;
- set
- {
- _rightInvertStickX = value;
- OnPropertyChanged();
- }
- }
-
- private bool _rightInvertStickY;
- public bool RightInvertStickY
- {
- get => _rightInvertStickY;
- set
- {
- _rightInvertStickY = value;
- OnPropertyChanged();
- }
- }
-
- private bool _rightRotate90;
- public bool RightRotate90
- {
- get => _rightRotate90;
- set
- {
- _rightRotate90 = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _rightStickButton;
- public GamepadInputId RightStickButton
- {
- get => _rightStickButton;
- set
- {
- _rightStickButton = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _dpadUp;
- public GamepadInputId DpadUp
- {
- get => _dpadUp;
- set
- {
- _dpadUp = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _dpadDown;
- public GamepadInputId DpadDown
- {
- get => _dpadDown;
- set
- {
- _dpadDown = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _dpadLeft;
- public GamepadInputId DpadLeft
- {
- get => _dpadLeft;
- set
- {
- _dpadLeft = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _dpadRight;
- public GamepadInputId DpadRight
- {
- get => _dpadRight;
- set
- {
- _dpadRight = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonL;
- public GamepadInputId ButtonL
- {
- get => _buttonL;
- set
- {
- _buttonL = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonMinus;
- public GamepadInputId ButtonMinus
- {
- get => _buttonMinus;
- set
- {
- _buttonMinus = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _leftButtonSl;
- public GamepadInputId LeftButtonSl
- {
- get => _leftButtonSl;
- set
- {
- _leftButtonSl = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _leftButtonSr;
- public GamepadInputId LeftButtonSr
- {
- get => _leftButtonSr;
- set
- {
- _leftButtonSr = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonZl;
- public GamepadInputId ButtonZl
- {
- get => _buttonZl;
- set
- {
- _buttonZl = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonA;
- public GamepadInputId ButtonA
- {
- get => _buttonA;
- set
- {
- _buttonA = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonB;
- public GamepadInputId ButtonB
- {
- get => _buttonB;
- set
- {
- _buttonB = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonX;
- public GamepadInputId ButtonX
- {
- get => _buttonX;
- set
- {
- _buttonX = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonY;
- public GamepadInputId ButtonY
- {
- get => _buttonY;
- set
- {
- _buttonY = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonR;
- public GamepadInputId ButtonR
- {
- get => _buttonR;
- set
- {
- _buttonR = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonPlus;
- public GamepadInputId ButtonPlus
- {
- get => _buttonPlus;
- set
- {
- _buttonPlus = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _rightButtonSl;
- public GamepadInputId RightButtonSl
- {
- get => _rightButtonSl;
- set
- {
- _rightButtonSl = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _rightButtonSr;
- public GamepadInputId RightButtonSr
- {
- get => _rightButtonSr;
- set
- {
- _rightButtonSr = value;
- OnPropertyChanged();
- }
- }
-
- private GamepadInputId _buttonZr;
- public GamepadInputId ButtonZr
- {
- get => _buttonZr;
- set
- {
- _buttonZr = value;
- OnPropertyChanged();
- }
- }
-
- private float _deadzoneLeft;
- public float DeadzoneLeft
- {
- get => _deadzoneLeft;
- set
- {
- _deadzoneLeft = MathF.Round(value, 3);
- OnPropertyChanged();
- }
- }
-
- private float _deadzoneRight;
- public float DeadzoneRight
- {
- get => _deadzoneRight;
- set
- {
- _deadzoneRight = MathF.Round(value, 3);
- OnPropertyChanged();
- }
- }
-
- private float _rangeLeft;
- public float RangeLeft
- {
- get => _rangeLeft;
- set
- {
- _rangeLeft = MathF.Round(value, 3);
- OnPropertyChanged();
- }
- }
-
- private float _rangeRight;
- public float RangeRight
- {
- get => _rangeRight;
- set
- {
- _rangeRight = MathF.Round(value, 3);
- OnPropertyChanged();
- }
- }
-
- private float _triggerThreshold;
- public float TriggerThreshold
- {
- get => _triggerThreshold;
- set
- {
- _triggerThreshold = MathF.Round(value, 3);
- OnPropertyChanged();
- }
- }
-
- private bool _enableMotion;
- public bool EnableMotion
- {
- get => _enableMotion;
- set
- {
- _enableMotion = value;
- OnPropertyChanged();
- }
- }
-
- private bool _enableRumble;
- public bool EnableRumble
- {
- get => _enableRumble;
- set
- {
- _enableRumble = value;
- OnPropertyChanged();
- }
- }
-
- public ControllerInputConfig(InputConfig config)
- {
- if (config != null)
- {
- Id = config.Id;
- ControllerType = config.ControllerType;
- PlayerIndex = config.PlayerIndex;
-
- if (config is not StandardControllerInputConfig controllerInput)
- {
- return;
- }
-
- LeftJoystick = controllerInput.LeftJoyconStick.Joystick;
- LeftInvertStickX = controllerInput.LeftJoyconStick.InvertStickX;
- LeftInvertStickY = controllerInput.LeftJoyconStick.InvertStickY;
- LeftRotate90 = controllerInput.LeftJoyconStick.Rotate90CW;
- LeftStickButton = controllerInput.LeftJoyconStick.StickButton;
-
- RightJoystick = controllerInput.RightJoyconStick.Joystick;
- RightInvertStickX = controllerInput.RightJoyconStick.InvertStickX;
- RightInvertStickY = controllerInput.RightJoyconStick.InvertStickY;
- RightRotate90 = controllerInput.RightJoyconStick.Rotate90CW;
- RightStickButton = controllerInput.RightJoyconStick.StickButton;
-
- DpadUp = controllerInput.LeftJoycon.DpadUp;
- DpadDown = controllerInput.LeftJoycon.DpadDown;
- DpadLeft = controllerInput.LeftJoycon.DpadLeft;
- DpadRight = controllerInput.LeftJoycon.DpadRight;
- ButtonL = controllerInput.LeftJoycon.ButtonL;
- ButtonMinus = controllerInput.LeftJoycon.ButtonMinus;
- LeftButtonSl = controllerInput.LeftJoycon.ButtonSl;
- LeftButtonSr = controllerInput.LeftJoycon.ButtonSr;
- ButtonZl = controllerInput.LeftJoycon.ButtonZl;
-
- ButtonA = controllerInput.RightJoycon.ButtonA;
- ButtonB = controllerInput.RightJoycon.ButtonB;
- ButtonX = controllerInput.RightJoycon.ButtonX;
- ButtonY = controllerInput.RightJoycon.ButtonY;
- ButtonR = controllerInput.RightJoycon.ButtonR;
- ButtonPlus = controllerInput.RightJoycon.ButtonPlus;
- RightButtonSl = controllerInput.RightJoycon.ButtonSl;
- RightButtonSr = controllerInput.RightJoycon.ButtonSr;
- ButtonZr = controllerInput.RightJoycon.ButtonZr;
-
- DeadzoneLeft = controllerInput.DeadzoneLeft;
- DeadzoneRight = controllerInput.DeadzoneRight;
- RangeLeft = controllerInput.RangeLeft;
- RangeRight = controllerInput.RangeRight;
- TriggerThreshold = controllerInput.TriggerThreshold;
-
- if (controllerInput.Motion != null)
- {
- EnableMotion = controllerInput.Motion.EnableMotion;
- GyroDeadzone = controllerInput.Motion.GyroDeadzone;
- Sensitivity = controllerInput.Motion.Sensitivity;
-
- if (controllerInput.Motion is CemuHookMotionConfigController cemuHook)
- {
- EnableCemuHookMotion = true;
- DsuServerHost = cemuHook.DsuServerHost;
- DsuServerPort = cemuHook.DsuServerPort;
- Slot = cemuHook.Slot;
- AltSlot = cemuHook.AltSlot;
- MirrorInput = cemuHook.MirrorInput;
- }
- }
-
- if (controllerInput.Rumble != null)
- {
- EnableRumble = controllerInput.Rumble.EnableRumble;
- WeakRumble = controllerInput.Rumble.WeakRumble;
- StrongRumble = controllerInput.Rumble.StrongRumble;
- }
- }
- }
-
- public InputConfig GetConfig()
- {
- var config = new StandardControllerInputConfig
- {
- Id = Id,
- Backend = InputBackendType.GamepadSDL2,
- PlayerIndex = PlayerIndex,
- ControllerType = ControllerType,
- LeftJoycon = new LeftJoyconCommonConfig<GamepadInputId>
- {
- DpadUp = DpadUp,
- DpadDown = DpadDown,
- DpadLeft = DpadLeft,
- DpadRight = DpadRight,
- ButtonL = ButtonL,
- ButtonMinus = ButtonMinus,
- ButtonSl = LeftButtonSl,
- ButtonSr = LeftButtonSr,
- ButtonZl = ButtonZl
- },
- RightJoycon = new RightJoyconCommonConfig<GamepadInputId>
- {
- ButtonA = ButtonA,
- ButtonB = ButtonB,
- ButtonX = ButtonX,
- ButtonY = ButtonY,
- ButtonPlus = ButtonPlus,
- ButtonSl = RightButtonSl,
- ButtonSr = RightButtonSr,
- ButtonR = ButtonR,
- ButtonZr = ButtonZr
- },
- LeftJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
- {
- Joystick = LeftJoystick,
- InvertStickX = LeftInvertStickX,
- InvertStickY = LeftInvertStickY,
- Rotate90CW = LeftRotate90,
- StickButton = LeftStickButton
- },
- RightJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
- {
- Joystick = RightJoystick,
- InvertStickX = RightInvertStickX,
- InvertStickY = RightInvertStickY,
- Rotate90CW = RightRotate90,
- StickButton = RightStickButton
- },
- Rumble = new RumbleConfigController
- {
- EnableRumble = EnableRumble,
- WeakRumble = WeakRumble,
- StrongRumble = StrongRumble
- },
- Version = InputConfig.CurrentVersion,
- DeadzoneLeft = DeadzoneLeft,
- DeadzoneRight = DeadzoneRight,
- RangeLeft = RangeLeft,
- RangeRight = RangeRight,
- TriggerThreshold = TriggerThreshold
- };
-
- if (EnableCemuHookMotion)
- {
- config.Motion = new CemuHookMotionConfigController
- {
- EnableMotion = EnableMotion,
- MotionBackend = MotionInputBackendType.CemuHook,
- GyroDeadzone = GyroDeadzone,
- Sensitivity = Sensitivity,
- DsuServerHost = DsuServerHost,
- DsuServerPort = DsuServerPort,
- Slot = Slot,
- AltSlot = AltSlot,
- MirrorInput = MirrorInput
- };
- }
- else
- {
- config.Motion = new MotionConfigController
- {
- EnableMotion = EnableMotion,
- MotionBackend = MotionInputBackendType.GamepadDriver,
- GyroDeadzone = GyroDeadzone,
- Sensitivity = Sensitivity
- };
- }
-
- return config;
- }
- }
-}
diff --git a/src/Ryujinx.Ava/UI/Models/Input/KeyboardInputConfig.cs b/src/Ryujinx.Ava/UI/Models/Input/KeyboardInputConfig.cs
deleted file mode 100644
index 02956521..00000000
--- a/src/Ryujinx.Ava/UI/Models/Input/KeyboardInputConfig.cs
+++ /dev/null
@@ -1,422 +0,0 @@
-using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.Common.Configuration.Hid;
-using Ryujinx.Common.Configuration.Hid.Keyboard;
-
-namespace Ryujinx.Ava.UI.Models.Input
-{
- public class KeyboardInputConfig : BaseModel
- {
- public string Id { get; set; }
- public ControllerType ControllerType { get; set; }
- public PlayerIndex PlayerIndex { get; set; }
-
- private Key _leftStickUp;
- public Key LeftStickUp
- {
- get => _leftStickUp;
- set
- {
- _leftStickUp = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftStickDown;
- public Key LeftStickDown
- {
- get => _leftStickDown;
- set
- {
- _leftStickDown = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftStickLeft;
- public Key LeftStickLeft
- {
- get => _leftStickLeft;
- set
- {
- _leftStickLeft = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftStickRight;
- public Key LeftStickRight
- {
- get => _leftStickRight;
- set
- {
- _leftStickRight = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftStickButton;
- public Key LeftStickButton
- {
- get => _leftStickButton;
- set
- {
- _leftStickButton = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightStickUp;
- public Key RightStickUp
- {
- get => _rightStickUp;
- set
- {
- _rightStickUp = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightStickDown;
- public Key RightStickDown
- {
- get => _rightStickDown;
- set
- {
- _rightStickDown = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightStickLeft;
- public Key RightStickLeft
- {
- get => _rightStickLeft;
- set
- {
- _rightStickLeft = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightStickRight;
- public Key RightStickRight
- {
- get => _rightStickRight;
- set
- {
- _rightStickRight = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightStickButton;
- public Key RightStickButton
- {
- get => _rightStickButton;
- set
- {
- _rightStickButton = value;
- OnPropertyChanged();
- }
- }
-
- private Key _dpadUp;
- public Key DpadUp
- {
- get => _dpadUp;
- set
- {
- _dpadUp = value;
- OnPropertyChanged();
- }
- }
-
- private Key _dpadDown;
- public Key DpadDown
- {
- get => _dpadDown;
- set
- {
- _dpadDown = value;
- OnPropertyChanged();
- }
- }
-
- private Key _dpadLeft;
- public Key DpadLeft
- {
- get => _dpadLeft;
- set
- {
- _dpadLeft = value;
- OnPropertyChanged();
- }
- }
-
- private Key _dpadRight;
- public Key DpadRight
- {
- get => _dpadRight;
- set
- {
- _dpadRight = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonL;
- public Key ButtonL
- {
- get => _buttonL;
- set
- {
- _buttonL = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonMinus;
- public Key ButtonMinus
- {
- get => _buttonMinus;
- set
- {
- _buttonMinus = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftButtonSl;
- public Key LeftButtonSl
- {
- get => _leftButtonSl;
- set
- {
- _leftButtonSl = value;
- OnPropertyChanged();
- }
- }
-
- private Key _leftButtonSr;
- public Key LeftButtonSr
- {
- get => _leftButtonSr;
- set
- {
- _leftButtonSr = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonZl;
- public Key ButtonZl
- {
- get => _buttonZl;
- set
- {
- _buttonZl = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonA;
- public Key ButtonA
- {
- get => _buttonA;
- set
- {
- _buttonA = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonB;
- public Key ButtonB
- {
- get => _buttonB;
- set
- {
- _buttonB = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonX;
- public Key ButtonX
- {
- get => _buttonX;
- set
- {
- _buttonX = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonY;
- public Key ButtonY
- {
- get => _buttonY;
- set
- {
- _buttonY = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonR;
- public Key ButtonR
- {
- get => _buttonR;
- set
- {
- _buttonR = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonPlus;
- public Key ButtonPlus
- {
- get => _buttonPlus;
- set
- {
- _buttonPlus = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightButtonSl;
- public Key RightButtonSl
- {
- get => _rightButtonSl;
- set
- {
- _rightButtonSl = value;
- OnPropertyChanged();
- }
- }
-
- private Key _rightButtonSr;
- public Key RightButtonSr
- {
- get => _rightButtonSr;
- set
- {
- _rightButtonSr = value;
- OnPropertyChanged();
- }
- }
-
- private Key _buttonZr;
- public Key ButtonZr
- {
- get => _buttonZr;
- set
- {
- _buttonZr = value;
- OnPropertyChanged();
- }
- }
-
- public KeyboardInputConfig(InputConfig config)
- {
- if (config != null)
- {
- Id = config.Id;
- ControllerType = config.ControllerType;
- PlayerIndex = config.PlayerIndex;
-
- if (config is not StandardKeyboardInputConfig keyboardConfig)
- {
- return;
- }
-
- LeftStickUp = keyboardConfig.LeftJoyconStick.StickUp;
- LeftStickDown = keyboardConfig.LeftJoyconStick.StickDown;
- LeftStickLeft = keyboardConfig.LeftJoyconStick.StickLeft;
- LeftStickRight = keyboardConfig.LeftJoyconStick.StickRight;
- LeftStickButton = keyboardConfig.LeftJoyconStick.StickButton;
-
- RightStickUp = keyboardConfig.RightJoyconStick.StickUp;
- RightStickDown = keyboardConfig.RightJoyconStick.StickDown;
- RightStickLeft = keyboardConfig.RightJoyconStick.StickLeft;
- RightStickRight = keyboardConfig.RightJoyconStick.StickRight;
- RightStickButton = keyboardConfig.RightJoyconStick.StickButton;
-
- DpadUp = keyboardConfig.LeftJoycon.DpadUp;
- DpadDown = keyboardConfig.LeftJoycon.DpadDown;
- DpadLeft = keyboardConfig.LeftJoycon.DpadLeft;
- DpadRight = keyboardConfig.LeftJoycon.DpadRight;
- ButtonL = keyboardConfig.LeftJoycon.ButtonL;
- ButtonMinus = keyboardConfig.LeftJoycon.ButtonMinus;
- LeftButtonSl = keyboardConfig.LeftJoycon.ButtonSl;
- LeftButtonSr = keyboardConfig.LeftJoycon.ButtonSr;
- ButtonZl = keyboardConfig.LeftJoycon.ButtonZl;
-
- ButtonA = keyboardConfig.RightJoycon.ButtonA;
- ButtonB = keyboardConfig.RightJoycon.ButtonB;
- ButtonX = keyboardConfig.RightJoycon.ButtonX;
- ButtonY = keyboardConfig.RightJoycon.ButtonY;
- ButtonR = keyboardConfig.RightJoycon.ButtonR;
- ButtonPlus = keyboardConfig.RightJoycon.ButtonPlus;
- RightButtonSl = keyboardConfig.RightJoycon.ButtonSl;
- RightButtonSr = keyboardConfig.RightJoycon.ButtonSr;
- ButtonZr = keyboardConfig.RightJoycon.ButtonZr;
- }
- }
-
- public InputConfig GetConfig()
- {
- var config = new StandardKeyboardInputConfig
- {
- Id = Id,
- Backend = InputBackendType.WindowKeyboard,
- PlayerIndex = PlayerIndex,
- ControllerType = ControllerType,
- LeftJoycon = new LeftJoyconCommonConfig<Key>
- {
- DpadUp = DpadUp,
- DpadDown = DpadDown,
- DpadLeft = DpadLeft,
- DpadRight = DpadRight,
- ButtonL = ButtonL,
- ButtonMinus = ButtonMinus,
- ButtonZl = ButtonZl,
- ButtonSl = LeftButtonSl,
- ButtonSr = LeftButtonSr
- },
- RightJoycon = new RightJoyconCommonConfig<Key>
- {
- ButtonA = ButtonA,
- ButtonB = ButtonB,
- ButtonX = ButtonX,
- ButtonY = ButtonY,
- ButtonPlus = ButtonPlus,
- ButtonSl = RightButtonSl,
- ButtonSr = RightButtonSr,
- ButtonR = ButtonR,
- ButtonZr = ButtonZr
- },
- LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
- {
- StickUp = LeftStickUp,
- StickDown = LeftStickDown,
- StickRight = LeftStickRight,
- StickLeft = LeftStickLeft,
- StickButton = LeftStickButton
- },
- RightJoyconStick = new JoyconConfigKeyboardStick<Key>
- {
- StickUp = RightStickUp,
- StickDown = RightStickDown,
- StickLeft = RightStickLeft,
- StickRight = RightStickRight,
- StickButton = RightStickButton
- },
- Version = InputConfig.CurrentVersion
- };
-
- return config;
- }
- }
-}
diff --git a/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs b/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs
new file mode 100644
index 00000000..f1352c6d
--- /dev/null
+++ b/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs
@@ -0,0 +1,456 @@
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Common.Configuration.Hid;
+using Ryujinx.Common.Configuration.Hid.Controller;
+using Ryujinx.Common.Configuration.Hid.Controller.Motion;
+using Ryujinx.Common.Configuration.Hid.Keyboard;
+using System;
+
+namespace Ryujinx.Ava.UI.Models
+{
+ internal class InputConfiguration<TKey, TStick> : BaseModel
+ {
+ private float _deadzoneRight;
+ private float _triggerThreshold;
+ private float _deadzoneLeft;
+ private double _gyroDeadzone;
+ private int _sensitivity;
+ private bool _enableMotion;
+ private float _weakRumble;
+ private float _strongRumble;
+ private float _rangeLeft;
+ private float _rangeRight;
+
+ public InputBackendType Backend { get; set; }
+
+ /// <summary>
+ /// Controller id
+ /// </summary>
+ public string Id { get; set; }
+
+ /// <summary>
+ /// Controller's Type
+ /// </summary>
+ public ControllerType ControllerType { get; set; }
+
+ /// <summary>
+ /// Player's Index for the controller
+ /// </summary>
+ public PlayerIndex PlayerIndex { get; set; }
+
+ public TStick LeftJoystick { get; set; }
+ public bool LeftInvertStickX { get; set; }
+ public bool LeftInvertStickY { get; set; }
+ public bool RightRotate90 { get; set; }
+ public TKey LeftControllerStickButton { get; set; }
+
+ public TStick RightJoystick { get; set; }
+ public bool RightInvertStickX { get; set; }
+ public bool RightInvertStickY { get; set; }
+ public bool LeftRotate90 { get; set; }
+ public TKey RightControllerStickButton { get; set; }
+
+ public float DeadzoneLeft
+ {
+ get => _deadzoneLeft;
+ set
+ {
+ _deadzoneLeft = MathF.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public float RangeLeft
+ {
+ get => _rangeLeft;
+ set
+ {
+ _rangeLeft = MathF.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public float DeadzoneRight
+ {
+ get => _deadzoneRight;
+ set
+ {
+ _deadzoneRight = MathF.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public float RangeRight
+ {
+ get => _rangeRight;
+ set
+ {
+ _rangeRight = MathF.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public float TriggerThreshold
+ {
+ get => _triggerThreshold;
+ set
+ {
+ _triggerThreshold = MathF.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public MotionInputBackendType MotionBackend { get; set; }
+
+ public TKey ButtonMinus { get; set; }
+ public TKey ButtonL { get; set; }
+ public TKey ButtonZl { get; set; }
+ public TKey LeftButtonSl { get; set; }
+ public TKey LeftButtonSr { get; set; }
+ public TKey DpadUp { get; set; }
+ public TKey DpadDown { get; set; }
+ public TKey DpadLeft { get; set; }
+ public TKey DpadRight { get; set; }
+
+ public TKey ButtonPlus { get; set; }
+ public TKey ButtonR { get; set; }
+ public TKey ButtonZr { get; set; }
+ public TKey RightButtonSl { get; set; }
+ public TKey RightButtonSr { get; set; }
+ public TKey ButtonX { get; set; }
+ public TKey ButtonB { get; set; }
+ public TKey ButtonY { get; set; }
+ public TKey ButtonA { get; set; }
+
+ public TKey LeftStickUp { get; set; }
+ public TKey LeftStickDown { get; set; }
+ public TKey LeftStickLeft { get; set; }
+ public TKey LeftStickRight { get; set; }
+ public TKey LeftKeyboardStickButton { get; set; }
+
+ public TKey RightStickUp { get; set; }
+ public TKey RightStickDown { get; set; }
+ public TKey RightStickLeft { get; set; }
+ public TKey RightStickRight { get; set; }
+ public TKey RightKeyboardStickButton { get; set; }
+
+ public int Sensitivity
+ {
+ get => _sensitivity;
+ set
+ {
+ _sensitivity = value;
+
+ OnPropertyChanged();
+ }
+ }
+
+ public double GyroDeadzone
+ {
+ get => _gyroDeadzone;
+ set
+ {
+ _gyroDeadzone = Math.Round(value, 3);
+
+ OnPropertyChanged();
+ }
+ }
+
+ public bool EnableMotion
+ {
+ get => _enableMotion; set
+ {
+ _enableMotion = value;
+
+ OnPropertyChanged();
+ }
+ }
+
+ public bool EnableCemuHookMotion { get; set; }
+ public int Slot { get; set; }
+ public int AltSlot { get; set; }
+ public bool MirrorInput { get; set; }
+ public string DsuServerHost { get; set; }
+ public int DsuServerPort { get; set; }
+
+ public bool EnableRumble { get; set; }
+ public float WeakRumble
+ {
+ get => _weakRumble; set
+ {
+ _weakRumble = value;
+
+ OnPropertyChanged();
+ }
+ }
+ public float StrongRumble
+ {
+ get => _strongRumble; set
+ {
+ _strongRumble = value;
+
+ OnPropertyChanged();
+ }
+ }
+
+ public InputConfiguration(InputConfig config)
+ {
+ if (config != null)
+ {
+ Backend = config.Backend;
+ Id = config.Id;
+ ControllerType = config.ControllerType;
+ PlayerIndex = config.PlayerIndex;
+
+ if (config is StandardKeyboardInputConfig keyboardConfig)
+ {
+ LeftStickUp = (TKey)(object)keyboardConfig.LeftJoyconStick.StickUp;
+ LeftStickDown = (TKey)(object)keyboardConfig.LeftJoyconStick.StickDown;
+ LeftStickLeft = (TKey)(object)keyboardConfig.LeftJoyconStick.StickLeft;
+ LeftStickRight = (TKey)(object)keyboardConfig.LeftJoyconStick.StickRight;
+ LeftKeyboardStickButton = (TKey)(object)keyboardConfig.LeftJoyconStick.StickButton;
+
+ RightStickUp = (TKey)(object)keyboardConfig.RightJoyconStick.StickUp;
+ RightStickDown = (TKey)(object)keyboardConfig.RightJoyconStick.StickDown;
+ RightStickLeft = (TKey)(object)keyboardConfig.RightJoyconStick.StickLeft;
+ RightStickRight = (TKey)(object)keyboardConfig.RightJoyconStick.StickRight;
+ RightKeyboardStickButton = (TKey)(object)keyboardConfig.RightJoyconStick.StickButton;
+
+ ButtonA = (TKey)(object)keyboardConfig.RightJoycon.ButtonA;
+ ButtonB = (TKey)(object)keyboardConfig.RightJoycon.ButtonB;
+ ButtonX = (TKey)(object)keyboardConfig.RightJoycon.ButtonX;
+ ButtonY = (TKey)(object)keyboardConfig.RightJoycon.ButtonY;
+ ButtonR = (TKey)(object)keyboardConfig.RightJoycon.ButtonR;
+ RightButtonSl = (TKey)(object)keyboardConfig.RightJoycon.ButtonSl;
+ RightButtonSr = (TKey)(object)keyboardConfig.RightJoycon.ButtonSr;
+ ButtonZr = (TKey)(object)keyboardConfig.RightJoycon.ButtonZr;
+ ButtonPlus = (TKey)(object)keyboardConfig.RightJoycon.ButtonPlus;
+
+ DpadUp = (TKey)(object)keyboardConfig.LeftJoycon.DpadUp;
+ DpadDown = (TKey)(object)keyboardConfig.LeftJoycon.DpadDown;
+ DpadLeft = (TKey)(object)keyboardConfig.LeftJoycon.DpadLeft;
+ DpadRight = (TKey)(object)keyboardConfig.LeftJoycon.DpadRight;
+ ButtonMinus = (TKey)(object)keyboardConfig.LeftJoycon.ButtonMinus;
+ LeftButtonSl = (TKey)(object)keyboardConfig.LeftJoycon.ButtonSl;
+ LeftButtonSr = (TKey)(object)keyboardConfig.LeftJoycon.ButtonSr;
+ ButtonZl = (TKey)(object)keyboardConfig.LeftJoycon.ButtonZl;
+ ButtonL = (TKey)(object)keyboardConfig.LeftJoycon.ButtonL;
+ }
+ else if (config is StandardControllerInputConfig controllerConfig)
+ {
+ LeftJoystick = (TStick)(object)controllerConfig.LeftJoyconStick.Joystick;
+ LeftInvertStickX = controllerConfig.LeftJoyconStick.InvertStickX;
+ LeftInvertStickY = controllerConfig.LeftJoyconStick.InvertStickY;
+ LeftRotate90 = controllerConfig.LeftJoyconStick.Rotate90CW;
+ LeftControllerStickButton = (TKey)(object)controllerConfig.LeftJoyconStick.StickButton;
+
+ RightJoystick = (TStick)(object)controllerConfig.RightJoyconStick.Joystick;
+ RightInvertStickX = controllerConfig.RightJoyconStick.InvertStickX;
+ RightInvertStickY = controllerConfig.RightJoyconStick.InvertStickY;
+ RightRotate90 = controllerConfig.RightJoyconStick.Rotate90CW;
+ RightControllerStickButton = (TKey)(object)controllerConfig.RightJoyconStick.StickButton;
+
+ ButtonA = (TKey)(object)controllerConfig.RightJoycon.ButtonA;
+ ButtonB = (TKey)(object)controllerConfig.RightJoycon.ButtonB;
+ ButtonX = (TKey)(object)controllerConfig.RightJoycon.ButtonX;
+ ButtonY = (TKey)(object)controllerConfig.RightJoycon.ButtonY;
+ ButtonR = (TKey)(object)controllerConfig.RightJoycon.ButtonR;
+ RightButtonSl = (TKey)(object)controllerConfig.RightJoycon.ButtonSl;
+ RightButtonSr = (TKey)(object)controllerConfig.RightJoycon.ButtonSr;
+ ButtonZr = (TKey)(object)controllerConfig.RightJoycon.ButtonZr;
+ ButtonPlus = (TKey)(object)controllerConfig.RightJoycon.ButtonPlus;
+
+ DpadUp = (TKey)(object)controllerConfig.LeftJoycon.DpadUp;
+ DpadDown = (TKey)(object)controllerConfig.LeftJoycon.DpadDown;
+ DpadLeft = (TKey)(object)controllerConfig.LeftJoycon.DpadLeft;
+ DpadRight = (TKey)(object)controllerConfig.LeftJoycon.DpadRight;
+ ButtonMinus = (TKey)(object)controllerConfig.LeftJoycon.ButtonMinus;
+ LeftButtonSl = (TKey)(object)controllerConfig.LeftJoycon.ButtonSl;
+ LeftButtonSr = (TKey)(object)controllerConfig.LeftJoycon.ButtonSr;
+ ButtonZl = (TKey)(object)controllerConfig.LeftJoycon.ButtonZl;
+ ButtonL = (TKey)(object)controllerConfig.LeftJoycon.ButtonL;
+
+ DeadzoneLeft = controllerConfig.DeadzoneLeft;
+ DeadzoneRight = controllerConfig.DeadzoneRight;
+ RangeLeft = controllerConfig.RangeLeft;
+ RangeRight = controllerConfig.RangeRight;
+ TriggerThreshold = controllerConfig.TriggerThreshold;
+
+ if (controllerConfig.Motion != null)
+ {
+ EnableMotion = controllerConfig.Motion.EnableMotion;
+ MotionBackend = controllerConfig.Motion.MotionBackend;
+ GyroDeadzone = controllerConfig.Motion.GyroDeadzone;
+ Sensitivity = controllerConfig.Motion.Sensitivity;
+
+ if (controllerConfig.Motion is CemuHookMotionConfigController cemuHook)
+ {
+ EnableCemuHookMotion = true;
+ DsuServerHost = cemuHook.DsuServerHost;
+ DsuServerPort = cemuHook.DsuServerPort;
+ Slot = cemuHook.Slot;
+ AltSlot = cemuHook.AltSlot;
+ MirrorInput = cemuHook.MirrorInput;
+ }
+
+ if (controllerConfig.Rumble != null)
+ {
+ EnableRumble = controllerConfig.Rumble.EnableRumble;
+ WeakRumble = controllerConfig.Rumble.WeakRumble;
+ StrongRumble = controllerConfig.Rumble.StrongRumble;
+ }
+ }
+ }
+ }
+ }
+
+ public InputConfiguration()
+ {
+ }
+
+ public InputConfig GetConfig()
+ {
+ if (Backend == InputBackendType.WindowKeyboard)
+ {
+ return new StandardKeyboardInputConfig
+ {
+ Id = Id,
+ Backend = Backend,
+ PlayerIndex = PlayerIndex,
+ ControllerType = ControllerType,
+ LeftJoycon = new LeftJoyconCommonConfig<Key>
+ {
+ DpadUp = (Key)(object)DpadUp,
+ DpadDown = (Key)(object)DpadDown,
+ DpadLeft = (Key)(object)DpadLeft,
+ DpadRight = (Key)(object)DpadRight,
+ ButtonL = (Key)(object)ButtonL,
+ ButtonZl = (Key)(object)ButtonZl,
+ ButtonSl = (Key)(object)LeftButtonSl,
+ ButtonSr = (Key)(object)LeftButtonSr,
+ ButtonMinus = (Key)(object)ButtonMinus,
+ },
+ RightJoycon = new RightJoyconCommonConfig<Key>
+ {
+ ButtonA = (Key)(object)ButtonA,
+ ButtonB = (Key)(object)ButtonB,
+ ButtonX = (Key)(object)ButtonX,
+ ButtonY = (Key)(object)ButtonY,
+ ButtonPlus = (Key)(object)ButtonPlus,
+ ButtonSl = (Key)(object)RightButtonSl,
+ ButtonSr = (Key)(object)RightButtonSr,
+ ButtonR = (Key)(object)ButtonR,
+ ButtonZr = (Key)(object)ButtonZr,
+ },
+ LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
+ {
+ StickUp = (Key)(object)LeftStickUp,
+ StickDown = (Key)(object)LeftStickDown,
+ StickRight = (Key)(object)LeftStickRight,
+ StickLeft = (Key)(object)LeftStickLeft,
+ StickButton = (Key)(object)LeftKeyboardStickButton,
+ },
+ RightJoyconStick = new JoyconConfigKeyboardStick<Key>
+ {
+ StickUp = (Key)(object)RightStickUp,
+ StickDown = (Key)(object)RightStickDown,
+ StickLeft = (Key)(object)RightStickLeft,
+ StickRight = (Key)(object)RightStickRight,
+ StickButton = (Key)(object)RightKeyboardStickButton,
+ },
+ Version = InputConfig.CurrentVersion,
+ };
+
+ }
+
+ if (Backend == InputBackendType.GamepadSDL2)
+ {
+ var config = new StandardControllerInputConfig
+ {
+ Id = Id,
+ Backend = Backend,
+ PlayerIndex = PlayerIndex,
+ ControllerType = ControllerType,
+ LeftJoycon = new LeftJoyconCommonConfig<GamepadInputId>
+ {
+ DpadUp = (GamepadInputId)(object)DpadUp,
+ DpadDown = (GamepadInputId)(object)DpadDown,
+ DpadLeft = (GamepadInputId)(object)DpadLeft,
+ DpadRight = (GamepadInputId)(object)DpadRight,
+ ButtonL = (GamepadInputId)(object)ButtonL,
+ ButtonZl = (GamepadInputId)(object)ButtonZl,
+ ButtonSl = (GamepadInputId)(object)LeftButtonSl,
+ ButtonSr = (GamepadInputId)(object)LeftButtonSr,
+ ButtonMinus = (GamepadInputId)(object)ButtonMinus,
+ },
+ RightJoycon = new RightJoyconCommonConfig<GamepadInputId>
+ {
+ ButtonA = (GamepadInputId)(object)ButtonA,
+ ButtonB = (GamepadInputId)(object)ButtonB,
+ ButtonX = (GamepadInputId)(object)ButtonX,
+ ButtonY = (GamepadInputId)(object)ButtonY,
+ ButtonPlus = (GamepadInputId)(object)ButtonPlus,
+ ButtonSl = (GamepadInputId)(object)RightButtonSl,
+ ButtonSr = (GamepadInputId)(object)RightButtonSr,
+ ButtonR = (GamepadInputId)(object)ButtonR,
+ ButtonZr = (GamepadInputId)(object)ButtonZr,
+ },
+ LeftJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
+ {
+ Joystick = (StickInputId)(object)LeftJoystick,
+ InvertStickX = LeftInvertStickX,
+ InvertStickY = LeftInvertStickY,
+ Rotate90CW = LeftRotate90,
+ StickButton = (GamepadInputId)(object)LeftControllerStickButton,
+ },
+ RightJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
+ {
+ Joystick = (StickInputId)(object)RightJoystick,
+ InvertStickX = RightInvertStickX,
+ InvertStickY = RightInvertStickY,
+ Rotate90CW = RightRotate90,
+ StickButton = (GamepadInputId)(object)RightControllerStickButton,
+ },
+ Rumble = new RumbleConfigController
+ {
+ EnableRumble = EnableRumble,
+ WeakRumble = WeakRumble,
+ StrongRumble = StrongRumble,
+ },
+ Version = InputConfig.CurrentVersion,
+ DeadzoneLeft = DeadzoneLeft,
+ DeadzoneRight = DeadzoneRight,
+ RangeLeft = RangeLeft,
+ RangeRight = RangeRight,
+ TriggerThreshold = TriggerThreshold,
+ Motion = EnableCemuHookMotion
+ ? new CemuHookMotionConfigController
+ {
+ DsuServerHost = DsuServerHost,
+ DsuServerPort = DsuServerPort,
+ Slot = Slot,
+ AltSlot = AltSlot,
+ MirrorInput = MirrorInput,
+ MotionBackend = MotionInputBackendType.CemuHook,
+ }
+ : new StandardMotionConfigController
+ {
+ MotionBackend = MotionInputBackendType.GamepadDriver,
+ },
+ };
+
+ config.Motion.Sensitivity = Sensitivity;
+ config.Motion.EnableMotion = EnableMotion;
+ config.Motion.GyroDeadzone = GyroDeadzone;
+
+ return config;
+ }
+
+ return null;
+ }
+ }
+}