-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove slider head circle movement (and remove setting from "classic" mod) #24810
Remove slider head circle movement (and remove setting from "classic" mod) #24810
Conversation
It's unfortunate that fading can't be used. If it's not an issue to undermine snaking sliders or have jarring visuals in edge cases, then this is probably the next best solution. Would it be possible to have the slider body fade out quickly, like over 40ms, instead of immediately disappearing, or would that also require duplicating the slider path? |
The failing snaking test here probably needs to be removed or just adjusted to check that on miss the slider repeat stays in place: diff --git a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs
index 630049f408..aef7dcaa59 100644
--- a/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs
+++ b/osu.Game.Rulesets.Osu.Tests/TestSceneSliderSnaking.cs
@@ -135,9 +135,9 @@ public void TestSnakingDisabled(int sliderIndex)
}
[Test]
- public void TestRepeatArrowDoesNotMoveWhenHit()
+ public void TestRepeatArrowDoesNotMove([Values] bool useAutoplay)
{
- AddStep("enable autoplay", () => autoplay = true);
+ AddStep($"set autoplay to {useAutoplay}", () => autoplay = useAutoplay);
setSnaking(true);
CreateTest();
// repeat might have a chance to update its position depending on where in the frame its hit,
@@ -145,15 +145,6 @@ public void TestRepeatArrowDoesNotMoveWhenHit()
addCheckPositionChangeSteps(() => 16600, getSliderRepeat, positionAlmostSame);
}
- [Test]
- public void TestRepeatArrowMovesWhenNotHit()
- {
- AddStep("disable autoplay", () => autoplay = false);
- setSnaking(true);
- CreateTest();
- addCheckPositionChangeSteps(() => 16600, getSliderRepeat, positionDecreased);
- }
-
private void retrieveSlider(int index)
{
AddStep("retrieve slider at index", () => slider = (Slider)beatmap.HitObjects[index]);
I don't see how that can be reconciled with the new behaviour here (if slider head missed then don't snake out). However, something that is quite noticeable is that if a slider has its slider head missed, but then begins being tracked halfway through, it fades out much faster than if it is fully missed (to the point of appearing like it fades out instantly): 2023-09-14.13-38-16.mp4This probably wasn't visible previously because of a combination of 2 things:
Now it's in a weird state wherein a slider with a missed head will not snake (because of osu/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs Lines 319 to 322 in 5bda9a3
This may be both difficult to make happen, and I'm unsure if it's even worth it, since I had to slow down the animation to 1-2% to even notice the instant slider fadeout. |
Also this probably fixes #24464 (should verify) |
See my opening post. |
I misread, I thought it was talking about the idea of fading the part between the slider ball and slider head, which I assume was rejected for the same performance reasons, since it would solve problems that teleporting has. |
Good catch. |
Closes #24639.
I've gone with the most simple approach animation wise, which feels quite good to me: the snaking path will only begin snaking after the head circle is hit. I can see that others came to roughly the same consensus in the original discussion, so I don't think there will be too much contention over this change.
Things to note:
Here's how it looks in slow motion:
osu.Game.Rulesets.Osu.Tests.2023-09-14.at.08.59.08.mp4
It's important to note that in the majority of cases, these kinds of sliders are so fast you can't even catch this visually. It's usually hidden under the head / tail. Even when it's not, it's hard to catch:
osu.Game.Rulesets.Osu.Tests.2023-09-14.at.09.01.22.mp4
Finally, here's what missing a slider head completely looks like:
osu.Game.Rulesets.Osu.Tests.2023-09-14.at.09.01.51.mp4
(basically, as if snaking was not enabled)