From 6aaec6da5d0ad7a1e3749dd688fa6d0a5a7afef2 Mon Sep 17 00:00:00 2001 From: Aaron Murgatroyd Date: Mon, 17 Jun 2024 00:32:11 +1000 Subject: [PATCH] Fixed duplicate controller names under Ava --- .../UI/ViewModels/Input/InputViewModel.cs | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 89cc6496d5..fe7f5d6d53 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -45,7 +45,6 @@ namespace Ryujinx.Ava.UI.ViewModels.Input private PlayerIndex _playerId; private int _controller; - private int _controllerNumber; private string _controllerImage; private int _device; private object _configViewModel; @@ -439,6 +438,24 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public void LoadDevices() { + string GetGamepadName(IGamepad gamepad, int controllerNumber) + { + return $"{GetShortGamepadName(gamepad.Name)} ({controllerNumber})"; + } + + string GetUniqueGamepadName(IGamepad gamepad, ref int controllerNumber) + { + var name = GetGamepadName(gamepad, controllerNumber); + + if (Devices.Any(controller => controller.Name == name)) + { + controllerNumber++; + name = GetGamepadName(gamepad, controllerNumber); + } + + return name; + } + lock (Devices) { Devices.Clear(); @@ -455,23 +472,18 @@ namespace Ryujinx.Ava.UI.ViewModels.Input } } + var controllerNumber = 0; foreach (string id in _mainWindow.InputManager.GamepadDriver.GamepadsIds) { using IGamepad gamepad = _mainWindow.InputManager.GamepadDriver.GetGamepad(id); if (gamepad != null) { - if (Devices.Any(controller => GetShortGamepadId(controller.Id) == GetShortGamepadId(gamepad.Id))) - { - _controllerNumber++; - } - - Devices.Add((DeviceType.Controller, id, $"{GetShortGamepadName(gamepad.Name)} ({_controllerNumber})")); + var name = GetUniqueGamepadName(gamepad, ref controllerNumber); + Devices.Add((DeviceType.Controller, id, name)); } } - _controllerNumber = 0; - DeviceList.AddRange(Devices.Select(x => x.Name)); Device = Math.Min(Device, DeviceList.Count); }