aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /src/Ryujinx.Ava/UI/Models/InputConfiguration.cs
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'src/Ryujinx.Ava/UI/Models/InputConfiguration.cs')
-rw-r--r--src/Ryujinx.Ava/UI/Models/InputConfiguration.cs456
1 files changed, 456 insertions, 0 deletions
diff --git a/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs b/src/Ryujinx.Ava/UI/Models/InputConfiguration.cs
new file mode 100644
index 00000000..2acd716b
--- /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<Key, Stick> : 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 Stick LeftJoystick { get; set; }
+ public bool LeftInvertStickX { get; set; }
+ public bool LeftInvertStickY { get; set; }
+ public bool RightRotate90 { get; set; }
+ public Key LeftControllerStickButton { get; set; }
+
+ public Stick RightJoystick { get; set; }
+ public bool RightInvertStickX { get; set; }
+ public bool RightInvertStickY { get; set; }
+ public bool LeftRotate90 { get; set; }
+ public Key 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 Key ButtonMinus { get; set; }
+ public Key ButtonL { get; set; }
+ public Key ButtonZl { get; set; }
+ public Key LeftButtonSl { get; set; }
+ public Key LeftButtonSr { get; set; }
+ public Key DpadUp { get; set; }
+ public Key DpadDown { get; set; }
+ public Key DpadLeft { get; set; }
+ public Key DpadRight { get; set; }
+
+ public Key ButtonPlus { get; set; }
+ public Key ButtonR { get; set; }
+ public Key ButtonZr { get; set; }
+ public Key RightButtonSl { get; set; }
+ public Key RightButtonSr { get; set; }
+ public Key ButtonX { get; set; }
+ public Key ButtonB { get; set; }
+ public Key ButtonY { get; set; }
+ public Key ButtonA { get; set; }
+
+
+ public Key LeftStickUp { get; set; }
+ public Key LeftStickDown { get; set; }
+ public Key LeftStickLeft { get; set; }
+ public Key LeftStickRight { get; set; }
+ public Key LeftKeyboardStickButton { get; set; }
+
+ public Key RightStickUp { get; set; }
+ public Key RightStickDown { get; set; }
+ public Key RightStickLeft { get; set; }
+ public Key RightStickRight { get; set; }
+ public Key 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 = (Key)(object)keyboardConfig.LeftJoyconStick.StickUp;
+ LeftStickDown = (Key)(object)keyboardConfig.LeftJoyconStick.StickDown;
+ LeftStickLeft = (Key)(object)keyboardConfig.LeftJoyconStick.StickLeft;
+ LeftStickRight = (Key)(object)keyboardConfig.LeftJoyconStick.StickRight;
+ LeftKeyboardStickButton = (Key)(object)keyboardConfig.LeftJoyconStick.StickButton;
+
+ RightStickUp = (Key)(object)keyboardConfig.RightJoyconStick.StickUp;
+ RightStickDown = (Key)(object)keyboardConfig.RightJoyconStick.StickDown;
+ RightStickLeft = (Key)(object)keyboardConfig.RightJoyconStick.StickLeft;
+ RightStickRight = (Key)(object)keyboardConfig.RightJoyconStick.StickRight;
+ RightKeyboardStickButton = (Key)(object)keyboardConfig.RightJoyconStick.StickButton;
+
+ ButtonA = (Key)(object)keyboardConfig.RightJoycon.ButtonA;
+ ButtonB = (Key)(object)keyboardConfig.RightJoycon.ButtonB;
+ ButtonX = (Key)(object)keyboardConfig.RightJoycon.ButtonX;
+ ButtonY = (Key)(object)keyboardConfig.RightJoycon.ButtonY;
+ ButtonR = (Key)(object)keyboardConfig.RightJoycon.ButtonR;
+ RightButtonSl = (Key)(object)keyboardConfig.RightJoycon.ButtonSl;
+ RightButtonSr = (Key)(object)keyboardConfig.RightJoycon.ButtonSr;
+ ButtonZr = (Key)(object)keyboardConfig.RightJoycon.ButtonZr;
+ ButtonPlus = (Key)(object)keyboardConfig.RightJoycon.ButtonPlus;
+
+ DpadUp = (Key)(object)keyboardConfig.LeftJoycon.DpadUp;
+ DpadDown = (Key)(object)keyboardConfig.LeftJoycon.DpadDown;
+ DpadLeft = (Key)(object)keyboardConfig.LeftJoycon.DpadLeft;
+ DpadRight = (Key)(object)keyboardConfig.LeftJoycon.DpadRight;
+ ButtonMinus = (Key)(object)keyboardConfig.LeftJoycon.ButtonMinus;
+ LeftButtonSl = (Key)(object)keyboardConfig.LeftJoycon.ButtonSl;
+ LeftButtonSr = (Key)(object)keyboardConfig.LeftJoycon.ButtonSr;
+ ButtonZl = (Key)(object)keyboardConfig.LeftJoycon.ButtonZl;
+ ButtonL = (Key)(object)keyboardConfig.LeftJoycon.ButtonL;
+ }
+ else if (config is StandardControllerInputConfig controllerConfig)
+ {
+ LeftJoystick = (Stick)(object)controllerConfig.LeftJoyconStick.Joystick;
+ LeftInvertStickX = controllerConfig.LeftJoyconStick.InvertStickX;
+ LeftInvertStickY = controllerConfig.LeftJoyconStick.InvertStickY;
+ LeftRotate90 = controllerConfig.LeftJoyconStick.Rotate90CW;
+ LeftControllerStickButton = (Key)(object)controllerConfig.LeftJoyconStick.StickButton;
+
+ RightJoystick = (Stick)(object)controllerConfig.RightJoyconStick.Joystick;
+ RightInvertStickX = controllerConfig.RightJoyconStick.InvertStickX;
+ RightInvertStickY = controllerConfig.RightJoyconStick.InvertStickY;
+ RightRotate90 = controllerConfig.RightJoyconStick.Rotate90CW;
+ RightControllerStickButton = (Key)(object)controllerConfig.RightJoyconStick.StickButton;
+
+ ButtonA = (Key)(object)controllerConfig.RightJoycon.ButtonA;
+ ButtonB = (Key)(object)controllerConfig.RightJoycon.ButtonB;
+ ButtonX = (Key)(object)controllerConfig.RightJoycon.ButtonX;
+ ButtonY = (Key)(object)controllerConfig.RightJoycon.ButtonY;
+ ButtonR = (Key)(object)controllerConfig.RightJoycon.ButtonR;
+ RightButtonSl = (Key)(object)controllerConfig.RightJoycon.ButtonSl;
+ RightButtonSr = (Key)(object)controllerConfig.RightJoycon.ButtonSr;
+ ButtonZr = (Key)(object)controllerConfig.RightJoycon.ButtonZr;
+ ButtonPlus = (Key)(object)controllerConfig.RightJoycon.ButtonPlus;
+
+ DpadUp = (Key)(object)controllerConfig.LeftJoycon.DpadUp;
+ DpadDown = (Key)(object)controllerConfig.LeftJoycon.DpadDown;
+ DpadLeft = (Key)(object)controllerConfig.LeftJoycon.DpadLeft;
+ DpadRight = (Key)(object)controllerConfig.LeftJoycon.DpadRight;
+ ButtonMinus = (Key)(object)controllerConfig.LeftJoycon.ButtonMinus;
+ LeftButtonSl = (Key)(object)controllerConfig.LeftJoycon.ButtonSl;
+ LeftButtonSr = (Key)(object)controllerConfig.LeftJoycon.ButtonSr;
+ ButtonZl = (Key)(object)controllerConfig.LeftJoycon.ButtonZl;
+ ButtonL = (Key)(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<Ryujinx.Common.Configuration.Hid.Key>()
+ {
+ DpadUp = (Ryujinx.Common.Configuration.Hid.Key)(object)DpadUp,
+ DpadDown = (Ryujinx.Common.Configuration.Hid.Key)(object)DpadDown,
+ DpadLeft = (Ryujinx.Common.Configuration.Hid.Key)(object)DpadLeft,
+ DpadRight = (Ryujinx.Common.Configuration.Hid.Key)(object)DpadRight,
+ ButtonL = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonL,
+ ButtonZl = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonZl,
+ ButtonSl = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftButtonSl,
+ ButtonSr = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftButtonSr,
+ ButtonMinus = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonMinus
+ },
+ RightJoycon = new RightJoyconCommonConfig<Ryujinx.Common.Configuration.Hid.Key>()
+ {
+ ButtonA = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonA,
+ ButtonB = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonB,
+ ButtonX = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonX,
+ ButtonY = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonY,
+ ButtonPlus = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonPlus,
+ ButtonSl = (Ryujinx.Common.Configuration.Hid.Key)(object)RightButtonSl,
+ ButtonSr = (Ryujinx.Common.Configuration.Hid.Key)(object)RightButtonSr,
+ ButtonR = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonR,
+ ButtonZr = (Ryujinx.Common.Configuration.Hid.Key)(object)ButtonZr
+ },
+ LeftJoyconStick = new JoyconConfigKeyboardStick<Ryujinx.Common.Configuration.Hid.Key>()
+ {
+ StickUp = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftStickUp,
+ StickDown = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftStickDown,
+ StickRight = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftStickRight,
+ StickLeft = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftStickLeft,
+ StickButton = (Ryujinx.Common.Configuration.Hid.Key)(object)LeftKeyboardStickButton
+ },
+ RightJoyconStick = new JoyconConfigKeyboardStick<Ryujinx.Common.Configuration.Hid.Key>()
+ {
+ StickUp = (Ryujinx.Common.Configuration.Hid.Key)(object)RightStickUp,
+ StickDown = (Ryujinx.Common.Configuration.Hid.Key)(object)RightStickDown,
+ StickLeft = (Ryujinx.Common.Configuration.Hid.Key)(object)RightStickLeft,
+ StickRight = (Ryujinx.Common.Configuration.Hid.Key)(object)RightStickRight,
+ StickButton = (Ryujinx.Common.Configuration.Hid.Key)(object)RightKeyboardStickButton
+ },
+ Version = InputConfig.CurrentVersion
+ };
+
+ }
+ else 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;
+ }
+ }
+} \ No newline at end of file