Fix default skin not having resources or providing samples

This commit is contained in:
Dean Herbert 2021-05-27 11:48:48 +09:00
parent f6dee13991
commit 4fd89faaa4
2 changed files with 17 additions and 2 deletions

View File

@ -22,6 +22,8 @@ namespace osu.Game.Skinning
{ {
public class DefaultSkin : Skin public class DefaultSkin : Skin
{ {
private readonly IStorageResourceProvider resources;
public DefaultSkin(IStorageResourceProvider resources) public DefaultSkin(IStorageResourceProvider resources)
: this(SkinInfo.Default, resources) : this(SkinInfo.Default, resources)
{ {
@ -31,12 +33,23 @@ public DefaultSkin(IStorageResourceProvider resources)
public DefaultSkin(SkinInfo skin, IStorageResourceProvider resources) public DefaultSkin(SkinInfo skin, IStorageResourceProvider resources)
: base(skin, resources) : base(skin, resources)
{ {
this.resources = resources;
Configuration = new DefaultSkinConfiguration(); Configuration = new DefaultSkinConfiguration();
} }
public override Texture GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) => null; public override Texture GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT) => null;
public override ISample GetSample(ISampleInfo sampleInfo) => null; public override ISample GetSample(ISampleInfo sampleInfo)
{
foreach (var lookup in sampleInfo.LookupNames)
{
var sample = resources.AudioManager.Samples.Get(lookup);
if (sample != null)
return sample;
}
return null;
}
public override Drawable GetDrawableComponent(ISkinComponent component) public override Drawable GetDrawableComponent(ISkinComponent component)
{ {

View File

@ -39,7 +39,7 @@ public class SkinManager : ArchiveModelManager<SkinInfo, SkinFileInfo>, ISkinSou
private readonly IResourceStore<byte[]> legacyDefaultResources; private readonly IResourceStore<byte[]> legacyDefaultResources;
public readonly Bindable<Skin> CurrentSkin = new Bindable<Skin>(new DefaultSkin(null)); public readonly Bindable<Skin> CurrentSkin = new Bindable<Skin>();
public readonly Bindable<SkinInfo> CurrentSkinInfo = new Bindable<SkinInfo>(SkinInfo.Default) { Default = SkinInfo.Default }; public readonly Bindable<SkinInfo> CurrentSkinInfo = new Bindable<SkinInfo>(SkinInfo.Default) { Default = SkinInfo.Default };
public override IEnumerable<string> HandledExtensions => new[] { ".osk" }; public override IEnumerable<string> HandledExtensions => new[] { ".osk" };
@ -56,6 +56,8 @@ public SkinManager(Storage storage, DatabaseContextFactory contextFactory, GameH
this.legacyDefaultResources = legacyDefaultResources; this.legacyDefaultResources = legacyDefaultResources;
CurrentSkin.Value = new DefaultSkin(this);
CurrentSkinInfo.ValueChanged += skin => CurrentSkin.Value = GetSkin(skin.NewValue); CurrentSkinInfo.ValueChanged += skin => CurrentSkin.Value = GetSkin(skin.NewValue);
CurrentSkin.ValueChanged += skin => CurrentSkin.ValueChanged += skin =>
{ {