1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 15:33:05 +08:00

Extract legacy spinner presence to lazy field

This commit is contained in:
Salman Ahmed 2021-03-02 21:37:25 +03:00
parent e4afe717d5
commit 1841a4d1c9

View File

@ -13,6 +13,10 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
{
private Lazy<bool> hasHitCircle;
private Lazy<SpinnerStyle> spinnerStyle;
private bool hasSpinner => spinnerStyle.Value != SpinnerStyle.Modern;
/// <summary>
/// On osu-stable, hitcircles have 5 pixels of transparent padding on each side to allow for shadows etc.
/// Their hittable area is 128px, but the actual circle portion is 118px.
@ -30,6 +34,19 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
private void sourceChanged()
{
hasHitCircle = new Lazy<bool>(() => Source.GetTexture("hitcircle") != null);
spinnerStyle = new Lazy<SpinnerStyle>(() =>
{
bool hasBackground = Source.GetTexture("spinner-background") != null;
if (Source.GetTexture("spinner-top") != null && !hasBackground)
return SpinnerStyle.NewLegacy;
if (hasBackground)
return SpinnerStyle.OldLegacy;
return SpinnerStyle.Modern;
});
}
public override Drawable GetDrawableComponent(ISkinComponent component)
@ -110,11 +127,9 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
};
case OsuSkinComponents.SpinnerBody:
bool hasBackground = Source.GetTexture("spinner-background") != null;
if (Source.GetTexture("spinner-top") != null && !hasBackground)
if (spinnerStyle.Value == SpinnerStyle.NewLegacy)
return new LegacyNewStyleSpinner();
else if (hasBackground)
else if (spinnerStyle.Value == SpinnerStyle.OldLegacy)
return new LegacyOldStyleSpinner();
return null;
@ -151,5 +166,12 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy
return Source.GetConfig<TLookup, TValue>(lookup);
}
private enum SpinnerStyle
{
NewLegacy,
OldLegacy,
Modern,
}
}
}