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

Adjust mania hit windows with DT/NC/HT/DC gameplay rate #24636

Merged
merged 4 commits into from
Sep 4, 2023

Conversation

smoogipoo
Copy link
Contributor

Resolves #24603

I had two attempts at this:

  1. Add local HitWindows proxy methods to DrawableManiaHitObject that applies local adjustments.
    1. Advantage: Works for all mods.
    2. Disadvantage: Needs significant supporting code/API considerations for BarHitErrorMeter.
  2. Adjust hit windows via mods.
    1. Advantage: Works for BarHitErrorMeter, minimal API consideration.
    2. Disadvantage: Doesn't immediately work for time-ramping mods (ModWindUp).

This PR implements option 2, with the idea that time-ramping mods are more of an edge case that could be implemented later.

A sample implementation for time ramping mods may be found here: https://github.com/smoogipoo/osu/tree/mania-time-ramp-mod-hit-windows , which is exposed as a bindable via an IApplicableHitWindows interface that BarHitErrorMeter could bind to. I'll PR this as a follow up if this PR is accepted.

I'm unsure of whether the over-engineering in this PR (and the follow-up) is justified. If not, I'll implement locally in the relevant mods, figure out something better, or accept any suggestions.

@bdach
Copy link
Collaborator

bdach commented Aug 24, 2023

I'm generally quite ok with this diff code-wise, but is it possible to have some testing here, along the lines of TestSceneManiaHoldNoteInput? I'd be more confident having it.

Alternatively, do you have a manual testing methodology you can suggest here?

@pull-request-size pull-request-size bot added size/L and removed size/M labels Aug 28, 2023
Copy link
Collaborator

@bdach bdach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my rather rudimentary testing, looks to work okay

{
public HitWindows HitWindows { get; set; } = new ManiaHitWindows();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not super sure about this initialisation either, but I guess the value is never used so it's probably okay... It just looks a smidge weird that this sets no-rate windows and the actual magic that undoes rate happens via the default interface implementation.

Is changing to a get-only property or a protected method something you'd be willing to entertain? Just for slightly more explicit code, is all.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can't be get-only if the implementation modifies it. Perhaps CreateDefaultHitWindows() is a possibility?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would work for me, I was just curious if you had any other objections (related to performance, or to the follow-up PR that does wind up/down that you talked about in the OP).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's still an isolated implementation, I'm fine with any if it gets the job done. We can figure out WU/WD when we cross that road.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit more complicated to make work, so let's keep it as is for now. The likely path here is to extract the interface implementation into an auxiliary class (HitWindowRateAdjuster, or something like that).

It would be good to tackle this once we know the exact requirements with consideration for WU/WD.

@bdach bdach enabled auto-merge September 4, 2023 07:46
@bdach bdach disabled auto-merge September 4, 2023 08:26
@bdach bdach merged commit ffcc00c into ppy:master Sep 4, 2023
cdwcgt added a commit to cdwcgt/osu-wiki that referenced this pull request Sep 10, 2023
@smoogipoo smoogipoo deleted the mania-hitwindow-audio-rate-2 branch September 11, 2023 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

Audio rate adjustments should not affect timing windows
3 participants