diff --git a/src/Ryujinx/UI/Overlay/ControllerOverlay.cs b/src/Ryujinx/UI/Overlay/ControllerOverlay.cs index e8ea8a547..7e6ae6758 100644 --- a/src/Ryujinx/UI/Overlay/ControllerOverlay.cs +++ b/src/Ryujinx/UI/Overlay/ControllerOverlay.cs @@ -16,7 +16,6 @@ namespace Ryujinx.UI.Overlay { private const float OverlayWidth = 400; private const float Padding = 24; - private const float Spacing = 16; private const float PlayerSpacing = 12; private const float PlayerRowHeight = 32; @@ -120,7 +119,7 @@ namespace Ryujinx.UI.Overlay if (playerBindings.ContainsKey(playerIndex)) { var controllers = playerBindings[playerIndex]; - var controllerNames = controllers.Select(c => GetControllerDisplayName(c)).ToList(); + var controllerNames = GetUniqueControllerDisplayNames(controllers); var controllerTextElement = new TextElement(Padding + 56, rowY + 2, string.Join(", ", controllerNames), PlayerTextSize, new SKColor(144, 238, 144)) // LightGreen { @@ -169,6 +168,37 @@ namespace Ryujinx.UI.Overlay }; } + private List GetUniqueControllerDisplayNames(List controllers) + { + var nameGroups = new Dictionary>(); + var displayNames = new List(); + + // First pass: get base names and group them + for (int i = 0; i < controllers.Count; i++) + { + string baseName = GetControllerDisplayName(controllers[i]); + + if (!nameGroups.ContainsKey(baseName)) + { + nameGroups[baseName] = new List(); + } + nameGroups[baseName].Add(i); + displayNames.Add(baseName); + } + + // Second pass: add numbering for duplicates + foreach (var group in nameGroups.Where(g => g.Value.Count > 1)) + { + for (int i = 0; i < group.Value.Count; i++) + { + int index = group.Value[i]; + displayNames[index] = $"{group.Key} #{i + 1}"; + } + } + + return displayNames; + } + private string GetControllerDisplayName(OriginalInputConfig config) { if (string.IsNullOrEmpty(config.Name)) @@ -181,11 +211,15 @@ namespace Ryujinx.UI.Overlay }; } - // Truncate long controller names + // Truncate long controller names from the middle string name = config.Name; if (name.Length > 25) { - name = name.Substring(0, 22) + "..."; + int keepLength = 22; // Total characters to keep (excluding "...") + int leftLength = (keepLength + 1) / 2; // Round up for left side + int rightLength = keepLength / 2; // Round down for right side + + name = name.Substring(0, leftLength) + "..." + name.Substring(name.Length - rightLength); } return name;