Skip to content
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

Track the full size of the follow circle at all times #18795

Merged
merged 2 commits into from
Jun 28, 2022

Conversation

smoogipoo
Copy link
Contributor

@smoogipoo smoogipoo commented Jun 21, 2022

Alternative to / closes #14832

The above PR also has further changes related to slider ticks/animations/etc, but I think those should be done in more granular PRs instead, if at all.

Abstract

The main reason for this PR is that I'm worried that the current implementation of follow circles in non-classic mode leads to an edge case where a player may hit a (kick-)slider that is not supposed to be followed (i.e. the slider path is in the opposite direction of the beatmap flow) on the very edge of the circle and lose tracking.

Changes

There are two pathways that I considered:

  1. Tracking a virtual follow circle area (this PR).
  2. Speeding up the follow circle animation such that it will always cover the cursor for duration of the animation (https://github.com/ppy/osu/compare/master...smoogipoo:full-size-follow-circle?expand=1).

I chose to add a virtual follow circle area because speeding up the animation makes it a bit jarring. I think the 300ms OutQuint animation looks pretty nice, and it would need to be sped up by 2-6x most of the time, at which point we might as well remove the animation.
One workaround I considered is changing the easing mode at smaller durations, but I don't think that's a good idea. I think it looks better if the animation is consistent in both duration and easing.

This PR also removes the classic mod setting.

Extra edge case

While investigating (2), I also found out that the follow circle size is always 1 frame behind due to transforms. That's why in (2) I had to change SliderBall to update the tracking value in UpdateAfterChildren(), in order to update it after the follow circle transforms updated.

Using the virtual follow circle area eliminates this issue.

Testing

Aside from the provided test case, I've played a bit with the previous classic mod (instant animation), and both of the proposed changes. It's subtle, but I still find this is the best looking variant.

Data

The following is a table of the minimum slider velocity at which master (non-classic) loses tracking at varying circle sizes in the situation from the abstract. Tracking is lost at all higher slider velocity values.

circle size velocity
0 4.0
1 4.0
2 4.0
3 4.0
4 3.0
5 3.0
6 3.0
7 2.0
8 2.0
9 2.0
10 1.0

Given that the above was tested at 60BPM, and SV increases as BPM increases, I think it's fair to say that the above will be the case more often than not.

@peppy
Copy link
Member

peppy commented Jun 22, 2022

Just to confirm, this means if analysing gameplay frame by frame you will see frames where the mouse is outside the follow circle but tracking isn't broken?

@smoogipoo
Copy link
Contributor Author

That's correct

@peppy peppy self-requested a review June 22, 2022 05:33
@peppy
Copy link
Member

peppy commented Jun 28, 2022

Going to merge this for now, and revisit when introducing the gameplay UI revamp. I agree with this from a gameplay perspective, and have a few ideas how this can be resolved in the visual department in the future to show the user the actual tracking area in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

2 participants