Closed hongaaronc closed 1 year ago
Maybe we could add 1/3 Muzu as a warning. Probably wouldn't do problem tho, since I think 1/3 finisher might make sense for some swing or 6/8 songs.
Not ranked but I could see 1/3 + finisher being used like how I did in Muzu here (6/8 song). This is very low BPM though and 1/3 is practically used like how 1/2 would normally be: https://osu.ppy.sh/beatmapsets/1856271
Btw... on the note of slower BPM songs, should https://github.com/Hiviexd/MVTaikoChecks/blob/cab8008e4ca065d356311b16a2345fe8ff10e5ef/Checks/Compose/UnrankableFinisherCheck.cs#L184 use timing.GetNormalizedMsPerBeat()
instead of timing.msPerBeat
- to add BPM scaling?
I wasn't sure but I guess thinking about it more, I think it should probably?
probably a good idea to consider bpm scaling for this
Ok added both the BPM scaling and 1/3 + finisher warning.
Summary
Resolves #5
This PR fixes all the issues with the
UnrankableFinishersCheck
.Approach
Added a utility class (
TaikoUtils.cs
) which has a bunch of easy methods for checking a note's relationship to a pattern:IsDon()
IsFinisher()
IsAtBeginningOfPattern()
IsAtEndOfPattern()
IsInMiddleOfPattern()
(unused currently)IsNotInPattern()
(unused currently)GetPatternSpacingMs()
These methods are implemented by following this logic:
For the actual check, I've added several dictionaries to define the first snap divisor that counts as a violation in various cases, with a Problem severity version and a Warning severity version:
maximalGapBeats
: Triggered if the pattern is <= this snap divisor regardless of any other conditionsmaximalGapBeatsRequiringColorChangeBefore
: Triggered if note doesn't have a color change before it and isn't the first note, and the pattern is <= this snap divisormaximalGapBeatsRequiringColorChangeAfter
: Triggered if note doesn't have a color change in the note after it and isn't the last note, and the pattern is <= this snap divisormaximalGapBeatsRequiringFinalNote
: Triggered if note is the final note in the pattern, and the pattern is <= this snap divisorTesting