diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyBeatmapSkin.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyBeatmapSkin.cs
index 3ff37c4147..03d18cefef 100644
--- a/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyBeatmapSkin.cs
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneLegacyBeatmapSkin.cs
@@ -110,7 +110,7 @@ namespace osu.Game.Rulesets.Osu.Tests
this.hasColours = hasColours;
}
- protected override ISkin GetSkin() => new TestBeatmapSkin(BeatmapInfo, hasColours);
+ protected override IBeatmapSkin GetSkin() => new TestBeatmapSkin(BeatmapInfo, hasColours);
}
private class TestBeatmapSkin : LegacyBeatmapSkin
diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
index 075bf314bc..64da80a88e 100644
--- a/osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneSkinFallbacks.cs
@@ -29,12 +29,12 @@ namespace osu.Game.Rulesets.Osu.Tests
public class TestSceneSkinFallbacks : TestSceneOsuPlayer
{
private readonly TestSource testUserSkin;
- private readonly TestSource testBeatmapSkin;
+ private readonly BeatmapTestSource testBeatmapSkin;
public TestSceneSkinFallbacks()
{
testUserSkin = new TestSource("user");
- testBeatmapSkin = new TestSource("beatmap");
+ testBeatmapSkin = new BeatmapTestSource();
}
[Test]
@@ -80,15 +80,15 @@ namespace osu.Game.Rulesets.Osu.Tests
public class CustomSkinWorkingBeatmap : ClockBackedTestWorkingBeatmap
{
- private readonly ISkinSource skin;
+ private readonly IBeatmapSkin skin;
- public CustomSkinWorkingBeatmap(IBeatmap beatmap, Storyboard storyboard, IFrameBasedClock frameBasedClock, AudioManager audio, ISkinSource skin)
+ public CustomSkinWorkingBeatmap(IBeatmap beatmap, Storyboard storyboard, IFrameBasedClock frameBasedClock, AudioManager audio, IBeatmapSkin skin)
: base(beatmap, storyboard, frameBasedClock, audio)
{
this.skin = skin;
}
- protected override ISkin GetSkin() => skin;
+ protected override IBeatmapSkin GetSkin() => skin;
}
public class SkinProvidingPlayer : TestPlayer
@@ -112,6 +112,14 @@ namespace osu.Game.Rulesets.Osu.Tests
}
}
+ private class BeatmapTestSource : TestSource, IBeatmapSkin
+ {
+ public BeatmapTestSource()
+ : base("beatmap")
+ {
+ }
+ }
+
public class TestSource : ISkinSource
{
private readonly string identifier;
diff --git a/osu.Game.Tests/Gameplay/TestSceneStoryboardSamples.cs b/osu.Game.Tests/Gameplay/TestSceneStoryboardSamples.cs
index b30870d057..bc9528beb6 100644
--- a/osu.Game.Tests/Gameplay/TestSceneStoryboardSamples.cs
+++ b/osu.Game.Tests/Gameplay/TestSceneStoryboardSamples.cs
@@ -116,7 +116,7 @@ namespace osu.Game.Tests.Gameplay
AddAssert("sample playback rate matches mod rates", () => sample.Channel.AggregateFrequency.Value == expectedRate);
}
- private class TestSkin : LegacySkin
+ private class TestSkin : LegacySkin, IBeatmapSkin
{
public TestSkin(string resourceName, AudioManager audioManager)
: base(DefaultLegacySkin.Info, new TestResourceStore(resourceName), audioManager, "skin.ini")
@@ -156,7 +156,7 @@ namespace osu.Game.Tests.Gameplay
this.audio = audio;
}
- protected override ISkin GetSkin() => new TestSkin("test-sample", audio);
+ protected override IBeatmapSkin GetSkin() => new TestSkin("test-sample", audio);
}
private class TestDrawableStoryboardSample : DrawableStoryboardSample
diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs
index 39c5ccab27..44728cc251 100644
--- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs
+++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs
@@ -140,7 +140,7 @@ namespace osu.Game.Beatmaps
return storyboard;
}
- protected override ISkin GetSkin()
+ protected override IBeatmapSkin GetSkin()
{
try
{
diff --git a/osu.Game/Beatmaps/IWorkingBeatmap.cs b/osu.Game/Beatmaps/IWorkingBeatmap.cs
index 31975157a0..aac41725a9 100644
--- a/osu.Game/Beatmaps/IWorkingBeatmap.cs
+++ b/osu.Game/Beatmaps/IWorkingBeatmap.cs
@@ -42,9 +42,9 @@ namespace osu.Game.Beatmaps
Storyboard Storyboard { get; }
///
- /// Retrieves the which this provides.
+ /// Retrieves the which this provides.
///
- ISkin Skin { get; }
+ IBeatmapSkin Skin { get; }
///
/// Constructs a playable from using the applicable converters for a specific .
diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs
index b4bcf285b9..163b62a55c 100644
--- a/osu.Game/Beatmaps/WorkingBeatmap.cs
+++ b/osu.Game/Beatmaps/WorkingBeatmap.cs
@@ -44,7 +44,7 @@ namespace osu.Game.Beatmaps
background = new RecyclableLazy(GetBackground, BackgroundStillValid);
waveform = new RecyclableLazy(GetWaveform);
storyboard = new RecyclableLazy(GetStoryboard);
- skin = new RecyclableLazy(GetSkin);
+ skin = new RecyclableLazy(GetSkin);
total_count.Value++;
}
@@ -275,10 +275,10 @@ namespace osu.Game.Beatmaps
private readonly RecyclableLazy storyboard;
public bool SkinLoaded => skin.IsResultAvailable;
- public ISkin Skin => skin.Value;
+ public IBeatmapSkin Skin => skin.Value;
- protected virtual ISkin GetSkin() => new DefaultSkin();
- private readonly RecyclableLazy skin;
+ protected virtual IBeatmapSkin GetSkin() => new DefaultBeatmapSkin();
+ private readonly RecyclableLazy skin;
///
/// Transfer pieces of a beatmap to a new one, where possible, to save on loading.
diff --git a/osu.Game/Skinning/BeatmapSkinProvidingContainer.cs b/osu.Game/Skinning/BeatmapSkinProvidingContainer.cs
index 40335db697..346bfe53b8 100644
--- a/osu.Game/Skinning/BeatmapSkinProvidingContainer.cs
+++ b/osu.Game/Skinning/BeatmapSkinProvidingContainer.cs
@@ -11,7 +11,7 @@ namespace osu.Game.Skinning
///
/// A container which overrides existing skin options with beatmap-local values.
///
- public class BeatmapSkinProvidingContainer : SkinProvidingContainer
+ public class BeatmapSkinProvidingContainer : SkinProvidingContainer, IBeatmapSkin
{
private readonly Bindable beatmapSkins = new Bindable();
private readonly Bindable beatmapHitsounds = new Bindable();
@@ -21,7 +21,7 @@ namespace osu.Game.Skinning
protected override bool AllowTextureLookup(string componentName) => beatmapSkins.Value;
protected override bool AllowSampleLookup(ISampleInfo componentName) => beatmapHitsounds.Value;
- public BeatmapSkinProvidingContainer(ISkin skin)
+ public BeatmapSkinProvidingContainer(IBeatmapSkin skin)
: base(skin)
{
}
diff --git a/osu.Game/Skinning/DefaultBeatmapSkin.cs b/osu.Game/Skinning/DefaultBeatmapSkin.cs
new file mode 100644
index 0000000000..7b5ccd45c3
--- /dev/null
+++ b/osu.Game/Skinning/DefaultBeatmapSkin.cs
@@ -0,0 +1,9 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+namespace osu.Game.Skinning
+{
+ public class DefaultBeatmapSkin : DefaultSkin, IBeatmapSkin
+ {
+ }
+}
diff --git a/osu.Game/Skinning/IBeatmapSkin.cs b/osu.Game/Skinning/IBeatmapSkin.cs
new file mode 100644
index 0000000000..91caaed557
--- /dev/null
+++ b/osu.Game/Skinning/IBeatmapSkin.cs
@@ -0,0 +1,12 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+namespace osu.Game.Skinning
+{
+ ///
+ /// Marker interface for skins that originate from beatmaps.
+ ///
+ public interface IBeatmapSkin : ISkin
+ {
+ }
+}
diff --git a/osu.Game/Skinning/LegacyBeatmapSkin.cs b/osu.Game/Skinning/LegacyBeatmapSkin.cs
index d647bc4a2d..d53349dd11 100644
--- a/osu.Game/Skinning/LegacyBeatmapSkin.cs
+++ b/osu.Game/Skinning/LegacyBeatmapSkin.cs
@@ -11,7 +11,7 @@ using osu.Game.Rulesets.Objects.Legacy;
namespace osu.Game.Skinning
{
- public class LegacyBeatmapSkin : LegacySkin
+ public class LegacyBeatmapSkin : LegacySkin, IBeatmapSkin
{
protected override bool AllowManiaSkin => false;
protected override bool UseCustomSampleBanks => true;
diff --git a/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs b/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
index ab4fb38657..db080d889f 100644
--- a/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
+++ b/osu.Game/Tests/Beatmaps/HitObjectSampleTest.cs
@@ -188,7 +188,7 @@ namespace osu.Game.Tests.Beatmaps
this.resourceStore = resourceStore;
}
- protected override ISkin GetSkin() => new LegacyBeatmapSkin(skinBeatmapInfo, resourceStore, AudioManager);
+ protected override IBeatmapSkin GetSkin() => new LegacyBeatmapSkin(skinBeatmapInfo, resourceStore, AudioManager);
}
}
}