The fact that the stuff "just worked" previously due to one load-bearing
detach in a random location is really scary because a lot of this was
just not written the way it is supposed to be.
The new version wasn't really working as expected, because the Y
position measurement only considered visible panels, while it was being
divided over all panels (including non-expanded groups or sets).
Rather than trying to divide across all panels, just choose a sane
number for the "highest pitch" sound and work with that as a constant.
Closes https://github.com/ppy/osu/issues/33900. I think. Stable's sample
lookup logic is horrible.
The user in the issue claimed they were hearing `drum-hitfinish2`, but
they were really hearing `drum-hitfinish`, because they're the same
`.wav` file in the beatmap. Now the reason *why* they were hearind
`drum-hitfinish` is that the sample control point was specifying
something like:
23946,-200,4,2,4,40,0,0
To decipher, this is:
- default sample bank of soft
- custom sample bank of 4
Taking one of the objects affected, namely 00:23:946 (2) - that's a
slider with finish addition and drum addition bank on the slider head.
The slider head is thus attempting to play `soft-hitnormal4` and
`drum-hitfinish4`.
Neither `soft-hitnormal4` or `soft-hitnormal` exist in the beatmap, so
that plays fine via falling back to user skin's `soft-hitnormal`, but
`drum-hitfinish4` ends up falling back to `drum-hitfinish` which *does*
exist in the beatmap skin and thus plays wrongly from the beatmap skin
rather than the user skin.
I have no idea how to ensure this is correct across every beatmap and
skin out there so my approach is to just spray and pray (and rely on
issue reports I guess). I *think* this matches the stable logic which is
nestled within
https://github.com/peppy/osu-stable-reference/blob/a5e5fe6ef240505d13526cf32783cad261e9bd8b/osu!/Audio/AudioEngine.cs#L1136-L1230
but honestly if you put a gun to my head I couldn't be sure if it
matches completely in every possible circumstance or not.
Closes https://github.com/ppy/osu/issues/33877.
Most likely regressed when the user tags were changed such that the
loading spinner that shows on adding/removing a vote was introdiced to
every individual tag separately. This in turn means that the
`LoadingLayer` responsible for showing the spinner also briefly consumes
all input when visible, which also means that the control briefly
becomes unhovered, breaking the logic.
This probably doesn't work on mobile because mobile input sucks. On iOS
simulator it looks somewhat fine in that the tags don't move until you
touch the screen anywhere else which seems okay if that's what actually
what happens on device as well. And if it isn't I'm not sure I can do
anything sane about it anyway.