-
-
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
Adjust mania hit windows with DT/NC/HT/DC gameplay rate #24636
Conversation
I'm generally quite ok with this diff code-wise, but is it possible to have some testing here, along the lines of Alternatively, do you have a manual testing methodology you can suggest here? |
There was a problem hiding this 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
osu.Game.Rulesets.Mania.Tests/Mods/TestSceneManiaModDoubleTime.cs
Outdated
Show resolved
Hide resolved
{ | ||
public HitWindows HitWindows { get; set; } = new ManiaHitWindows(); |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
Resolves #24603
I had two attempts at this:
HitWindows
proxy methods toDrawableManiaHitObject
that applies local adjustments.BarHitErrorMeter
.BarHitErrorMeter
, minimal API consideration.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 thatBarHitErrorMeter
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.