From 992fe0e64f046aff5fd8d123dc3dec7d511766e2 Mon Sep 17 00:00:00 2001 From: madwind Date: Wed, 15 Jan 2025 00:27:13 +0800 Subject: [PATCH] JoyConPair setting --- src/Ryujinx.Input.SDL3/SDL3JoyConPair.cs | 2 +- .../Assets/Icons/Controller_JoyConPair.svg | 52 +++++++++++-------- .../Input/ControllerInputViewModel.cs | 2 +- .../Views/Input/ControllerInputView.axaml.cs | 29 +++++++---- 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/src/Ryujinx.Input.SDL3/SDL3JoyConPair.cs b/src/Ryujinx.Input.SDL3/SDL3JoyConPair.cs index 282e50b67..875d89505 100644 --- a/src/Ryujinx.Input.SDL3/SDL3JoyConPair.cs +++ b/src/Ryujinx.Input.SDL3/SDL3JoyConPair.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; +using System; using System.Collections.Generic; using System.Linq; using System.Numerics; @@ -127,7 +128,6 @@ namespace Ryujinx.Input.SDL3 lock (_userMappingLock) { _configuration = (StandardControllerInputConfig)configuration; - _buttonsUserMapping.Clear(); // First update sticks diff --git a/src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg b/src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg index 0a3400dbb..ed5e3820f 100644 --- a/src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg +++ b/src/Ryujinx/Assets/Icons/Controller_JoyConPair.svg @@ -14,9 +14,9 @@ + .button-letter{fill:#ffffff;} + .button{fill:#44484c;} + - + + - + + class="button-letter" /> + class="button-letter" /> + class="button-letter" /> + class="button-letter" /> diff --git a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs index d87c18689..19d06d0b7 100644 --- a/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/ControllerInputViewModel.cs @@ -70,7 +70,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input Image = ParentModel.Image; } - public void UpdateImage(string css) + public void UpdateImageCss(string css) { Image = new SvgImage { Source = ParentModel.Image.Source, Css = css }; } diff --git a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs index bcf275d1e..ec2844e49 100644 --- a/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs +++ b/src/Ryujinx/UI/Views/Input/ControllerInputView.axaml.cs @@ -6,8 +6,10 @@ using Avalonia.Interactivity; using Avalonia.LogicalTree; using Avalonia.Threading; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.ViewModels.Input; using Ryujinx.Common.Configuration.Hid.Controller; +using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.Input; using Ryujinx.Input.Assigner; using Ryujinx.Input.HLE; @@ -250,20 +252,24 @@ namespace Ryujinx.Ava.UI.Views.Input _isRunning = false; } - private string BuildSvgCss(IGamepad gamepad) + private string BuildSvgCss(IGamepad gamepad, GamepadInputConfig config, JoystickPosition leftPosition, + JoystickPosition rightPosition) { - StringBuilder sb = new StringBuilder(); - for(var i=0;i<(int)GamepadInputId.Count;i++) + gamepad.SetConfiguration(config.GetConfig()); + StringBuilder sb = new(); + for (var i = 0; i < (int)GamepadInputId.Count; i++) { var button = (GamepadButtonInputId)i; if (gamepad.GetMappedStateSnapshot().IsPressed(button)) { sb.Append($"#{button}{{fill:#00bbdb;}}"); } - } - Console.WriteLine(sb.ToString()); + sb.Append( + $"#LeftStick{{transform: translate ({(float)leftPosition.Dx / short.MaxValue * 10} {-(float)leftPosition.Dy / short.MaxValue * 10});}}"); + sb.Append( + $"#RightStick{{transform: translate ({(float)rightPosition.Dx / short.MaxValue * 10} {-(float)rightPosition.Dy / short.MaxValue * 10});}}"); return sb.ToString(); } @@ -277,26 +283,27 @@ namespace Ryujinx.Ava.UI.Views.Input if (viewModel != null) { IGamepad gamepad = viewModel.ParentModel.SelectedGamepad; - viewModel.UpdateImage(BuildSvgCss(gamepad)); - var config = viewModel.Config; + JoystickPosition leftPosition = default, rightposition = default; if (config.LeftJoystick != StickInputId.Unbound) { var stickInputId = (Ryujinx.Input.StickInputId)(int)config.LeftJoystick; (float leftAxisX, float leftAxisY) = gamepad.GetStick(stickInputId); - var position = NpadController.GetJoystickPosition(leftAxisX, leftAxisY, + leftPosition = NpadController.GetJoystickPosition(leftAxisX, leftAxisY, config.DeadzoneLeft, config.RangeLeft); - viewModel.LeftStickPosition = $"{position.Dx}, {position.Dy}"; + viewModel.LeftStickPosition = $"{leftPosition.Dx}, {leftPosition.Dy}"; } if (config.RightJoystick != StickInputId.Unbound) { var stickInputId = (Ryujinx.Input.StickInputId)(int)config.RightJoystick; (float rightAxisX, float rightAxisY) = gamepad.GetStick(stickInputId); - var position = NpadController.GetJoystickPosition(rightAxisX, rightAxisY, + rightposition = NpadController.GetJoystickPosition(rightAxisX, rightAxisY, config.DeadzoneRight, config.RangeRight); - viewModel.RightStickPosition = $"{position.Dx}, {position.Dy}"; + viewModel.RightStickPosition = $"{rightposition.Dx}, {rightposition.Dy}"; } + + viewModel.UpdateImageCss(BuildSvgCss(gamepad, config, leftPosition, rightposition)); } await Task.Delay(100);