Merge branch 'master' into ruleset-resources-skin

This commit is contained in:
Salman Ahmed
2021-06-28 11:16:26 +03:00
128 changed files with 2553 additions and 498 deletions

View File

@ -45,35 +45,38 @@ namespace osu.Game.Skinning
};
}
[Resolved]
private SkinManager skinManager { get; set; }
[Resolved]
private ISkinSource skinSource { get; set; }
private SkinManager skinManager;
private ISkinSource parentSource;
private ResourceStoreBackedSkin rulesetResourcesSkin;
[BackgroundDependencyLoader]
private void load(GameHost host, AudioManager audio)
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
{
if (Ruleset.CreateResourceStore() is IResourceStore<byte[]> resources)
rulesetResourcesSkin = new ResourceStoreBackedSkin(resources, host, audio);
skinManager = parent.Get<SkinManager>();
UpdateSkins();
skinSource.SourceChanged += OnSourceChanged;
parentSource = parent.Get<ISkinSource>();
parentSource.SourceChanged += OnSourceChanged;
if (Ruleset.CreateResourceStore() is IResourceStore<byte[]> resources)
rulesetResourcesSkin = new ResourceStoreBackedSkin(resources, parent.Get<GameHost>(), parent.Get<AudioManager>());
// ensure sources are populated and ready for use before childrens' asynchronous load flow.
UpdateSkinSources();
return base.CreateChildDependencies(parent);
}
protected override void OnSourceChanged()
{
UpdateSkins();
UpdateSkinSources();
base.OnSourceChanged();
}
protected virtual void UpdateSkins()
protected virtual void UpdateSkinSources()
{
SkinSources.Clear();
foreach (var skin in skinSource.AllSources)
foreach (var skin in parentSource.AllSources)
{
switch (skin)
{
@ -114,8 +117,8 @@ namespace osu.Game.Skinning
{
base.Dispose(isDisposing);
if (skinSource != null)
skinSource.SourceChanged -= OnSourceChanged;
if (parentSource != null)
parentSource.SourceChanged -= OnSourceChanged;
rulesetResourcesSkin?.Dispose();
}

View File

@ -142,16 +142,16 @@ namespace osu.Game.Skinning
return base.ComputeHash(item, reader);
}
protected override async Task Populate(SkinInfo model, ArchiveReader archive, CancellationToken cancellationToken = default)
protected override Task Populate(SkinInfo model, ArchiveReader archive, CancellationToken cancellationToken = default)
{
await base.Populate(model, archive, cancellationToken).ConfigureAwait(false);
var instance = GetSkin(model);
model.InstantiationInfo ??= instance.GetType().GetInvariantInstantiationInfo();
if (model.Name?.Contains(".osk", StringComparison.OrdinalIgnoreCase) == true)
populateMetadata(model, instance);
return Task.CompletedTask;
}
private void populateMetadata(SkinInfo item, Skin instance)