diff --git a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs index d74f885573..d4a403fbd2 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Legacy/OsuLegacySkinTransformer.cs @@ -13,6 +13,10 @@ namespace osu.Game.Rulesets.Osu.Skinning.Legacy { private Lazy hasHitCircle; + private Lazy spinnerStyle; + + private bool hasSpinner => spinnerStyle.Value != SpinnerStyle.Modern; + /// /// 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(() => Source.GetTexture("hitcircle") != null); + + spinnerStyle = new Lazy(() => + { + 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(lookup); } + + private enum SpinnerStyle + { + NewLegacy, + OldLegacy, + Modern, + } } }