diff --git a/osu.Game/Overlays/Mods/ModButton.cs b/osu.Game/Overlays/Mods/ModButton.cs
index 06f2fea43f..5e3733cd5e 100644
--- a/osu.Game/Overlays/Mods/ModButton.cs
+++ b/osu.Game/Overlays/Mods/ModButton.cs
@@ -46,8 +46,9 @@ namespace osu.Game.Overlays.Mods
/// Change the selected mod index of this button.
///
/// The new index.
+ /// Whether any settings applied to the mod should be reset on selection.
/// Whether the selection changed.
- private bool changeSelectedIndex(int newIndex)
+ private bool changeSelectedIndex(int newIndex, bool resetSettings = true)
{
if (newIndex == selectedIndex) return false;
@@ -69,7 +70,8 @@ namespace osu.Game.Overlays.Mods
Mod newSelection = SelectedMod ?? Mods[0];
- newSelection.ResetSettingsToDefaults();
+ if (resetSettings)
+ newSelection.ResetSettingsToDefaults();
Schedule(() =>
{
@@ -211,11 +213,17 @@ namespace osu.Game.Overlays.Mods
Deselect();
}
- public bool SelectAt(int index)
+ ///
+ /// Select the mod at the provided index.
+ ///
+ /// The index to select.
+ /// Whether any settings applied to the mod should be reset on selection.
+ /// Whether the selection changed.
+ public bool SelectAt(int index, bool resetSettings = true)
{
if (!Mods[index].HasImplementation) return false;
- changeSelectedIndex(index);
+ changeSelectedIndex(index, resetSettings);
return true;
}
diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs
index 08bd3f8622..71ecef2b82 100644
--- a/osu.Game/Overlays/Mods/ModSection.cs
+++ b/osu.Game/Overlays/Mods/ModSection.cs
@@ -197,9 +197,10 @@ namespace osu.Game.Overlays.Mods
continue;
var buttonMod = button.Mods[index];
- button.SelectAt(index);
- // the selection above will reset settings to defaults, but as this is an external change we want to copy the new settings across.
+ button.SelectAt(index, false);
+
+ // as this is likely coming from an external change, ensure the settings of the mod are in sync.
buttonMod.CopyFrom(mod);
return;
}