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.
Noticed in a flaky test with the changes to random, where the debounce
may be delayed to the point of thinking the selection is invalid even
though it's valid (timing woes, I cannot explain in words but I would
highly recommend smiling and nodding approach).
Previously, random selection would always be done at a *set* level. The
final operation of a random action would be "select the user's
recommended difficulty from this randomly selected set".
This makes no sense when sets are not grouped together at song select.
In fact, it is completely broken with the previous commit which adds
group-isolated random support – if we're grouping by difficulty and the
user's recommendation is not in the current group it would throw the
user into another group unexpectedly.
This fixes the issue by splitting out the random implementation into two
separate pathways depending on the carousel display mode.
User feedback is that it's no longer possible to see the applied rate
adjust change when it's non-default without hovering. This fixes that
issue.
I've adjusted the visuals a bit so you can still get a hint at which
mods are displayed, even when they are overflowing.