Remove LegacyID from Ruleset

This commit is contained in:
Dean Herbert 2019-12-24 13:48:27 +09:00
parent 5e8afccfee
commit a324bfbc2c
7 changed files with 30 additions and 18 deletions

View File

@ -24,7 +24,7 @@
namespace osu.Game.Rulesets.Catch
{
public class CatchRuleset : Ruleset
public class CatchRuleset : Ruleset, ILegacyRuleset
{
public override DrawableRuleset CreateDrawableRulesetWith(IBeatmap beatmap, IReadOnlyList<Mod> mods = null) => new DrawableCatchRuleset(this, beatmap, mods);
@ -134,7 +134,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
public override PerformanceCalculator CreatePerformanceCalculator(WorkingBeatmap beatmap, ScoreInfo score) => new CatchPerformanceCalculator(this, beatmap, score);
public override int? LegacyID => 2;
public int LegacyID => 2;
public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new CatchReplayFrame();
}

View File

@ -31,7 +31,7 @@
namespace osu.Game.Rulesets.Mania
{
public class ManiaRuleset : Ruleset
public class ManiaRuleset : Ruleset, ILegacyRuleset
{
public override DrawableRuleset CreateDrawableRulesetWith(IBeatmap beatmap, IReadOnlyList<Mod> mods = null) => new DrawableManiaRuleset(this, beatmap, mods);
@ -178,7 +178,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
public override DifficultyCalculator CreateDifficultyCalculator(WorkingBeatmap beatmap) => new ManiaDifficultyCalculator(this, beatmap);
public override int? LegacyID => 3;
public int LegacyID => 3;
public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new ManiaReplayFrame();

View File

@ -32,7 +32,7 @@
namespace osu.Game.Rulesets.Osu
{
public class OsuRuleset : Ruleset
public class OsuRuleset : Ruleset, ILegacyRuleset
{
public override DrawableRuleset CreateDrawableRulesetWith(IBeatmap beatmap, IReadOnlyList<Mod> mods = null) => new DrawableOsuRuleset(this, beatmap, mods);
@ -178,7 +178,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
public override ISkin CreateLegacySkinProvider(ISkinSource source) => new OsuLegacySkinTransformer(source);
public override int? LegacyID => 0;
public int LegacyID => 0;
public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new OsuReplayFrame();

View File

@ -24,7 +24,7 @@
namespace osu.Game.Rulesets.Taiko
{
public class TaikoRuleset : Ruleset
public class TaikoRuleset : Ruleset, ILegacyRuleset
{
public override DrawableRuleset CreateDrawableRulesetWith(IBeatmap beatmap, IReadOnlyList<Mod> mods = null) => new DrawableTaikoRuleset(this, beatmap, mods);
@ -133,7 +133,7 @@ public override IEnumerable<Mod> GetModsFor(ModType type)
public override PerformanceCalculator CreatePerformanceCalculator(WorkingBeatmap beatmap, ScoreInfo score) => new TaikoPerformanceCalculator(this, beatmap, score);
public override int? LegacyID => 1;
public int LegacyID => 1;
public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new TaikoReplayFrame();
}

View File

@ -0,0 +1,13 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
namespace osu.Game.Rulesets
{
public interface ILegacyRuleset
{
/// <summary>
/// Identifies the server-side ID of a legacy ruleset.
/// </summary>
int LegacyID { get; }
}
}

View File

@ -26,7 +26,7 @@ namespace osu.Game.Rulesets
{
public abstract class Ruleset
{
public readonly RulesetInfo RulesetInfo;
public RulesetInfo RulesetInfo { get; internal set; }
public IEnumerable<Mod> GetAllMods() => Enum.GetValues(typeof(ModType)).Cast<ModType>()
// Confine all mods of each mod type into a single IEnumerable<Mod>
@ -103,11 +103,6 @@ protected Ruleset()
/// <param name="settings">The <see cref="SettingsStore"/> to store the settings.</param>
public virtual IRulesetConfigManager CreateConfig(SettingsStore settings) => null;
/// <summary>
/// Do not override this unless you are a legacy mode.
/// </summary>
public virtual int? LegacyID => null;
/// <summary>
/// A unique short name to reference this ruleset in online requests.
/// </summary>
@ -148,7 +143,6 @@ protected Ruleset()
Name = Description,
ShortName = ShortName,
InstantiationInfo = GetType().AssemblyQualifiedName,
ID = LegacyID,
Available = true
};
}

View File

@ -59,16 +59,21 @@ private void addMissingRulesets()
var instances = loadedAssemblies.Values.Select(r => (Ruleset)Activator.CreateInstance(r)).ToList();
//add all legacy modes in correct order
foreach (var r in instances.Where(r => r.LegacyID != null).OrderBy(r => r.LegacyID))
foreach (var r in instances.Where(r => r is ILegacyRuleset))
{
if (context.RulesetInfo.SingleOrDefault(rsi => rsi.ID == r.RulesetInfo.ID) == null)
int legacyId = ((ILegacyRuleset)r).LegacyID;
if (context.RulesetInfo.SingleOrDefault(rsi => rsi.ID == legacyId) == null)
{
r.RulesetInfo.ID = legacyId;
context.RulesetInfo.Add(r.RulesetInfo);
}
}
context.SaveChanges();
//add any other modes
foreach (var r in instances.Where(r => r.LegacyID == null))
foreach (var r in instances.Where(r => !(r is ILegacyRuleset)))
{
if (context.RulesetInfo.FirstOrDefault(ri => ri.InstantiationInfo == r.RulesetInfo.InstantiationInfo) == null)
context.RulesetInfo.Add(r.RulesetInfo);