From 4a149c4ab80c0f435543691cf6c80b67315d2391 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Sat, 15 Apr 2017 06:14:31 +0900 Subject: [PATCH] Better default values + don't set Mode from outside. --- osu.Desktop.VisualTests/Tests/TestCasePlaySongSelect.cs | 7 ++++--- osu.Game/Database/BeatmapInfo.cs | 8 +++++++- osu.Game/Modes/RulesetCollection.cs | 9 ++++++--- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 2 +- osu.Game/Screens/Select/FilterControl.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 2 +- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/osu.Desktop.VisualTests/Tests/TestCasePlaySongSelect.cs b/osu.Desktop.VisualTests/Tests/TestCasePlaySongSelect.cs index 4047c4b95f..c22726491d 100644 --- a/osu.Desktop.VisualTests/Tests/TestCasePlaySongSelect.cs +++ b/osu.Desktop.VisualTests/Tests/TestCasePlaySongSelect.cs @@ -8,6 +8,7 @@ using osu.Framework.MathUtils; using osu.Game.Database; using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; +using osu.Game.Modes; namespace osu.Desktop.VisualTests.Tests { @@ -71,7 +72,7 @@ namespace osu.Desktop.VisualTests.Tests new BeatmapInfo { OnlineBeatmapID = 1234 + i, - Mode = 0, + Ruleset = RulesetCollection.GetRuleset(0), Path = "normal.osu", Version = "Normal", Difficulty = new BeatmapDifficulty @@ -82,7 +83,7 @@ namespace osu.Desktop.VisualTests.Tests new BeatmapInfo { OnlineBeatmapID = 1235 + i, - Mode = 0, + Ruleset = RulesetCollection.GetRuleset(0), Path = "hard.osu", Version = "Hard", Difficulty = new BeatmapDifficulty @@ -93,7 +94,7 @@ namespace osu.Desktop.VisualTests.Tests new BeatmapInfo { OnlineBeatmapID = 1236 + i, - Mode = 0, + Ruleset = RulesetCollection.GetRuleset(0), Path = "insane.osu", Version = "Insane", Difficulty = new BeatmapDifficulty diff --git a/osu.Game/Database/BeatmapInfo.cs b/osu.Game/Database/BeatmapInfo.cs index 72ff078d9e..be4faebde2 100644 --- a/osu.Game/Database/BeatmapInfo.cs +++ b/osu.Game/Database/BeatmapInfo.cs @@ -56,7 +56,13 @@ namespace osu.Game.Database public bool SpecialStyle { get; set; } public int Mode { get; set; } - public Ruleset Ruleset => RulesetCollection.GetRuleset(Mode); + + [Ignore] + public Ruleset Ruleset + { + get { return RulesetCollection.GetRuleset(Mode); } + set { Mode = RulesetCollection.GetId(value); } + } public bool LetterboxInBreaks { get; set; } public bool WidescreenStoryboard { get; set; } diff --git a/osu.Game/Modes/RulesetCollection.cs b/osu.Game/Modes/RulesetCollection.cs index d699bbfabe..221fa6f5ba 100644 --- a/osu.Game/Modes/RulesetCollection.cs +++ b/osu.Game/Modes/RulesetCollection.cs @@ -8,13 +8,16 @@ using System.Linq; namespace osu.Game.Modes { + /// + /// Todo: All of this needs to be moved to a RulesetDatabase. + /// public static class RulesetCollection { private static readonly ConcurrentDictionary available_rulesets = new ConcurrentDictionary(); public static void Register(Type type) { - Ruleset ruleset = Activator.CreateInstance(type) as Ruleset; + var ruleset = Activator.CreateInstance(type) as Ruleset; if (ruleset == null) return; @@ -25,9 +28,9 @@ namespace osu.Game.Modes public static Ruleset GetRuleset(int rulesetId) { Ruleset ruleset; - + if (!available_rulesets.TryGetValue(rulesetId, out ruleset)) - throw new InvalidOperationException($"Ruleset id {rulesetId} doesn't exist. How did you trigger this?"); + return null; return ruleset; } diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index 5041ab237c..02df95ff8a 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -37,7 +37,7 @@ namespace osu.Game.Overlays.Mods public readonly Bindable> SelectedMods = new Bindable>(); - public readonly Bindable Ruleset = new Bindable(); + public readonly Bindable Ruleset = new Bindable(RulesetCollection.GetRuleset(0)); private void rulesetChanged(Ruleset newRuleset) { diff --git a/osu.Game/Screens/Select/FilterControl.cs b/osu.Game/Screens/Select/FilterControl.cs index b2c53c9126..1e2f074939 100644 --- a/osu.Game/Screens/Select/FilterControl.cs +++ b/osu.Game/Screens/Select/FilterControl.cs @@ -163,7 +163,7 @@ namespace osu.Game.Screens.Select searchTextBox.HoldFocus = true; } - private readonly Bindable ruleset = new Bindable(); + private readonly Bindable ruleset = new Bindable(RulesetCollection.GetRuleset(0)); [BackgroundDependencyLoader(permitNulls:true)] private void load(OsuColour colours, OsuGame osu) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index f25d3d4df9..183eb7de32 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -29,7 +29,7 @@ namespace osu.Game.Screens.Select { public abstract class SongSelect : OsuScreen { - private readonly Bindable ruleset = new Bindable(); + private readonly Bindable ruleset = new Bindable(RulesetCollection.GetRuleset(0)); private BeatmapDatabase database; protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap);