mirror of
https://github.com/ppy/osu.git
synced 2024-09-21 16:07:24 +08:00
Seal the ruleset creation methods and let abstract method take their place
Also makes `CreatePlayerRuleset()` and `CreateRulesetForSkinProvider()` not-null to avoid unwanted behaviour with their derivers
This commit is contained in:
parent
0a0ea39431
commit
2fa47992dc
@ -16,6 +16,6 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
typeof(CatchLegacySkinTransformer),
|
typeof(CatchLegacySkinTransformer),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new CatchRuleset();
|
protected override Ruleset CreateRulesetForSkinProvider() => new CatchRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ namespace osu.Game.Rulesets.Catch.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneCatchModPerfect : ModPerfectTestScene
|
public class TestSceneCatchModPerfect : ModPerfectTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new CatchRuleset();
|
||||||
|
|
||||||
public TestSceneCatchModPerfect()
|
public TestSceneCatchModPerfect()
|
||||||
: base(new CatchModPerfect())
|
: base(new CatchModPerfect())
|
||||||
{
|
{
|
||||||
@ -50,7 +52,5 @@ namespace osu.Game.Rulesets.Catch.Tests.Mods
|
|||||||
// We only care about testing misses, hits are tested via JuiceStream
|
// We only care about testing misses, hits are tested via JuiceStream
|
||||||
[TestCase(true)]
|
[TestCase(true)]
|
||||||
public void TestTinyDroplet(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new TinyDroplet { StartTime = 1000 }), shouldMiss);
|
public void TestTinyDroplet(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new TinyDroplet { StartTime = 1000 }), shouldMiss);
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new CatchRuleset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,6 @@ namespace osu.Game.Rulesets.Catch.Tests
|
|||||||
typeof(CatchRuleset),
|
typeof(CatchRuleset),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new CatchRuleset();
|
protected override Ruleset CreatePlayerRuleset() => new CatchRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneManiaModPerfect : ModPerfectTestScene
|
public class TestSceneManiaModPerfect : ModPerfectTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new ManiaRuleset();
|
||||||
|
|
||||||
public TestSceneManiaModPerfect()
|
public TestSceneManiaModPerfect()
|
||||||
: base(new ManiaModPerfect())
|
: base(new ManiaModPerfect())
|
||||||
{
|
{
|
||||||
@ -22,7 +24,5 @@ namespace osu.Game.Rulesets.Mania.Tests.Mods
|
|||||||
[TestCase(false)]
|
[TestCase(false)]
|
||||||
[TestCase(true)]
|
[TestCase(true)]
|
||||||
public void TestHoldNote(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new HoldNote { StartTime = 1000, EndTime = 3000 }), shouldMiss);
|
public void TestHoldNote(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new HoldNote { StartTime = 1000, EndTime = 3000 }), shouldMiss);
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new ManiaRuleset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ namespace osu.Game.Rulesets.Mania.Tests.Skinning
|
|||||||
typeof(ManiaSettingsSubsection)
|
typeof(ManiaSettingsSubsection)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected override Ruleset CreateRulesetForSkinProvider() => new ManiaRuleset();
|
||||||
|
|
||||||
protected ManiaSkinnableTestScene()
|
protected ManiaSkinnableTestScene()
|
||||||
{
|
{
|
||||||
scrollingInfo.Direction.Value = ScrollingDirection.Down;
|
scrollingInfo.Direction.Value = ScrollingDirection.Down;
|
||||||
@ -58,8 +60,6 @@ namespace osu.Game.Rulesets.Mania.Tests.Skinning
|
|||||||
AddStep("change direction to up", () => scrollingInfo.Direction.Value = ScrollingDirection.Up);
|
AddStep("change direction to up", () => scrollingInfo.Direction.Value = ScrollingDirection.Up);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new ManiaRuleset();
|
|
||||||
|
|
||||||
private class TestScrollingInfo : IScrollingInfo
|
private class TestScrollingInfo : IScrollingInfo
|
||||||
{
|
{
|
||||||
public readonly Bindable<ScrollingDirection> Direction = new Bindable<ScrollingDirection>();
|
public readonly Bindable<ScrollingDirection> Direction = new Bindable<ScrollingDirection>();
|
||||||
|
@ -14,6 +14,6 @@ namespace osu.Game.Rulesets.Mania.Tests
|
|||||||
typeof(ManiaRuleset),
|
typeof(ManiaRuleset),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new ManiaRuleset();
|
protected override Ruleset CreatePlayerRuleset() => new ManiaRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneOsuModDifficultyAdjust : ModTestScene
|
public class TestSceneOsuModDifficultyAdjust : ModTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestNoAdjustment() => CreateModTest(new ModTestData
|
public void TestNoAdjustment() => CreateModTest(new ModTestData
|
||||||
{
|
{
|
||||||
@ -77,7 +79,5 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
{
|
{
|
||||||
return Player.ScoreProcessor.JudgedHits >= 2;
|
return Player.ScoreProcessor.JudgedHits >= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,8 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneOsuModDoubleTime : ModTestScene
|
public class TestSceneOsuModDoubleTime : ModTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
|
|
||||||
[TestCase(0.5)]
|
[TestCase(0.5)]
|
||||||
[TestCase(1.01)]
|
[TestCase(1.01)]
|
||||||
[TestCase(1.5)]
|
[TestCase(1.5)]
|
||||||
@ -26,7 +28,5 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
Precision.AlmostEquals(Player.GameplayClockContainer.GameplayClock.Rate, mod.SpeedChange.Value)
|
Precision.AlmostEquals(Player.GameplayClockContainer.GameplayClock.Rate, mod.SpeedChange.Value)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneOsuModPerfect : ModPerfectTestScene
|
public class TestSceneOsuModPerfect : ModPerfectTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
|
|
||||||
public TestSceneOsuModPerfect()
|
public TestSceneOsuModPerfect()
|
||||||
: base(new OsuModPerfect())
|
: base(new OsuModPerfect())
|
||||||
{
|
{
|
||||||
@ -48,7 +50,5 @@ namespace osu.Game.Rulesets.Osu.Tests.Mods
|
|||||||
|
|
||||||
CreateHitObjectTest(new HitObjectTestData(spinner), shouldMiss);
|
CreateHitObjectTest(new HitObjectTestData(spinner), shouldMiss);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,6 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
typeof(OsuLegacySkinTransformer),
|
typeof(OsuLegacySkinTransformer),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
protected override Ruleset CreateRulesetForSkinProvider() => new OsuRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,8 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
{
|
{
|
||||||
public class TestSceneMissHitWindowJudgements : ModTestScene
|
public class TestSceneMissHitWindowJudgements : ModTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestMissViaEarlyHit()
|
public void TestMissViaEarlyHit()
|
||||||
{
|
{
|
||||||
@ -61,8 +63,6 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
|
||||||
|
|
||||||
private class TestAutoMod : OsuModAutoplay
|
private class TestAutoMod : OsuModAutoplay
|
||||||
{
|
{
|
||||||
public override Score CreateReplayScore(IBeatmap beatmap) => new Score
|
public override Score CreateReplayScore(IBeatmap beatmap) => new Score
|
||||||
|
@ -16,6 +16,6 @@ namespace osu.Game.Rulesets.Osu.Tests
|
|||||||
typeof(OsuRuleset),
|
typeof(OsuRuleset),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,8 @@ namespace osu.Game.Rulesets.Taiko.Tests.Mods
|
|||||||
{
|
{
|
||||||
public class TestSceneTaikoModPerfect : ModPerfectTestScene
|
public class TestSceneTaikoModPerfect : ModPerfectTestScene
|
||||||
{
|
{
|
||||||
|
protected override Ruleset CreatePlayerRuleset() => new TestTaikoRuleset();
|
||||||
|
|
||||||
public TestSceneTaikoModPerfect()
|
public TestSceneTaikoModPerfect()
|
||||||
: base(new TaikoModPerfect())
|
: base(new TaikoModPerfect())
|
||||||
{
|
{
|
||||||
@ -29,8 +31,6 @@ namespace osu.Game.Rulesets.Taiko.Tests.Mods
|
|||||||
[TestCase(true)]
|
[TestCase(true)]
|
||||||
public void TestSwell(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new Swell { StartTime = 1000, EndTime = 3000 }), shouldMiss);
|
public void TestSwell(bool shouldMiss) => CreateHitObjectTest(new HitObjectTestData(new Swell { StartTime = 1000, EndTime = 3000 }), shouldMiss);
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new TestTaikoRuleset();
|
|
||||||
|
|
||||||
private class TestTaikoRuleset : TaikoRuleset
|
private class TestTaikoRuleset : TaikoRuleset
|
||||||
{
|
{
|
||||||
public override HealthProcessor CreateHealthProcessor(double drainStartTime) => new TestTaikoHealthProcessor();
|
public override HealthProcessor CreateHealthProcessor(double drainStartTime) => new TestTaikoHealthProcessor();
|
||||||
|
@ -16,6 +16,6 @@ namespace osu.Game.Rulesets.Taiko.Tests
|
|||||||
typeof(TaikoLegacySkinTransformer),
|
typeof(TaikoLegacySkinTransformer),
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new TaikoRuleset();
|
protected override Ruleset CreateRulesetForSkinProvider() => new TaikoRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,6 @@ namespace osu.Game.Rulesets.Taiko.Tests
|
|||||||
typeof(TaikoRuleset)
|
typeof(TaikoRuleset)
|
||||||
};
|
};
|
||||||
|
|
||||||
protected override Ruleset CreateRuleset() => new TaikoRuleset();
|
protected override Ruleset CreatePlayerRuleset() => new TaikoRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,6 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class TestPlayerTestScene : PlayerTestScene
|
public abstract class TestPlayerTestScene : PlayerTestScene
|
||||||
{
|
{
|
||||||
protected override Ruleset CreateRuleset() => new OsuRuleset();
|
protected override Ruleset CreatePlayerRuleset() => new OsuRuleset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Extensions.IEnumerableExtensions;
|
using osu.Framework.Extensions.IEnumerableExtensions;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
@ -23,6 +24,22 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
protected OsuConfigManager LocalConfig;
|
protected OsuConfigManager LocalConfig;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates the ruleset for setting up the <see cref="Player"/> component.
|
||||||
|
/// </summary>
|
||||||
|
[NotNull]
|
||||||
|
protected abstract Ruleset CreatePlayerRuleset();
|
||||||
|
|
||||||
|
protected sealed override Ruleset CreateRuleset() => CreatePlayerRuleset();
|
||||||
|
|
||||||
|
[NotNull]
|
||||||
|
private readonly Ruleset ruleset;
|
||||||
|
|
||||||
|
protected PlayerTestScene()
|
||||||
|
{
|
||||||
|
ruleset = CreatePlayerRuleset();
|
||||||
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
@ -46,7 +63,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
action?.Invoke();
|
action?.Invoke();
|
||||||
|
|
||||||
AddStep(CreateRuleset().RulesetInfo.Name, LoadPlayer);
|
AddStep(ruleset.Description, LoadPlayer);
|
||||||
AddUntilStep("player loaded", () => Player.IsLoaded && Player.Alpha == 1);
|
AddUntilStep("player loaded", () => Player.IsLoaded && Player.Alpha == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,28 +73,27 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
protected void LoadPlayer()
|
protected void LoadPlayer()
|
||||||
{
|
{
|
||||||
var beatmap = CreateBeatmap(Ruleset.Value);
|
var beatmap = CreateBeatmap(ruleset.RulesetInfo);
|
||||||
|
|
||||||
Beatmap.Value = CreateWorkingBeatmap(beatmap);
|
Beatmap.Value = CreateWorkingBeatmap(beatmap);
|
||||||
|
Ruleset.Value = ruleset.RulesetInfo;
|
||||||
SelectedMods.Value = Array.Empty<Mod>();
|
SelectedMods.Value = Array.Empty<Mod>();
|
||||||
|
|
||||||
var rulesetInstance = Ruleset.Value.CreateInstance();
|
|
||||||
|
|
||||||
if (!AllowFail)
|
if (!AllowFail)
|
||||||
{
|
{
|
||||||
var noFailMod = rulesetInstance.GetAllMods().FirstOrDefault(m => m is ModNoFail);
|
var noFailMod = ruleset.GetAllMods().FirstOrDefault(m => m is ModNoFail);
|
||||||
if (noFailMod != null)
|
if (noFailMod != null)
|
||||||
SelectedMods.Value = new[] { noFailMod };
|
SelectedMods.Value = new[] { noFailMod };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Autoplay)
|
if (Autoplay)
|
||||||
{
|
{
|
||||||
var mod = rulesetInstance.GetAutoplayMod();
|
var mod = ruleset.GetAutoplayMod();
|
||||||
if (mod != null)
|
if (mod != null)
|
||||||
SelectedMods.Value = SelectedMods.Value.Concat(mod.Yield()).ToArray();
|
SelectedMods.Value = SelectedMods.Value.Concat(mod.Yield()).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
Player = CreatePlayer(rulesetInstance);
|
Player = CreatePlayer(ruleset);
|
||||||
LoadScreen(Player);
|
LoadScreen(Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Audio;
|
using osu.Framework.Audio;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
@ -13,6 +14,7 @@ using osu.Framework.Graphics.Textures;
|
|||||||
using osu.Framework.IO.Stores;
|
using osu.Framework.IO.Stores;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Rulesets;
|
||||||
using osu.Game.Skinning;
|
using osu.Game.Skinning;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
using osuTK.Graphics;
|
using osuTK.Graphics;
|
||||||
@ -26,16 +28,17 @@ namespace osu.Game.Tests.Visual
|
|||||||
private Skin specialSkin;
|
private Skin specialSkin;
|
||||||
private Skin oldSkin;
|
private Skin oldSkin;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates the ruleset for adding the ruleset-specific skin transforming component.
|
||||||
|
/// </summary>
|
||||||
|
[NotNull]
|
||||||
|
protected abstract Ruleset CreateRulesetForSkinProvider();
|
||||||
|
|
||||||
|
protected sealed override Ruleset CreateRuleset() => CreateRulesetForSkinProvider();
|
||||||
|
|
||||||
protected SkinnableTestScene()
|
protected SkinnableTestScene()
|
||||||
: base(2, 3)
|
: base(2, 3)
|
||||||
{
|
{
|
||||||
// avoid running silently incorrectly.
|
|
||||||
if (CreateRuleset() == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException(
|
|
||||||
$"No ruleset provided, override {nameof(CreateRuleset)} to the ruleset belonging to the skinnable content."
|
|
||||||
+ "This is required to add the legacy skin transformer for the content to behave as expected.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -110,7 +113,7 @@ namespace osu.Game.Tests.Visual
|
|||||||
{
|
{
|
||||||
new OutlineBox { Alpha = autoSize ? 1 : 0 },
|
new OutlineBox { Alpha = autoSize ? 1 : 0 },
|
||||||
mainProvider.WithChild(
|
mainProvider.WithChild(
|
||||||
new SkinProvidingContainer(Ruleset.Value.CreateInstance().CreateLegacySkinProvider(mainProvider, beatmap))
|
new SkinProvidingContainer(CreateRulesetForSkinProvider().CreateLegacySkinProvider(mainProvider, beatmap))
|
||||||
{
|
{
|
||||||
Child = created,
|
Child = created,
|
||||||
RelativeSizeAxes = !autoSize ? Axes.Both : Axes.None,
|
RelativeSizeAxes = !autoSize ? Axes.Both : Axes.None,
|
||||||
|
Loading…
Reference in New Issue
Block a user