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);