The previous logic was very wrong, as the check would only occur on each
beat. But that's not how kiai sections work – they can be placed at any
timestamp, even if that doesn't align with a beat.
In addition, the rate limiting has been removed because it didn't exist
on stable and causes some fountains to be missed. Overlap scenarios are
already handled internally by the `StarFountain` class.
Closes https://github.com/ppy/osu/issues/31855.
Closes https://github.com/ppy/osu/issues/31915.
Reproduction of aforementioned issue requires 1280x720 resolution, which
should also be a good way to confirm that this does anything.
To me this is also equal-parts-bugfix, equal-parts-code-quality PR,
because tell me: what on earth was this code ever doing at
`ComposeBlueprintContainer` level? Nudging by one playfield-space-unit
doesn't even *make sense* in something like taiko or mania.
Closes https://github.com/ppy/osu/issues/31909.
Previously: https://github.com/ppy/osu/pull/30062.
Happening because of rounding errors - in this case the beat index
pre-flooring was something like a 0.003 off of a full beat, which would
get floored down rather than rounded up which created the discrepancy.
But also we don't want to round *too* far, which is why this
frankenstein solution has to exist I think. This is probably all
exacerbated by stable not handling decimal control point start times.
Would add tests if not for the fact that this is like extremely annoying
to test.
See
https://discord.com/channels/188630481301012481/1097318920991559880/1334716356582572074.
On `master` this is actually worse and shows thousands of pp points, so
I guess `pp-dev` is a comparable improvement, but still flagrantly
wrong. The reason why `pp-dev` is better is the `speedDeviation == null`
guard at the start of `computeSpeedValue()` which turns off the rest of
the calculation, therefore not exposing the bug where
`relevantTotalDiff` can go negative. I still guarded it in this commit
just for safety's sake given it is clear it can do very wrong stuff.