mirror of
https://github.com/ppy/osu.git
synced 2024-12-13 08:23:20 +08:00
Add legacy skin fallback when beatmap skin is providing resources
This commit is contained in:
parent
fd20515a6d
commit
8bf4ca4b53
@ -13,6 +13,10 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy
|
||||
{
|
||||
public class CatchLegacySkinTransformer : LegacySkinTransformer
|
||||
{
|
||||
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasPear;
|
||||
|
||||
private bool hasPear => GetTexture("fruit-pear") != null;
|
||||
|
||||
/// <summary>
|
||||
/// For simplicity, let's use legacy combo font texture existence as a way to identify legacy skins from default.
|
||||
/// </summary>
|
||||
@ -49,7 +53,7 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy
|
||||
switch (catchSkinComponent.Component)
|
||||
{
|
||||
case CatchSkinComponents.Fruit:
|
||||
if (GetTexture("fruit-pear") != null)
|
||||
if (hasPear)
|
||||
return new LegacyFruitPiece();
|
||||
|
||||
return null;
|
||||
|
@ -19,6 +19,8 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
|
||||
{
|
||||
public class ManiaLegacySkinTransformer : LegacySkinTransformer
|
||||
{
|
||||
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasKeyTexture.Value;
|
||||
|
||||
/// <summary>
|
||||
/// Mapping of <see cref="HitResult"/> to their corresponding
|
||||
/// <see cref="LegacyManiaSkinConfigurationLookups"/> value.
|
||||
|
@ -13,6 +13,8 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
||||
{
|
||||
public class OsuLegacySkinTransformer : LegacySkinTransformer
|
||||
{
|
||||
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasHitCircle.Value;
|
||||
|
||||
private readonly Lazy<bool> hasHitCircle;
|
||||
|
||||
/// <summary>
|
||||
|
@ -14,8 +14,13 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
|
||||
{
|
||||
public class TaikoLegacySkinTransformer : LegacySkinTransformer
|
||||
{
|
||||
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasHitCircle || hasBarLeft;
|
||||
|
||||
private readonly Lazy<bool> hasExplosion;
|
||||
|
||||
private bool hasHitCircle => GetTexture("taikohitcircle") != null;
|
||||
private bool hasBarLeft => GetTexture("taiko-bar-left") != null;
|
||||
|
||||
public TaikoLegacySkinTransformer(ISkin skin)
|
||||
: base(skin)
|
||||
{
|
||||
@ -42,14 +47,14 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
|
||||
return null;
|
||||
|
||||
case TaikoSkinComponents.InputDrum:
|
||||
if (GetTexture("taiko-bar-left") != null)
|
||||
if (hasBarLeft)
|
||||
return new LegacyInputDrum();
|
||||
|
||||
return null;
|
||||
|
||||
case TaikoSkinComponents.CentreHit:
|
||||
case TaikoSkinComponents.RimHit:
|
||||
if (GetTexture("taikohitcircle") != null)
|
||||
if (hasHitCircle)
|
||||
return new LegacyHit(taikoComponent.Component);
|
||||
|
||||
return null;
|
||||
|
@ -67,9 +67,12 @@ namespace osu.Game.Skinning
|
||||
return sampleInfo is StoryboardSampleInfo || beatmapHitsounds.Value;
|
||||
}
|
||||
|
||||
private readonly ISkin skin;
|
||||
|
||||
public BeatmapSkinProvidingContainer(ISkin skin)
|
||||
: base(skin)
|
||||
{
|
||||
this.skin = skin;
|
||||
}
|
||||
|
||||
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
|
||||
@ -84,11 +87,21 @@ namespace osu.Game.Skinning
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
private void load(SkinManager skins)
|
||||
{
|
||||
beatmapSkins.BindValueChanged(_ => TriggerSourceChanged());
|
||||
beatmapColours.BindValueChanged(_ => TriggerSourceChanged());
|
||||
beatmapHitsounds.BindValueChanged(_ => TriggerSourceChanged());
|
||||
|
||||
// If the beatmap skin looks to have skinnable resources, add the default classic skin as a fallback opportunity.
|
||||
if (skin is LegacySkinTransformer legacySkin && legacySkin.IsProvidingLegacyResources)
|
||||
{
|
||||
SetSources(new[]
|
||||
{
|
||||
skin,
|
||||
skins.DefaultClassicSkin
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,11 @@ namespace osu.Game.Skinning
|
||||
/// </summary>
|
||||
public abstract class LegacySkinTransformer : SkinTransformer
|
||||
{
|
||||
/// <summary>
|
||||
/// Whether the skin being transformed is able to provide legacy resources for the ruleset.
|
||||
/// </summary>
|
||||
public virtual bool IsProvidingLegacyResources => this.HasFont(LegacyFont.Combo);
|
||||
|
||||
protected LegacySkinTransformer(ISkin skin)
|
||||
: base(skin)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user