Unsure about this one, but I find the preceding commit to be very
lacking in explaining to the user why the editor don't work. Shining
some things red may help aid understanding.
* Fix mania editor timestamp generation being culture-dependent
Mostly closes https://github.com/ppy/osu/issues/35809.
* Add failing test for notes with fractions
* Round note time when copying out timestamp & apply half-millisecond tolerance when parsing
Closes the rest of https://github.com/ppy/osu/issues/35809.
One issue here was that while the timestamp generation would allow
fractional object timestamps to be output, the parsing (via
`selection_regex`) would *reject* fractional timestamps, therefore
making lazer incompatible even with itself.
The other is that rounding is probably fine to do anyway for
interoperability with stable. I'd hope nobody actually *needs*
sub-millisecond precision but I'm ready to be proven wrong by some
aspire jokester.
* Specify invariant culture when writing out combo indices to editor timestamp in other rulesets
Pretty sure this is just a much-of-muchness because it's integers but
might as well if I'm spending time here already.
Closes https://github.com/ppy/osu/issues/32289.
There are two possible choices here: either pulling the lower bound of
the clamp down to `HitObject.Path.CalculatedDistance`, or pulling the
higher bound up to `minDistance`, if it happens to be larger than the
path's calculated distance.
Both options are a bit weird; pulling down can result in unsnapped
sliders when attempting to drag a slider's end when on a lower beat
divisor than was used to place the slider, and pulling up can result in
weird sliders wherein they get extended beyond their path's definition
with a weird linear section at the end without an anchor that is tangent
to the slider shape's end. I decided the first one was less weird, but
I'm open to discuss further.
Mainly an issue with "limit distance snap to current time". Reported in
https://discord.com/channels/90072389919997952/1259818301517725707/1369037235797753999.
This slightly changes behaviour of distance snap when the mouse is near
the edges of the screen (will turn off snap rather than clamp to edge as
previously), but I think that's probably fine.
See previous commit for partial rationale.
There's an argument to be made about the `NaN`-spreading semantics being
desirable because at least something will loudly fail in that case, but
I'm not so sure about that these days. It feels like either way if
`NaN`s are produced, then things are outside of any control, and chances
are the game can probably continue without crashing. And, this move
reduces our dependence on osuTK, which has already been living on
borrowed time for years now and is only awaiting someone brave to go
excise it.