From bed516bfda2b558c894e80a0d71f457c6e94a62f Mon Sep 17 00:00:00 2001 From: darko1979 Date: Sat, 12 Mar 2022 18:23:48 +0100 Subject: [PATCH] Implement rotate stick 90 degrees clockwise (#3084) * Implement swapping sticks * Rotate 90 degrees clockwise Co-authored-by: matesic.darko@gmail.com --- .../Controller/JoyconConfigControllerStick.cs | 1 + Ryujinx.Headless.SDL2/Program.cs | 2 ++ Ryujinx.Input.SDL2/SDL2Gamepad.cs | 8 ++++++ Ryujinx/Ui/Windows/ControllerWindow.cs | 8 ++++++ Ryujinx/Ui/Windows/ControllerWindow.glade | 26 +++++++++++++++++++ 5 files changed, 45 insertions(+) diff --git a/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs b/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs index 0a9ca9dd..869cff4f 100644 --- a/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs +++ b/Ryujinx.Common/Configuration/Hid/Controller/JoyconConfigControllerStick.cs @@ -5,6 +5,7 @@ public Stick Joystick { get; set; } public bool InvertStickX { get; set; } public bool InvertStickY { get; set; } + public bool Rotate90CW { get; set; } public Button StickButton { get; set; } } } diff --git a/Ryujinx.Headless.SDL2/Program.cs b/Ryujinx.Headless.SDL2/Program.cs index 4daf6084..5915a881 100644 --- a/Ryujinx.Headless.SDL2/Program.cs +++ b/Ryujinx.Headless.SDL2/Program.cs @@ -220,6 +220,7 @@ namespace Ryujinx.Headless.SDL2 StickButton = ConfigGamepadInputId.LeftStick, InvertStickX = false, InvertStickY = false, + Rotate90CW = false, }, RightJoycon = new RightJoyconCommonConfig @@ -241,6 +242,7 @@ namespace Ryujinx.Headless.SDL2 StickButton = ConfigGamepadInputId.RightStick, InvertStickX = false, InvertStickY = false, + Rotate90CW = false, }, Motion = new StandardMotionConfigController diff --git a/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 0ccd8bb3..eec4e07e 100644 --- a/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -350,6 +350,14 @@ namespace Ryujinx.Input.SDL2 { resultY = -resultY; } + + if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.Rotate90CW) || + (inputId == StickInputId.Right && _configuration.RightJoyconStick.Rotate90CW)) + { + float temp = resultX; + resultX = resultY; + resultY = -temp; + } } return (resultX, resultY); diff --git a/Ryujinx/Ui/Windows/ControllerWindow.cs b/Ryujinx/Ui/Windows/ControllerWindow.cs index 36a23326..c328fa5c 100644 --- a/Ryujinx/Ui/Windows/ControllerWindow.cs +++ b/Ryujinx/Ui/Windows/ControllerWindow.cs @@ -73,6 +73,7 @@ namespace Ryujinx.Ui.Windows [GUI] ToggleButton _lStick; [GUI] CheckButton _invertLStickX; [GUI] CheckButton _invertLStickY; + [GUI] CheckButton _rotateL90CW; [GUI] ToggleButton _lStickUp; [GUI] ToggleButton _lStickDown; [GUI] ToggleButton _lStickLeft; @@ -88,6 +89,7 @@ namespace Ryujinx.Ui.Windows [GUI] ToggleButton _rStick; [GUI] CheckButton _invertRStickX; [GUI] CheckButton _invertRStickY; + [GUI] CheckButton _rotateR90CW; [GUI] ToggleButton _rStickUp; [GUI] ToggleButton _rStickDown; [GUI] ToggleButton _rStickLeft; @@ -490,6 +492,7 @@ namespace Ryujinx.Ui.Windows _lStick.Label = controllerConfig.LeftJoyconStick.Joystick.ToString(); _invertLStickX.Active = controllerConfig.LeftJoyconStick.InvertStickX; _invertLStickY.Active = controllerConfig.LeftJoyconStick.InvertStickY; + _rotateL90CW.Active = controllerConfig.LeftJoyconStick.Rotate90CW; _lStickButton.Label = controllerConfig.LeftJoyconStick.StickButton.ToString(); _dpadUp.Label = controllerConfig.LeftJoycon.DpadUp.ToString(); _dpadDown.Label = controllerConfig.LeftJoycon.DpadDown.ToString(); @@ -503,6 +506,7 @@ namespace Ryujinx.Ui.Windows _rStick.Label = controllerConfig.RightJoyconStick.Joystick.ToString(); _invertRStickX.Active = controllerConfig.RightJoyconStick.InvertStickX; _invertRStickY.Active = controllerConfig.RightJoyconStick.InvertStickY; + _rotateR90CW.Active = controllerConfig.RightJoyconStick.Rotate90CW; _rStickButton.Label = controllerConfig.RightJoyconStick.StickButton.ToString(); _a.Label = controllerConfig.RightJoycon.ButtonA.ToString(); _b.Label = controllerConfig.RightJoycon.ButtonB.ToString(); @@ -718,6 +722,7 @@ namespace Ryujinx.Ui.Windows Joystick = lStick, InvertStickY = _invertLStickY.Active, StickButton = lStickButton, + Rotate90CW = _rotateL90CW.Active, }, RightJoycon = new RightJoyconCommonConfig { @@ -737,6 +742,7 @@ namespace Ryujinx.Ui.Windows Joystick = rStick, InvertStickY = _invertRStickY.Active, StickButton = rStickButton, + Rotate90CW = _rotateR90CW.Active, }, Motion = motionConfig, Rumble = new RumbleConfigController @@ -1056,6 +1062,7 @@ namespace Ryujinx.Ui.Windows StickButton = ConfigGamepadInputId.LeftStick, InvertStickX = false, InvertStickY = false, + Rotate90CW = false, }, RightJoycon = new RightJoyconCommonConfig @@ -1077,6 +1084,7 @@ namespace Ryujinx.Ui.Windows StickButton = ConfigGamepadInputId.RightStick, InvertStickX = false, InvertStickY = false, + Rotate90CW = false, }, Motion = new StandardMotionConfigController diff --git a/Ryujinx/Ui/Windows/ControllerWindow.glade b/Ryujinx/Ui/Windows/ControllerWindow.glade index ff4c7149..e433f5cc 100644 --- a/Ryujinx/Ui/Windows/ControllerWindow.glade +++ b/Ryujinx/Ui/Windows/ControllerWindow.glade @@ -740,6 +740,19 @@ 1 + + + Rotate 90° Clockwise + True + True + False + True + + + 2 + 2 + + False @@ -1697,6 +1710,19 @@ 1 + + + Rotate 90° Clockwise + True + True + False + True + + + 2 + 2 + + False