diff --git a/osu.Game/Skinning/RulesetResourcesSkin.cs b/osu.Game/Skinning/ResourcesSkin.cs
similarity index 61%
rename from osu.Game/Skinning/RulesetResourcesSkin.cs
rename to osu.Game/Skinning/ResourcesSkin.cs
index 5cf2eec338..3d17d7cc3d 100644
--- a/osu.Game/Skinning/RulesetResourcesSkin.cs
+++ b/osu.Game/Skinning/ResourcesSkin.cs
@@ -13,38 +13,32 @@ using osu.Framework.Graphics.Textures;
using osu.Framework.IO.Stores;
using osu.Framework.Platform;
using osu.Game.Audio;
-using osu.Game.Rulesets;
namespace osu.Game.Skinning
{
///
- /// An providing the resources of the ruleset for accessibility during lookups.
+ /// An that uses an underlying with namespaces for resources retrieval.
///
- public class RulesetResourcesSkin : ISkin
+ public class ResourcesSkin : ISkin
{
- private readonly TextureStore? textures;
- private readonly ISampleStore? samples;
+ private readonly TextureStore textures;
+ private readonly ISampleStore samples;
- public RulesetResourcesSkin(Ruleset ruleset, GameHost host, AudioManager audio)
+ public ResourcesSkin(IResourceStore resources, GameHost host, AudioManager audio)
{
- IResourceStore? resources = ruleset.CreateResourceStore();
-
- if (resources != null)
- {
- textures = new TextureStore(host.CreateTextureLoaderStore(new NamespacedResourceStore(resources, @"Textures")));
- samples = audio.GetSampleStore(new NamespacedResourceStore(resources, @"Samples"));
- }
+ textures = new TextureStore(host.CreateTextureLoaderStore(new NamespacedResourceStore(resources, @"Textures")));
+ samples = audio.GetSampleStore(new NamespacedResourceStore(resources, @"Samples"));
}
public Drawable? GetDrawableComponent(ISkinComponent component) => null;
- public Texture? GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) => textures?.Get(componentName, wrapModeS, wrapModeT);
+ public Texture? GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) => textures.Get(componentName, wrapModeS, wrapModeT);
public ISample? GetSample(ISampleInfo sampleInfo)
{
foreach (var lookup in sampleInfo.LookupNames)
{
- ISample? sample = samples?.Get(lookup);
+ ISample? sample = samples.Get(lookup);
if (sample != null)
return sample;
}
@@ -56,7 +50,7 @@ namespace osu.Game.Skinning
#region Disposal
- ~RulesetResourcesSkin()
+ ~ResourcesSkin()
{
// required to potentially clean up sample store from audio hierarchy.
Dispose(false);
@@ -77,8 +71,8 @@ namespace osu.Game.Skinning
isDisposed = true;
- textures?.Dispose();
- samples?.Dispose();
+ textures.Dispose();
+ samples.Dispose();
}
#endregion
diff --git a/osu.Game/Skinning/RulesetSkinProvidingContainer.cs b/osu.Game/Skinning/RulesetSkinProvidingContainer.cs
index 83e2d398f9..54bf91523f 100644
--- a/osu.Game/Skinning/RulesetSkinProvidingContainer.cs
+++ b/osu.Game/Skinning/RulesetSkinProvidingContainer.cs
@@ -6,6 +6,7 @@ using osu.Framework.Allocation;
using osu.Framework.Audio;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.IO.Stores;
using osu.Framework.Platform;
using osu.Game.Beatmaps;
using osu.Game.Rulesets;
@@ -87,11 +88,18 @@ namespace osu.Game.Skinning
}
}
- var defaultSkinIndex = SkinSources.IndexOf(skinManager.DefaultSkin);
- if (defaultSkinIndex >= 0)
- SkinSources.Insert(defaultSkinIndex, new RulesetResourcesSkin(Ruleset, host, audio));
- else
- SkinSources.Add(new RulesetResourcesSkin(Ruleset, host, audio));
+ if (Ruleset.CreateResourceStore() is IResourceStore resources)
+ {
+ int defaultSkinIndex = SkinSources.IndexOf(skinManager.DefaultSkin);
+
+ if (defaultSkinIndex >= 0)
+ SkinSources.Insert(defaultSkinIndex, new ResourcesSkin(resources, host, audio));
+ else
+ {
+ // Tests may potentially override the SkinManager with another source that doesn't include it in AllSources.
+ SkinSources.Add(new ResourcesSkin(resources, host, audio));
+ }
+ }
}
protected ISkin GetLegacyRulesetTransformedSkin(ISkin legacySkin)