diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs
index aac8a72dd7..ba183abc3f 100644
--- a/osu.Game/Overlays/Mods/ModSection.cs
+++ b/osu.Game/Overlays/Mods/ModSection.cs
@@ -51,7 +51,7 @@ namespace osu.Game.Overlays.Mods
return new ModButton(m)
{
SelectedColour = selectedColour,
- Action = Action,
+ SelectionChanged = Action,
};
}).ToArray();
@@ -88,21 +88,28 @@ namespace osu.Game.Overlays.Mods
return base.OnKeyDown(state, args);
}
- public void DeselectAll()
- {
- foreach (ModButton button in buttons)
- button.Deselect();
- }
+ public void DeselectAll() => DeselectTypes(buttons.Select(b => b.SelectedMod?.GetType()).Where(t => t != null));
- public void DeselectTypes(Type[] modTypes)
+ ///
+ /// Deselect one or more mods in this section.
+ ///
+ /// The types of s which should be deselected.
+ /// Set to true to bypass animations and update selections immediately.
+ public void DeselectTypes(IEnumerable modTypes, bool immediate = false)
{
+ int delay = 0;
foreach (var button in buttons)
{
Mod selected = button.SelectedMod;
if (selected == null) continue;
foreach (Type type in modTypes)
if (type.IsInstanceOfType(selected))
- button.Deselect();
+ {
+ if (immediate)
+ button.Deselect();
+ else
+ Scheduler.AddDelayed(() => button.Deselect(), delay += 50);
+ }
}
}
diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs
index 9639907914..cc5a17358d 100644
--- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs
+++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs
@@ -100,17 +100,22 @@ namespace osu.Game.Overlays.Mods
refreshSelectedMods();
}
- public void DeselectTypes(Type[] modTypes)
+ ///
+ /// Deselect one or more mods.
+ ///
+ /// The types of s which should be deselected.
+ /// Set to true to bypass animations and update selections immediately.
+ public void DeselectTypes(Type[] modTypes, bool immediate = false)
{
if (modTypes.Length == 0) return;
foreach (ModSection section in ModSectionsContainer.Children)
- section.DeselectTypes(modTypes);
+ section.DeselectTypes(modTypes, immediate);
}
private void modButtonPressed(Mod selectedMod)
{
if (selectedMod != null)
- DeselectTypes(selectedMod.IncompatibleMods);
+ DeselectTypes(selectedMod.IncompatibleMods, true);
refreshSelectedMods();
}
@@ -127,10 +132,6 @@ namespace osu.Game.Overlays.Mods
ranked &= mod.Ranked;
}
- // 1.00x
- // 1.05x
- // 1.20x
-
MultiplierLabel.Text = $"{multiplier:N2}x";
if (!ranked)
MultiplierLabel.Text += " (Unranked)";