diff --git a/osu.Game.Modes.Catch/CatchRuleset.cs b/osu.Game.Modes.Catch/CatchRuleset.cs index b552278cec..30717e6bde 100644 --- a/osu.Game.Modes.Catch/CatchRuleset.cs +++ b/osu.Game.Modes.Catch/CatchRuleset.cs @@ -78,6 +78,8 @@ namespace osu.Game.Modes.Catch protected override PlayMode PlayMode => PlayMode.Catch; + public override string Description => "osu!catch"; + public override FontAwesome Icon => FontAwesome.fa_osu_fruits_o; public override KeyCounter[] GameplayKeys => new KeyCounter[] diff --git a/osu.Game.Modes.Mania/ManiaRuleset.cs b/osu.Game.Modes.Mania/ManiaRuleset.cs index 51a33ce7bc..328c4b3f61 100644 --- a/osu.Game.Modes.Mania/ManiaRuleset.cs +++ b/osu.Game.Modes.Mania/ManiaRuleset.cs @@ -98,6 +98,8 @@ namespace osu.Game.Modes.Mania protected override PlayMode PlayMode => PlayMode.Mania; + public override string Description => "osu!mania"; + public override FontAwesome Icon => FontAwesome.fa_osu_mania_o; public override KeyCounter[] GameplayKeys => new KeyCounter[] { /* Todo: Should be keymod specific */ }; diff --git a/osu.Game.Modes.Osu/OsuRuleset.cs b/osu.Game.Modes.Osu/OsuRuleset.cs index 72c4b6988c..07fe7e67b1 100644 --- a/osu.Game.Modes.Osu/OsuRuleset.cs +++ b/osu.Game.Modes.Osu/OsuRuleset.cs @@ -112,6 +112,8 @@ namespace osu.Game.Modes.Osu protected override PlayMode PlayMode => PlayMode.Osu; + public override string Description => "osu!"; + public override KeyCounter[] GameplayKeys => new KeyCounter[] { new KeyCounterKeyboard(Key.Z), diff --git a/osu.Game.Modes.Taiko/TaikoRuleset.cs b/osu.Game.Modes.Taiko/TaikoRuleset.cs index 19432e5383..7ba016d4a3 100644 --- a/osu.Game.Modes.Taiko/TaikoRuleset.cs +++ b/osu.Game.Modes.Taiko/TaikoRuleset.cs @@ -78,6 +78,8 @@ namespace osu.Game.Modes.Taiko protected override PlayMode PlayMode => PlayMode.Taiko; + public override string Description => "osu!taiko"; + public override FontAwesome Icon => FontAwesome.fa_osu_taiko_o; public override KeyCounter[] GameplayKeys => new KeyCounter[] diff --git a/osu.Game/Modes/PlayMode.cs b/osu.Game/Modes/PlayMode.cs index 8d1e5158b0..fa6d94a650 100644 --- a/osu.Game/Modes/PlayMode.cs +++ b/osu.Game/Modes/PlayMode.cs @@ -1,19 +1,13 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.ComponentModel; - namespace osu.Game.Modes { public enum PlayMode { - [Description(@"osu!")] Osu = 0, - [Description(@"osu!taiko")] Taiko = 1, - [Description(@"osu!catch")] Catch = 2, - [Description(@"osu!mania")] Mania = 3 } } diff --git a/osu.Game/Modes/Ruleset.cs b/osu.Game/Modes/Ruleset.cs index d373b62a21..51ff8a9539 100644 --- a/osu.Game/Modes/Ruleset.cs +++ b/osu.Game/Modes/Ruleset.cs @@ -25,6 +25,8 @@ namespace osu.Game.Modes private static ConcurrentDictionary availableRulesets = new ConcurrentDictionary(); + public static IEnumerable PlayModes => availableRulesets.Keys; + public virtual IEnumerable GetBeatmapStatistics(WorkingBeatmap beatmap) => new BeatmapStatistic[] { }; public abstract IEnumerable GetModsFor(ModType type); @@ -43,6 +45,8 @@ namespace osu.Game.Modes public virtual FontAwesome Icon => FontAwesome.fa_question_circle; + public abstract string Description { get; } + public virtual Score CreateAutoplayScore(Beatmap beatmap) => null; public static Ruleset GetRuleset(PlayMode mode) diff --git a/osu.Game/Overlays/OptionsOverlay.cs b/osu.Game/Overlays/OptionsOverlay.cs index 463f21bcdd..53d8cb3593 100644 --- a/osu.Game/Overlays/OptionsOverlay.cs +++ b/osu.Game/Overlays/OptionsOverlay.cs @@ -147,8 +147,8 @@ namespace osu.Game.Overlays var previous = sidebarButtons.SingleOrDefault(sb => sb.Selected); var next = sidebarButtons.SingleOrDefault(sb => sb.Section == bestCandidate); - if (next != null) next.Selected = true; if (previous != null) previous.Selected = false; + if (next != null) next.Selected = true; } } diff --git a/osu.Game/Overlays/Toolbar/ToolbarModeButton.cs b/osu.Game/Overlays/Toolbar/ToolbarModeButton.cs index 1bcc0bf828..62359b05ae 100644 --- a/osu.Game/Overlays/Toolbar/ToolbarModeButton.cs +++ b/osu.Game/Overlays/Toolbar/ToolbarModeButton.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.Extensions; using osu.Framework.Graphics.Containers; using osu.Game.Modes; using OpenTK.Graphics; @@ -17,8 +16,8 @@ namespace osu.Game.Overlays.Toolbar set { mode = value; - TooltipMain = mode.GetDescription(); - TooltipSub = $"Play some {mode.GetDescription()}"; + TooltipMain = Ruleset.GetRuleset(mode).Description; + TooltipSub = $"Play some {Ruleset.GetRuleset(mode).Description}"; Icon = Ruleset.GetRuleset(mode).Icon; } } diff --git a/osu.Game/Overlays/Toolbar/ToolbarModeSelector.cs b/osu.Game/Overlays/Toolbar/ToolbarModeSelector.cs index 8b24157381..30474ad796 100644 --- a/osu.Game/Overlays/Toolbar/ToolbarModeSelector.cs +++ b/osu.Game/Overlays/Toolbar/ToolbarModeSelector.cs @@ -64,7 +64,7 @@ namespace osu.Game.Overlays.Toolbar } }; - foreach (PlayMode m in Enum.GetValues(typeof(PlayMode))) + foreach (PlayMode m in Ruleset.PlayModes) { var localMode = m; modeButtons.Add(new ToolbarModeButton