Fix beatmap skin always overriding ruleset HUD components #29427
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The beatmap skin gets a legacy transformer applied to it, and the legacy transformer makes the beatmap skin always return the ruleset-specific HUD components as legacy regardless of availability of assets.
This does not happen on the global/non-ruleset-specific target because of this line:
osu/osu.Game/Skinning/LegacyBeatmapSkin.cs
Lines 58 to 61 in 98c65f3
So basically do the same on each transformer that attempts to return a list of components.
This adds one extra level of complexity and there are questions to ask about this direction such as "what if there are assets available for one part of the HUD component but not the other?", but this is temporary at best and the entire skinning system will be rethought after having this concept of "ruleset-specific skinning components".
This will also solve the issue mentioned in #26254 (comment) / #26254 (review) (technically #26254 will have to apply this change to the mania transformer, it can't be done here).