Skip to content

Commit

Permalink
Fix lookups of hit circle slider pieces potentially using wrong sourc…
Browse files Browse the repository at this point in the history
…e skin

Addresses #30927.
  • Loading branch information
peppy committed Dec 10, 2024
1 parent d8e545e commit dae380b
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions osu.Game.Rulesets.Osu/Skinning/Legacy/LegacyMainCirclePiece.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,22 @@ public LegacyMainCirclePiece(string? priorityLookupPrefix = null, bool hasNumber
[BackgroundDependencyLoader]
private void load()
{
const string base_lookup = @"hitcircle";

var drawableOsuObject = (DrawableOsuHitObject?)drawableObject;

// As a precondition, ensure that any prefix lookups are run against the skin which is providing "hitcircle".
// This is to correctly handle a case such as:
//
// - Beatmap provides `hitcircle`
// - User skin provides `sliderstartcircle`
//
// In such a case, the `hitcircle` should be used for slider start circles rather than the user's skin override.
var provider = skin.FindProvider(s => s.GetTexture(base_lookup) != null) ?? skin;

// if a base texture for the specified prefix exists, continue using it for subsequent lookups.
// otherwise fall back to the default prefix "hitcircle".
string circleName = (priorityLookupPrefix != null && skin.GetTexture(priorityLookupPrefix) != null) ? priorityLookupPrefix : @"hitcircle";
string circleName = (priorityLookupPrefix != null && provider.GetTexture(priorityLookupPrefix) != null) ? priorityLookupPrefix : base_lookup;

Vector2 maxSize = OsuHitObject.OBJECT_DIMENSIONS * 2;

Expand All @@ -70,7 +81,7 @@ private void load()
// expected behaviour in this scenario is not showing the overlay, rather than using hitcircleoverlay.png.
InternalChildren = new[]
{
CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTexture(circleName)?.WithMaximumSize(maxSize) })
CircleSprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = provider.GetTexture(circleName)?.WithMaximumSize(maxSize) })
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Expand All @@ -79,7 +90,7 @@ private void load()
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = skin.GetTexture(@$"{circleName}overlay")?.WithMaximumSize(maxSize) })
Child = OverlaySprite = new LegacyKiaiFlashingDrawable(() => new Sprite { Texture = provider.GetTexture(@$"{circleName}overlay")?.WithMaximumSize(maxSize) })
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Expand Down

0 comments on commit dae380b

Please sign in to comment.