From d8018ad25a976e0d1efba4828ab659d1233a85f8 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Wed, 10 Dec 2025 21:05:29 +0100 Subject: [PATCH 1/3] Add ability to select system mods --- .../ExtendedUserModSelectOverlay.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs b/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs index f37e09ba45..db6bc6b1f1 100644 --- a/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs +++ b/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs @@ -1,9 +1,12 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using System.Reflection; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Overlays; using osu.Game.Overlays.Mods; +using osu.Game.Rulesets.Mods; namespace PerformanceCalculatorGUI.Components { @@ -14,6 +17,36 @@ public ExtendedUserModSelectOverlay() { } + [BackgroundDependencyLoader] + private void load() + { + var method = typeof(ModSelectOverlay).GetMethod("createModColumnContent", BindingFlags.NonPublic | BindingFlags.Instance); + + object systemColumn = method.Invoke(this, new object[] { ModType.System }); + + var flowField = typeof(ModSelectOverlay).GetField("columnFlow", + BindingFlags.NonPublic | BindingFlags.Instance); + + object columnFlow = flowField.GetValue(this); + + var addMethod = columnFlow.GetType().GetMethod("Add"); + addMethod.Invoke(columnFlow, new[] { systemColumn }); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + foreach (var modStates in AvailableMods.Value) + { + foreach (var modState in modStates.Value) + { + if (modState.Mod.Type == ModType.System) + modState.ValidForSelection.Value = true; + } + } + } + protected override void PopIn() { Header.Hide(); From df9627dedf850c8a163cde27d5e571ec3fef3f90 Mon Sep 17 00:00:00 2001 From: Givikap120 Date: Wed, 10 Dec 2025 21:11:10 +0100 Subject: [PATCH 2/3] Add null checks --- .../Components/ExtendedUserModSelectOverlay.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs b/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs index db6bc6b1f1..6c7eb57191 100644 --- a/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs +++ b/PerformanceCalculatorGUI/Components/ExtendedUserModSelectOverlay.cs @@ -21,15 +21,21 @@ public ExtendedUserModSelectOverlay() private void load() { var method = typeof(ModSelectOverlay).GetMethod("createModColumnContent", BindingFlags.NonPublic | BindingFlags.Instance); + if (method == null) return; object systemColumn = method.Invoke(this, new object[] { ModType.System }); + if (systemColumn == null) return; var flowField = typeof(ModSelectOverlay).GetField("columnFlow", BindingFlags.NonPublic | BindingFlags.Instance); + if (flowField == null) return; object columnFlow = flowField.GetValue(this); + if (columnFlow == null) return; var addMethod = columnFlow.GetType().GetMethod("Add"); + if (addMethod == null) return; + addMethod.Invoke(columnFlow, new[] { systemColumn }); } From d22fc27ff4f1faca64b945b316be765c6c127c93 Mon Sep 17 00:00:00 2001 From: StanR Date: Sat, 24 Jan 2026 17:46:27 +0500 Subject: [PATCH 3/3] Fix CI --- .../Simulate/ExtendedUserModSelectOverlay.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/PerformanceCalculatorGUI/Screens/Simulate/ExtendedUserModSelectOverlay.cs b/PerformanceCalculatorGUI/Screens/Simulate/ExtendedUserModSelectOverlay.cs index b60b16a65f..55eecfb982 100644 --- a/PerformanceCalculatorGUI/Screens/Simulate/ExtendedUserModSelectOverlay.cs +++ b/PerformanceCalculatorGUI/Screens/Simulate/ExtendedUserModSelectOverlay.cs @@ -21,20 +21,24 @@ public ExtendedUserModSelectOverlay() private void load() { var method = typeof(ModSelectOverlay).GetMethod("createModColumnContent", BindingFlags.NonPublic | BindingFlags.Instance); - if (method == null) return; + if (method == null) + return; - object systemColumn = method.Invoke(this, new object[] { ModType.System }); - if (systemColumn == null) return; + object? systemColumn = method.Invoke(this, new object[] { ModType.System }); + if (systemColumn == null) + return; - var flowField = typeof(ModSelectOverlay).GetField("columnFlow", - BindingFlags.NonPublic | BindingFlags.Instance); - if (flowField == null) return; + var flowField = typeof(ModSelectOverlay).GetField("columnFlow", BindingFlags.NonPublic | BindingFlags.Instance); + if (flowField == null) + return; - object columnFlow = flowField.GetValue(this); - if (columnFlow == null) return; + object? columnFlow = flowField.GetValue(this); + if (columnFlow == null) + return; var addMethod = columnFlow.GetType().GetMethod("Add"); - if (addMethod == null) return; + if (addMethod == null) + return; addMethod.Invoke(columnFlow, new[] { systemColumn }); }