mirror of
https://github.com/ppy/osu.git
synced 2025-01-06 09:03:01 +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 class CatchLegacySkinTransformer : LegacySkinTransformer
|
||||||
{
|
{
|
||||||
|
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasPear;
|
||||||
|
|
||||||
|
private bool hasPear => GetTexture("fruit-pear") != null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For simplicity, let's use legacy combo font texture existence as a way to identify legacy skins from default.
|
/// For simplicity, let's use legacy combo font texture existence as a way to identify legacy skins from default.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -49,7 +53,7 @@ namespace osu.Game.Rulesets.Catch.Skinning.Legacy
|
|||||||
switch (catchSkinComponent.Component)
|
switch (catchSkinComponent.Component)
|
||||||
{
|
{
|
||||||
case CatchSkinComponents.Fruit:
|
case CatchSkinComponents.Fruit:
|
||||||
if (GetTexture("fruit-pear") != null)
|
if (hasPear)
|
||||||
return new LegacyFruitPiece();
|
return new LegacyFruitPiece();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -19,6 +19,8 @@ namespace osu.Game.Rulesets.Mania.Skinning.Legacy
|
|||||||
{
|
{
|
||||||
public class ManiaLegacySkinTransformer : LegacySkinTransformer
|
public class ManiaLegacySkinTransformer : LegacySkinTransformer
|
||||||
{
|
{
|
||||||
|
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasKeyTexture.Value;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Mapping of <see cref="HitResult"/> to their corresponding
|
/// Mapping of <see cref="HitResult"/> to their corresponding
|
||||||
/// <see cref="LegacyManiaSkinConfigurationLookups"/> value.
|
/// <see cref="LegacyManiaSkinConfigurationLookups"/> value.
|
||||||
|
@ -13,6 +13,8 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
|
|||||||
{
|
{
|
||||||
public class OsuLegacySkinTransformer : LegacySkinTransformer
|
public class OsuLegacySkinTransformer : LegacySkinTransformer
|
||||||
{
|
{
|
||||||
|
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasHitCircle.Value;
|
||||||
|
|
||||||
private readonly Lazy<bool> hasHitCircle;
|
private readonly Lazy<bool> hasHitCircle;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -14,8 +14,13 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
|
|||||||
{
|
{
|
||||||
public class TaikoLegacySkinTransformer : LegacySkinTransformer
|
public class TaikoLegacySkinTransformer : LegacySkinTransformer
|
||||||
{
|
{
|
||||||
|
public override bool IsProvidingLegacyResources => base.IsProvidingLegacyResources || hasHitCircle || hasBarLeft;
|
||||||
|
|
||||||
private readonly Lazy<bool> hasExplosion;
|
private readonly Lazy<bool> hasExplosion;
|
||||||
|
|
||||||
|
private bool hasHitCircle => GetTexture("taikohitcircle") != null;
|
||||||
|
private bool hasBarLeft => GetTexture("taiko-bar-left") != null;
|
||||||
|
|
||||||
public TaikoLegacySkinTransformer(ISkin skin)
|
public TaikoLegacySkinTransformer(ISkin skin)
|
||||||
: base(skin)
|
: base(skin)
|
||||||
{
|
{
|
||||||
@ -42,14 +47,14 @@ namespace osu.Game.Rulesets.Taiko.Skinning.Legacy
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
case TaikoSkinComponents.InputDrum:
|
case TaikoSkinComponents.InputDrum:
|
||||||
if (GetTexture("taiko-bar-left") != null)
|
if (hasBarLeft)
|
||||||
return new LegacyInputDrum();
|
return new LegacyInputDrum();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
case TaikoSkinComponents.CentreHit:
|
case TaikoSkinComponents.CentreHit:
|
||||||
case TaikoSkinComponents.RimHit:
|
case TaikoSkinComponents.RimHit:
|
||||||
if (GetTexture("taikohitcircle") != null)
|
if (hasHitCircle)
|
||||||
return new LegacyHit(taikoComponent.Component);
|
return new LegacyHit(taikoComponent.Component);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -67,9 +67,12 @@ namespace osu.Game.Skinning
|
|||||||
return sampleInfo is StoryboardSampleInfo || beatmapHitsounds.Value;
|
return sampleInfo is StoryboardSampleInfo || beatmapHitsounds.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private readonly ISkin skin;
|
||||||
|
|
||||||
public BeatmapSkinProvidingContainer(ISkin skin)
|
public BeatmapSkinProvidingContainer(ISkin skin)
|
||||||
: base(skin)
|
: base(skin)
|
||||||
{
|
{
|
||||||
|
this.skin = skin;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
|
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
|
||||||
@ -84,11 +87,21 @@ namespace osu.Game.Skinning
|
|||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load(SkinManager skins)
|
||||||
{
|
{
|
||||||
beatmapSkins.BindValueChanged(_ => TriggerSourceChanged());
|
beatmapSkins.BindValueChanged(_ => TriggerSourceChanged());
|
||||||
beatmapColours.BindValueChanged(_ => TriggerSourceChanged());
|
beatmapColours.BindValueChanged(_ => TriggerSourceChanged());
|
||||||
beatmapHitsounds.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>
|
/// </summary>
|
||||||
public abstract class LegacySkinTransformer : SkinTransformer
|
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)
|
protected LegacySkinTransformer(ISkin skin)
|
||||||
: base(skin)
|
: base(skin)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user