added TaikoGradualPerformanceAttributes

This commit is contained in:
MaxOhn
2021-11-24 02:48:26 +01:00
parent 9d02a5cc48
commit 1d88764d13
8 changed files with 627 additions and 620 deletions
+1
View File
@@ -17,6 +17,7 @@
- Added `ManiaGradualDifficultyAttributes`. Suitable to calculate a map's difficulty after every or every few objects instead of calling the `stars` function over and over.
- Added `ManiaGradualPerformanceAttributes`. Suitable to calculate the performance on a map after every or every few objects instead of using `ManiaPP` over and over.
- Added `TaikoGradualDifficultyAttributes`. Suitable to calculate a map's difficulty after every or every few objects instead of calling the `stars` function over and over.
- Added `TaikoGradualPerformanceAttributes`. Suitable to calculate the performance on a map after every or every few objects instead of using `TaikoPP` over and over.
# v0.3.0
+356
View File
@@ -0,0 +1,356 @@
osu file format v14
[General]
AudioFilename: audio.mp3
AudioLeadIn: 0
PreviewTime: 8074
Countdown: 0
SampleSet: Normal
StackLeniency: 0.7
Mode: 1
LetterboxInBreaks: 0
WidescreenStoryboard: 0
[Editor]
DistanceSpacing: 0.6
BeatDivisor: 4
GridSize: 16
TimelineZoom: 1.5
[Metadata]
Title:Inferno
TitleUnicode:インフェルノ
Artist:9mm Parabellum Bullet
ArtistUnicode:9mm Parabellum Bullet
Creator:Nofool
Version:Muzukashii
Source:ベルセルク
Tags:Berserk (2016)
BeatmapID:1028484
BeatmapSetID:481954
[Difficulty]
HPDrainRate:6
CircleSize:2
OverallDifficulty:5
ApproachRate:8
SliderMultiplier:1.4
SliderTickRate:1
[Events]
//Background and Video events
0,0,"berserk_armor_bg.jpg",0,0
//Break Periods
//Storyboard Layer 0 (Background)
//Storyboard Layer 1 (Fail)
//Storyboard Layer 2 (Pass)
//Storyboard Layer 3 (Foreground)
//Storyboard Sound Samples
[TimingPoints]
690,307.692307692308,3,1,0,100,1,0
15459,-100,3,1,0,100,0,1
22536,-100,3,1,0,100,0,0
37536,-125,3,1,0,70,0,0
44920,-100,3,1,0,100,0,0
78228,-100,3,1,0,100,0,1
85305,-100,3,1,0,100,0,0
87382,-83.3333333333333,3,1,0,100,0,0
[HitObjects]
256,192,690,1,8,0:0:0:0:
256,192,843,1,8,0:0:0:0:
256,192,997,1,0,0:0:0:0:
256,192,1151,1,8,0:0:0:0:
256,192,1459,1,0,0:0:0:0:
256,192,1613,1,0,0:0:0:0:
256,192,1920,1,0,0:0:0:0:
256,192,2228,1,8,0:0:0:0:
256,192,2536,1,8,0:0:0:0:
256,192,2690,1,8,0:0:0:0:
256,192,2843,1,0,0:0:0:0:
256,192,2997,1,8,0:0:0:0:
256,192,3305,1,0,0:0:0:0:
256,192,3459,1,0,0:0:0:0:
256,192,3766,1,8,0:0:0:0:
256,192,4074,1,8,0:0:0:0:
256,192,4382,1,8,0:0:0:0:
256,192,4536,1,8,0:0:0:0:
256,192,4690,1,0,0:0:0:0:
256,192,4843,1,8,0:0:0:0:
256,192,5151,1,0,0:0:0:0:
256,192,5305,1,8,0:0:0:0:
256,192,5613,1,8,0:0:0:0:
256,192,5920,1,8,0:0:0:0:
256,192,6228,1,8,0:0:0:0:
256,192,6382,1,8,0:0:0:0:
256,192,6536,1,0,0:0:0:0:
256,192,6690,1,8,0:0:0:0:
256,192,6997,1,0,0:0:0:0:
256,192,7151,1,8,0:0:0:0:
256,192,7459,1,0,0:0:0:0:
256,192,7766,1,0,0:0:0:0:
256,192,8074,5,4,0:0:0:0:
256,192,8997,1,4,0:0:0:0:
256,192,9920,1,4,0:0:0:0:
256,192,10843,1,4,0:0:0:0:
256,192,11766,1,8,0:0:0:0:
256,192,11920,1,8,0:0:0:0:
256,192,12074,1,8,0:0:0:0:
256,192,12228,1,8,0:0:0:0:
256,192,12382,1,8,0:0:0:0:
256,192,12690,1,0,0:0:0:0:
256,192,12843,1,0,0:0:0:0:
256,192,12997,1,0,0:0:0:0:
256,192,13151,1,0,0:0:0:0:
256,192,13305,1,0,0:0:0:0:
256,192,13613,1,8,0:0:0:0:
256,192,13766,1,8,0:0:0:0:
256,192,13920,1,8,0:0:0:0:
256,192,14074,1,8,0:0:0:0:
256,192,14228,1,8,0:0:0:0:
256,192,14536,12,0,15305,0:0:0:0:
256,192,15459,5,4,0:0:0:0:
256,192,15766,1,8,0:0:0:0:
256,192,15843,1,8,0:0:0:0:
256,192,15920,1,8,0:0:0:0:
256,192,16074,1,0,0:0:0:0:
256,192,16228,1,8,0:0:0:0:
256,192,16382,1,0,0:0:0:0:
256,192,16690,1,8,0:0:0:0:
256,192,16766,1,8,0:0:0:0:
256,192,16843,1,8,0:0:0:0:
256,192,16997,1,0,0:0:0:0:
256,192,17151,1,8,0:0:0:0:
256,192,17305,1,0,0:0:0:0:
256,192,17613,1,8,0:0:0:0:
256,192,17690,1,8,0:0:0:0:
256,192,17766,1,8,0:0:0:0:
256,192,17920,1,0,0:0:0:0:
256,192,18074,1,8,0:0:0:0:
256,192,18228,2,0,L|400:192,2,140
256,192,19151,1,12,0:0:0:0:
256,192,19459,1,0,0:0:0:0:
256,192,19613,1,0,0:0:0:0:
256,192,19690,1,0,0:0:0:0:
256,192,19766,1,0,0:0:0:0:
256,192,19920,1,0,0:0:0:0:
256,192,20074,1,8,0:0:0:0:
256,192,20382,1,0,0:0:0:0:
256,192,20536,1,0,0:0:0:0:
256,192,20613,1,0,0:0:0:0:
256,192,20690,1,0,0:0:0:0:
256,192,20843,1,0,0:0:0:0:
256,192,20997,1,8,0:0:0:0:
256,192,21305,1,0,0:0:0:0:
256,192,21459,1,0,0:0:0:0:
256,192,21536,1,0,0:0:0:0:
256,192,21613,1,0,0:0:0:0:
256,192,21766,1,8,0:0:0:0:
256,192,21920,2,0,L|400:192,2,140
256,192,22843,1,0,0:0:0:0:
256,192,22920,1,0,0:0:0:0:
256,192,22997,1,0,0:0:0:0:
256,192,23151,1,0,0:0:0:0:
256,192,23305,1,0,0:0:0:0:
256,192,23613,1,0,0:0:0:0:
256,192,23766,1,0,0:0:0:0:
256,192,24690,1,8,0:0:0:0:
256,192,24766,1,8,0:0:0:0:
256,192,24843,1,8,0:0:0:0:
256,192,24997,1,8,0:0:0:0:
256,192,25151,1,8,0:0:0:0:
256,192,25459,1,8,0:0:0:0:
256,192,25613,1,8,0:0:0:0:
256,192,26536,1,0,0:0:0:0:
256,192,26690,1,0,0:0:0:0:
256,192,26843,1,0,0:0:0:0:
256,192,27459,1,8,0:0:0:0:
256,192,27613,1,8,0:0:0:0:
256,192,27766,1,8,0:0:0:0:
256,192,28382,1,0,0:0:0:0:
256,192,28459,1,0,0:0:0:0:
256,192,28536,1,0,0:0:0:0:
256,192,28690,1,0,0:0:0:0:
256,192,28843,1,0,0:0:0:0:
256,192,29151,1,0,0:0:0:0:
256,192,29305,1,8,0:0:0:0:
256,192,30228,1,0,0:0:0:0:
256,192,30382,1,0,0:0:0:0:
256,192,30536,1,8,0:0:0:0:
256,192,30997,1,0,0:0:0:0:
256,192,31151,1,0,0:0:0:0:
256,192,31305,1,8,0:0:0:0:
256,192,31459,1,0,0:0:0:0:
256,192,31613,1,8,0:0:0:0:
256,192,31690,1,8,0:0:0:0:
256,192,31766,1,8,0:0:0:0:
256,192,32074,1,0,0:0:0:0:
256,192,32228,1,0,0:0:0:0:
256,192,32382,1,8,0:0:0:0:
256,192,32843,1,0,0:0:0:0:
256,192,32997,1,8,0:0:0:0:
256,192,33151,1,0,0:0:0:0:
256,192,33305,1,0,0:0:0:0:
256,192,33459,1,8,0:0:0:0:
256,192,33536,1,8,0:0:0:0:
256,192,33613,1,8,0:0:0:0:
256,192,33920,1,4,0:0:0:0:
256,192,34843,1,12,0:0:0:0:
256,192,35766,1,4,0:0:0:0:
256,192,36228,1,4,0:0:0:0:
256,192,36690,1,12,0:0:0:0:
256,192,37613,1,4,0:0:0:0:
256,192,38536,1,0,0:0:0:0:
256,192,39459,1,0,0:0:0:0:
256,192,39920,1,0,0:0:0:0:
256,192,40382,1,0,0:0:0:0:
256,192,41305,1,12,0:0:0:0:
256,192,42228,1,8,0:0:0:0:
256,192,43151,1,8,0:0:0:0:
256,192,43613,1,8,0:0:0:0:
256,192,44074,1,8,0:0:0:0:
256,192,44997,1,8,0:0:0:0:
256,192,45151,1,8,0:0:0:0:
256,192,45305,1,0,0:0:0:0:
256,192,45459,1,8,0:0:0:0:
256,192,45766,1,0,0:0:0:0:
256,192,45920,1,8,0:0:0:0:
256,192,46228,1,0,0:0:0:0:
256,192,46536,1,8,0:0:0:0:
256,192,46843,1,8,0:0:0:0:
256,192,46997,1,8,0:0:0:0:
256,192,47151,1,0,0:0:0:0:
256,192,47305,1,8,0:0:0:0:
256,192,47613,1,0,0:0:0:0:
256,192,47766,1,8,0:0:0:0:
256,192,48074,1,8,0:0:0:0:
256,192,48382,1,8,0:0:0:0:
256,192,48690,1,8,0:0:0:0:
256,192,48843,1,8,0:0:0:0:
256,192,48997,1,0,0:0:0:0:
256,192,49151,1,8,0:0:0:0:
256,192,49459,1,0,0:0:0:0:
256,192,49613,1,8,0:0:0:0:
256,192,49920,1,8,0:0:0:0:
256,192,50228,1,0,0:0:0:0:
256,192,50536,1,8,0:0:0:0:
256,192,50690,1,8,0:0:0:0:
256,192,50843,1,0,0:0:0:0:
256,192,50997,1,8,0:0:0:0:
256,192,51305,1,0,0:0:0:0:
256,192,51459,1,8,0:0:0:0:
256,192,51766,1,0,0:0:0:0:
256,192,52074,1,8,0:0:0:0:
256,192,52382,1,4,0:0:0:0:
256,192,54228,1,12,0:0:0:0:
256,192,54690,1,12,0:0:0:0:
256,192,55151,1,12,0:0:0:0:
256,192,55459,1,12,0:0:0:0:
256,192,56074,1,4,0:0:0:0:
256,192,56997,1,4,0:0:0:0:
256,192,57920,1,4,0:0:0:0:
256,192,58843,1,4,0:0:0:0:
256,192,59766,1,8,0:0:0:0:
256,192,59920,1,8,0:0:0:0:
256,192,60074,1,8,0:0:0:0:
256,192,60228,1,8,0:0:0:0:
256,192,60382,1,8,0:0:0:0:
256,192,60690,1,0,0:0:0:0:
256,192,60843,1,0,0:0:0:0:
256,192,60997,1,0,0:0:0:0:
256,192,61151,1,0,0:0:0:0:
256,192,61305,1,0,0:0:0:0:
256,192,61613,1,8,0:0:0:0:
256,192,61766,1,8,0:0:0:0:
256,192,61920,1,8,0:0:0:0:
256,192,62074,1,8,0:0:0:0:
256,192,62228,1,8,0:0:0:0:
256,192,62536,12,0,63305,0:0:0:0:
256,192,63459,5,12,0:0:0:0:
256,192,63766,1,4,0:0:0:0:
256,192,64074,1,4,0:0:0:0:
256,192,64382,1,12,0:0:0:0:
256,192,64997,1,12,0:0:0:0:
256,192,65305,1,4,0:0:0:0:
256,192,65766,1,4,0:0:0:0:
256,192,66228,1,12,0:0:0:0:
256,192,67151,1,12,0:0:0:0:
256,192,67459,1,4,0:0:0:0:
256,192,67766,1,4,0:0:0:0:
256,192,68074,1,12,0:0:0:0:
256,192,68997,1,12,0:0:0:0:
256,192,69305,1,4,0:0:0:0:
256,192,69613,1,4,0:0:0:0:
256,192,69920,1,12,0:0:0:0:
256,192,70843,5,4,0:0:0:0:
256,192,71151,1,8,0:0:0:0:
256,192,71305,1,8,0:0:0:0:
256,192,71459,1,8,0:0:0:0:
256,192,71766,1,8,0:0:0:0:
256,192,72074,1,0,0:0:0:0:
256,192,72690,1,4,0:0:0:0:
256,192,72997,1,8,0:0:0:0:
256,192,73151,1,8,0:0:0:0:
256,192,73305,1,8,0:0:0:0:
256,192,73459,1,8,0:0:0:0:
256,192,73613,1,0,0:0:0:0:
256,192,73920,1,8,0:0:0:0:
256,192,74536,1,4,0:0:0:0:
256,192,75459,1,4,0:0:0:0:
256,192,76382,1,4,0:0:0:0:
256,192,77305,1,12,0:0:0:0:
256,192,77459,1,12,0:0:0:0:
256,192,77613,1,12,0:0:0:0:
256,192,78228,5,4,0:0:0:0:
256,192,78536,1,8,0:0:0:0:
256,192,78613,1,8,0:0:0:0:
256,192,78690,1,8,0:0:0:0:
256,192,78843,1,0,0:0:0:0:
256,192,78997,1,8,0:0:0:0:
256,192,79151,1,0,0:0:0:0:
256,192,79459,1,8,0:0:0:0:
256,192,79536,1,8,0:0:0:0:
256,192,79613,1,8,0:0:0:0:
256,192,79766,1,0,0:0:0:0:
256,192,79920,1,8,0:0:0:0:
256,192,80074,1,0,0:0:0:0:
256,192,80382,1,8,0:0:0:0:
256,192,80459,1,8,0:0:0:0:
256,192,80536,1,8,0:0:0:0:
256,192,80690,1,0,0:0:0:0:
256,192,80843,1,8,0:0:0:0:
256,192,80997,2,0,L|400:192,2,140
256,192,81920,1,12,0:0:0:0:
256,192,82228,1,0,0:0:0:0:
256,192,82382,1,0,0:0:0:0:
256,192,82459,1,0,0:0:0:0:
256,192,82536,1,0,0:0:0:0:
256,192,82690,1,0,0:0:0:0:
256,192,82843,1,8,0:0:0:0:
256,192,83151,1,0,0:0:0:0:
256,192,83305,1,0,0:0:0:0:
256,192,83382,1,0,0:0:0:0:
256,192,83459,1,0,0:0:0:0:
256,192,83613,1,0,0:0:0:0:
256,192,83766,1,8,0:0:0:0:
256,192,84074,1,0,0:0:0:0:
256,192,84228,1,0,0:0:0:0:
256,192,84305,1,0,0:0:0:0:
256,192,84382,1,0,0:0:0:0:
256,192,84536,1,8,0:0:0:0:
256,192,84690,2,0,L|400:192,2,140
256,192,85613,1,8,0:0:0:0:
256,192,85766,1,8,0:0:0:0:
256,192,85920,1,0,0:0:0:0:
256,192,86074,1,8,0:0:0:0:
256,192,86228,1,8,0:0:0:0:
256,192,86382,1,0,0:0:0:0:
256,192,86536,1,8,0:0:0:0:
256,192,86843,1,0,0:0:0:0:
256,192,87151,1,8,0:0:0:0:
256,192,87459,1,4,0:0:0:0:
256,192,87766,1,4,0:0:0:0:
256,192,88074,1,4,0:0:0:0:
256,192,88382,1,4,0:0:0:0:
-614
View File
@@ -1,614 +0,0 @@
osu file format v12
[General]
AudioFilename: DJ Sharpnel - Ivaltek2.mp3
AudioLeadIn: 0
PreviewTime: 75212
Countdown: 0
SampleSet: Normal
StackLeniency: 0.7
Mode: 1
LetterboxInBreaks: 1
[Editor]
DistanceSpacing: 1.2
BeatDivisor: 4
GridSize: 8
[Metadata]
Title:IVALTEK
TitleUnicode:IVALTEK
Artist:DJ Sharpnel
ArtistUnicode:DJ Sharpnel
Creator:happy30
Version:Muzukashii
Source:Final Fantasy XII
Tags:j-core happy hardcore kiss me goodbye gladiool gladi pheon
BeatmapID:222766
BeatmapSetID:50429
[Difficulty]
HPDrainRate:5
CircleSize:5
OverallDifficulty:5
ApproachRate:5
SliderMultiplier:1.4
SliderTickRate:1
[Events]
//Background and Video events
0,0,"background ivaltek.jpg",0,135
//Break Periods
//Storyboard Layer 0 (Background)
//Storyboard Layer 1 (Fail)
//Storyboard Layer 2 (Pass)
//Storyboard Layer 3 (Foreground)
//Storyboard Sound Samples
//Background Colour Transformations
3,100,163,162,255
[TimingPoints]
895,288.322921672273,4,1,0,60,1,0
9833,-100,4,1,0,45,0,0
18194,-100,4,1,0,60,0,0
37728,-100,4,1,0,45,0,0
38380,288.322921672273,4,1,0,60,1,0
38380,-100,4,1,0,45,0,0
75285,-100,4,1,0,60,0,1
109884,-100,4,1,0,60,0,0
112190,-100,4,1,0,60,0,1
150249,-100,4,1,0,60,0,0
[Colours]
Combo1 : 0,0,160
Combo2 : 255,0,0
[HitObjects]
256,192,10121,5,4,0:0:0:0:
256,192,10697,1,8,0:0:0:0:
256,192,11274,1,0,0:0:0:0:
256,192,11562,1,0,0:0:0:0:
256,192,11851,1,8,0:0:0:0:
256,192,12427,1,0,0:0:0:0:
256,192,13004,1,8,0:0:0:0:
256,192,13581,1,0,0:0:0:0:
256,192,13869,1,0,0:0:0:0:
256,192,14157,1,8,0:0:0:0:
256,192,14734,1,0,0:0:0:0:
256,192,15311,1,8,0:0:0:0:
256,192,15455,1,0,0:0:0:0:
256,192,15887,1,0,0:0:0:0:
256,192,16464,1,8,0:0:0:0:
256,192,16608,1,0,0:0:0:0:
256,192,17041,1,0,0:0:0:0:
256,192,17617,1,8,0:0:0:0:
256,192,17761,1,0,0:0:0:0:
256,192,18194,1,0,0:0:0:0:
256,192,18482,1,0,0:0:0:0:
256,192,18626,1,0,0:0:0:0:
256,192,18771,1,8,0:0:0:0:
256,192,19059,1,8,0:0:0:0:
256,192,19203,1,8,0:0:0:0:
256,192,19347,1,4,0:0:0:0:
256,192,19635,1,0,0:0:0:0:
256,192,19780,1,0,0:0:0:0:
256,192,19924,1,8,0:0:0:0:
256,192,20212,1,8,0:0:0:0:
256,192,20356,1,8,0:0:0:0:
256,192,20500,1,0,0:0:0:0:
256,192,20789,1,0,0:0:0:0:
256,192,21077,1,8,0:0:0:0:
256,192,21365,1,0,0:0:0:0:
256,192,21510,1,8,0:0:0:0:
256,192,21654,1,0,0:0:0:0:
256,192,21942,1,0,0:0:0:0:
256,192,22086,1,0,0:0:0:0:
256,192,22230,1,8,0:0:0:0:
256,192,22519,1,8,0:0:0:0:
256,192,22663,1,8,0:0:0:0:
256,192,22807,1,0,0:0:0:0:
256,192,23095,1,0,0:0:0:0:
256,192,23240,1,0,0:0:0:0:
256,192,23384,1,8,0:0:0:0:
256,192,23672,1,8,0:0:0:0:
256,192,23816,1,0,0:0:0:0:
256,192,23960,1,0,0:0:0:0:
256,192,24249,1,0,0:0:0:0:
256,192,24393,1,0,0:0:0:0:
256,192,24537,1,8,0:0:0:0:
256,192,24825,1,8,0:0:0:0:
256,192,25114,1,0,0:0:0:0:
256,192,25402,1,0,0:0:0:0:
256,192,25546,1,0,0:0:0:0:
256,192,25690,1,8,0:0:0:0:
256,192,25834,1,0,0:0:0:0:
256,192,26123,1,0,0:0:0:0:
256,192,26267,1,0,0:0:0:0:
256,192,26411,1,8,0:0:0:0:
256,192,26699,1,0,0:0:0:0:
256,192,26844,1,0,0:0:0:0:
256,192,26988,1,8,0:0:0:0:
256,192,27276,1,8,0:0:0:0:
256,192,27420,1,0,0:0:0:0:
256,192,27564,1,0,0:0:0:0:
256,192,27709,1,8,0:0:0:0:
256,192,27997,1,0,0:0:0:0:
256,192,28141,1,8,0:0:0:0:
256,192,28429,1,8,0:0:0:0:
256,192,28574,1,4,0:0:0:0:
256,192,28862,1,8,0:0:0:0:
256,192,29150,1,0,0:0:0:0:
256,192,29294,1,8,0:0:0:0:
256,192,29583,1,0,0:0:0:0:
256,192,29727,1,0,0:0:0:0:
256,192,29871,1,8,0:0:0:0:
256,192,30015,1,0,0:0:0:0:
256,192,30303,1,0,0:0:0:0:
256,192,30448,1,8,0:0:0:0:
256,192,30736,1,0,0:0:0:0:
256,192,30880,1,0,0:0:0:0:
256,192,31168,1,8,0:0:0:0:
256,192,31457,1,0,0:0:0:0:
256,192,31601,1,8,0:0:0:0:
256,192,31889,1,8,0:0:0:0:
256,192,32033,1,0,0:0:0:0:
256,192,32178,1,0,0:0:0:0:
256,192,32322,1,0,0:0:0:0:
256,192,32610,1,0,0:0:0:0:
256,192,32754,1,8,0:0:0:0:
256,192,33043,1,8,0:0:0:0:
256,192,33187,1,0,0:0:0:0:
256,192,33331,1,8,0:0:0:0:
256,192,33475,1,0,0:0:0:0:
256,192,33763,1,0,0:0:0:0:
256,192,33907,1,8,0:0:0:0:
256,192,34196,1,8,0:0:0:0:
256,192,34340,1,0,0:0:0:0:
256,192,34484,1,8,0:0:0:0:
256,192,34628,1,0,0:0:0:0:
256,192,34917,1,0,0:0:0:0:
256,192,35061,1,8,0:0:0:0:
256,192,35493,12,0,37728,0:0:0:0:
256,192,38376,1,4,0:0:0:0:
256,192,39244,1,0,0:0:0:0:
256,192,39533,1,8,0:0:0:0:
256,192,40109,1,8,0:0:0:0:
256,192,40686,1,0,0:0:0:0:
256,192,41551,1,0,0:0:0:0:
256,192,41839,1,8,0:0:0:0:
256,192,42416,1,8,0:0:0:0:
256,192,42704,1,0,0:0:0:0:
256,192,42993,1,0,0:0:0:0:
256,192,43858,1,0,0:0:0:0:
256,192,44146,1,8,0:0:0:0:
256,192,44723,1,8,0:0:0:0:
256,192,45299,1,0,0:0:0:0:
256,192,46164,1,0,0:0:0:0:
256,192,46453,1,8,0:0:0:0:
256,192,46885,1,8,0:0:0:0:
256,192,47029,1,8,0:0:0:0:
256,192,47318,1,8,0:0:0:0:
256,192,47606,1,0,0:0:0:0:
256,192,48471,1,0,0:0:0:0:
256,192,48759,1,8,0:0:0:0:
256,192,49336,1,8,0:0:0:0:
256,192,49912,1,0,0:0:0:0:
256,192,50777,1,0,0:0:0:0:
256,192,51066,1,8,0:0:0:0:
256,192,51498,1,8,0:0:0:0:
256,192,51931,1,8,0:0:0:0:
256,192,52219,1,0,0:0:0:0:
256,192,53084,1,0,0:0:0:0:
256,192,53372,1,8,0:0:0:0:
256,192,53949,1,8,0:0:0:0:
256,192,54526,1,0,0:0:0:0:
256,192,54958,1,8,0:0:0:0:
256,192,55102,1,0,0:0:0:0:
256,192,55391,1,0,0:0:0:0:
256,192,55679,1,8,0:0:0:0:
256,192,56111,1,0,0:0:0:0:
256,192,56256,1,8,0:0:0:0:
256,192,56544,1,0,0:0:0:0:
256,192,56832,1,4,0:0:0:0:
256,192,57697,1,0,0:0:0:0:
256,192,57985,1,8,0:0:0:0:
256,192,58562,1,8,0:0:0:0:
256,192,59139,1,0,0:0:0:0:
256,192,60004,1,0,0:0:0:0:
256,192,60292,1,8,0:0:0:0:
256,192,60869,1,8,0:0:0:0:
256,192,61157,1,0,0:0:0:0:
256,192,61445,1,0,0:0:0:0:
256,192,62310,1,0,0:0:0:0:
256,192,62599,1,8,0:0:0:0:
256,192,63175,1,8,0:0:0:0:
256,192,63752,1,0,0:0:0:0:
256,192,64617,1,0,0:0:0:0:
256,192,64905,1,8,0:0:0:0:
256,192,65338,1,8,0:0:0:0:
256,192,65482,1,0,0:0:0:0:
256,192,65770,1,8,0:0:0:0:
256,192,66059,1,0,0:0:0:0:
256,192,66923,1,0,0:0:0:0:
256,192,67212,1,8,0:0:0:0:
256,192,67788,1,0,0:0:0:0:
256,192,68077,1,8,0:0:0:0:
256,192,68365,1,0,0:0:0:0:
256,192,69230,1,0,0:0:0:0:
256,192,69518,1,8,0:0:0:0:
256,192,70672,1,0,0:0:0:0:
256,192,71537,1,0,0:0:0:0:
256,192,71825,1,8,0:0:0:0:
256,192,72257,1,8,0:0:0:0:
256,192,72402,1,0,0:0:0:0:
256,192,72978,1,0,0:0:0:0:
256,192,74708,1,8,0:0:0:0:
256,192,75285,1,4,0:0:0:0:
256,192,75573,1,8,0:0:0:0:
256,192,75861,1,0,0:0:0:0:
256,192,76150,1,8,0:0:0:0:
256,192,76438,1,0,0:0:0:0:
256,192,76582,1,0,0:0:0:0:
256,192,76726,1,8,0:0:0:0:
256,192,77015,1,0,0:0:0:0:
256,192,77303,1,8,0:0:0:0:
256,192,77447,1,0,0:0:0:0:
256,192,77591,1,0,0:0:0:0:
256,192,77880,1,8,0:0:0:0:
256,192,78168,1,0,0:0:0:0:
256,192,78312,1,0,0:0:0:0:
256,192,78456,1,8,0:0:0:0:
256,192,78745,1,8,0:0:0:0:
256,192,78889,1,8,0:0:0:0:
256,192,79033,1,0,0:0:0:0:
256,192,79321,1,0,0:0:0:0:
256,192,79393,1,0,0:0:0:0:
256,192,79466,1,0,0:0:0:0:
256,192,79610,1,0,0:0:0:0:
256,192,79898,1,0,0:0:0:0:
256,192,80186,1,8,0:0:0:0:
256,192,80475,1,0,0:0:0:0:
256,192,80619,1,0,0:0:0:0:
256,192,80763,1,8,0:0:0:0:
256,192,81051,1,0,0:0:0:0:
256,192,81340,1,8,0:0:0:0:
256,192,81484,1,0,0:0:0:0:
256,192,81772,1,0,0:0:0:0:
256,192,81916,1,8,0:0:0:0:
256,192,82205,1,0,0:0:0:0:
256,192,82493,1,8,0:0:0:0:
256,192,82781,1,0,0:0:0:0:
256,192,82925,1,0,0:0:0:0:
256,192,83070,1,8,0:0:0:0:
256,192,83358,1,8,0:0:0:0:
256,192,83502,1,8,0:0:0:0:
256,192,83646,1,8,0:0:0:0:
256,192,83935,1,0,0:0:0:0:
256,192,84007,1,0,0:0:0:0:
256,192,84079,1,0,0:0:0:0:
256,192,84223,1,0,0:0:0:0:
256,192,84511,1,0,0:0:0:0:
256,192,84655,1,0,0:0:0:0:
256,192,84799,1,8,0:0:0:0:
256,192,84944,1,0,0:0:0:0:
256,192,85232,1,0,0:0:0:0:
256,192,85376,1,8,0:0:0:0:
256,192,85664,1,0,0:0:0:0:
256,192,85953,1,8,0:0:0:0:
256,192,86097,1,0,0:0:0:0:
256,192,86241,1,0,0:0:0:0:
256,192,86529,1,8,0:0:0:0:
256,192,86674,1,8,0:0:0:0:
256,192,86818,1,0,0:0:0:0:
256,192,87106,1,12,0:0:0:0:
256,192,87394,1,12,0:0:0:0:
256,192,87683,1,12,0:0:0:0:
256,192,87971,1,4,0:0:0:0:
256,192,88259,1,8,0:0:0:0:
256,192,88404,1,0,0:0:0:0:
256,192,88548,1,0,0:0:0:0:
256,192,88620,1,0,0:0:0:0:
256,192,88692,1,0,0:0:0:0:
256,192,88836,1,0,0:0:0:0:
256,192,89124,1,0,0:0:0:0:
256,192,89268,1,0,0:0:0:0:
256,192,89413,1,8,0:0:0:0:
256,192,89557,1,0,0:0:0:0:
256,192,89701,1,0,0:0:0:0:
256,192,89845,1,0,0:0:0:0:
256,192,89989,1,8,0:0:0:0:
256,192,90278,1,0,0:0:0:0:
256,192,90566,1,8,0:0:0:0:
256,192,90854,1,8,0:0:0:0:
256,192,91287,1,0,0:0:0:0:
256,192,91431,1,8,0:0:0:0:
256,192,91575,1,8,0:0:0:0:
256,192,91719,1,8,0:0:0:0:
256,192,92008,1,8,0:0:0:0:
256,192,92440,1,0,0:0:0:0:
256,192,92584,1,12,0:0:0:0:
256,192,92873,1,12,0:0:0:0:
256,192,93161,1,12,0:0:0:0:
256,192,93449,1,4,0:0:0:0:
256,192,93738,1,0,0:0:0:0:
256,192,94026,1,8,0:0:0:0:
256,192,94170,1,0,0:0:0:0:
256,192,94314,1,0,0:0:0:0:
256,192,94603,1,8,0:0:0:0:
256,192,94891,1,0,0:0:0:0:
256,192,95035,1,0,0:0:0:0:
256,192,95179,1,8,0:0:0:0:
256,192,95468,1,0,0:0:0:0:
256,192,95756,1,8,0:0:0:0:
256,192,95900,1,0,0:0:0:0:
256,192,96044,1,0,0:0:0:0:
256,192,96333,1,8,0:0:0:0:
256,192,96621,1,0,0:0:0:0:
256,192,96765,1,8,0:0:0:0:
256,192,96909,1,0,0:0:0:0:
256,192,97198,1,8,0:0:0:0:
256,192,97342,1,8,0:0:0:0:
256,192,97486,2,8,L|480:192,1,210
256,192,98351,1,0,0:0:0:0:
256,192,98639,1,8,0:0:0:0:
256,192,98928,1,0,0:0:0:0:
256,192,99072,1,0,0:0:0:0:
256,192,99216,1,8,0:0:0:0:
256,192,99504,1,0,0:0:0:0:
256,192,99793,1,8,0:0:0:0:
256,192,99937,1,0,0:0:0:0:
256,192,100225,1,0,0:0:0:0:
256,192,100369,1,8,0:0:0:0:
256,192,100658,1,0,0:0:0:0:
256,192,100946,1,8,0:0:0:0:
256,192,101234,1,0,0:0:0:0:
256,192,101378,1,0,0:0:0:0:
256,192,101523,1,8,0:0:0:0:
256,192,101811,1,8,0:0:0:0:
256,192,101955,1,0,0:0:0:0:
256,192,102099,1,8,0:0:0:0:
256,192,102388,1,8,0:0:0:0:
256,192,102460,1,8,0:0:0:0:
256,192,102532,1,8,0:0:0:0:
256,192,102676,1,8,0:0:0:0:
256,192,102964,1,4,0:0:0:0:
256,192,103108,1,0,0:0:0:0:
256,192,103252,1,8,0:0:0:0:
256,192,103397,1,0,0:0:0:0:
256,192,103685,1,0,0:0:0:0:
256,192,103829,1,8,0:0:0:0:
256,192,104117,1,0,0:0:0:0:
256,192,104406,1,8,0:0:0:0:
256,192,104550,1,0,0:0:0:0:
256,192,104838,1,0,0:0:0:0:
256,192,104982,1,8,0:0:0:0:
256,192,105127,1,8,0:0:0:0:
256,192,105271,1,0,0:0:0:0:
256,192,105415,1,0,0:0:0:0:
256,192,105559,1,8,0:0:0:0:
256,192,105703,1,0,0:0:0:0:
256,192,105847,1,8,0:0:0:0:
256,192,105991,1,0,0:0:0:0:
256,192,106136,1,8,0:0:0:0:
256,192,106424,1,0,0:0:0:0:
256,192,106712,1,0,0:0:0:0:
256,192,106857,1,8,0:0:0:0:
256,192,107001,1,0,0:0:0:0:
256,192,107073,1,0,0:0:0:0:
256,192,107145,1,0,0:0:0:0:
256,192,107289,1,0,0:0:0:0:
256,192,107577,1,0,0:0:0:0:
256,192,107721,1,0,0:0:0:0:
256,192,107866,1,8,0:0:0:0:
256,192,108010,1,0,0:0:0:0:
256,192,108154,1,8,0:0:0:0:
256,192,108298,1,0,0:0:0:0:
256,192,108442,1,8,0:0:0:0:
256,192,108731,1,0,0:0:0:0:
256,192,109019,1,8,0:0:0:0:
256,192,109163,1,0,0:0:0:0:
256,192,109307,1,8,0:0:0:0:
256,192,109451,1,0,0:0:0:0:
256,192,109595,1,8,0:0:0:0:
256,192,109884,1,8,0:0:0:0:
256,192,110028,1,0,0:0:0:0:
256,192,110172,1,0,0:0:0:0:
256,192,110316,1,8,0:0:0:0:
256,192,110461,1,0,0:0:0:0:
256,192,110749,1,8,0:0:0:0:
256,192,110893,1,0,0:0:0:0:
256,192,111037,1,8,0:0:0:0:
256,192,111181,1,0,0:0:0:0:
256,192,111325,1,0,0:0:0:0:
256,192,111469,1,8,0:0:0:0:
256,192,111614,1,0,0:0:0:0:
256,192,111902,1,8,0:0:0:0:
256,192,112046,1,0,0:0:0:0:
256,192,112190,1,4,0:0:0:0:
256,192,112478,1,8,0:0:0:0:
256,192,112766,1,0,0:0:0:0:
256,192,113055,1,8,0:0:0:0:
256,192,113343,1,0,0:0:0:0:
256,192,113487,1,0,0:0:0:0:
256,192,113631,1,8,0:0:0:0:
256,192,113920,1,0,0:0:0:0:
256,192,114208,1,8,0:0:0:0:
256,192,114352,1,0,0:0:0:0:
256,192,114496,1,0,0:0:0:0:
256,192,114785,1,8,0:0:0:0:
256,192,115073,1,0,0:0:0:0:
256,192,115217,1,0,0:0:0:0:
256,192,115361,1,8,0:0:0:0:
256,192,115650,1,8,0:0:0:0:
256,192,115794,1,8,0:0:0:0:
256,192,115938,1,0,0:0:0:0:
256,192,116226,1,0,0:0:0:0:
256,192,116298,1,0,0:0:0:0:
256,192,116371,1,0,0:0:0:0:
256,192,116515,1,0,0:0:0:0:
256,192,116659,1,8,0:0:0:0:
256,192,116803,1,0,0:0:0:0:
256,192,117091,1,8,0:0:0:0:
256,192,117380,1,0,0:0:0:0:
256,192,117524,1,0,0:0:0:0:
256,192,117668,1,8,0:0:0:0:
256,192,117956,1,0,0:0:0:0:
256,192,118245,1,8,0:0:0:0:
256,192,118389,1,0,0:0:0:0:
256,192,118677,1,0,0:0:0:0:
256,192,118821,1,8,0:0:0:0:
256,192,119110,1,0,0:0:0:0:
256,192,119398,1,8,0:0:0:0:
256,192,119686,1,0,0:0:0:0:
256,192,119830,1,0,0:0:0:0:
256,192,119975,1,8,0:0:0:0:
256,192,120263,1,8,0:0:0:0:
256,192,120407,1,8,0:0:0:0:
256,192,120551,1,8,0:0:0:0:
256,192,120840,1,0,0:0:0:0:
256,192,120912,1,0,0:0:0:0:
256,192,120984,1,0,0:0:0:0:
256,192,121128,1,0,0:0:0:0:
256,192,121272,1,8,0:0:0:0:
256,192,121416,1,0,0:0:0:0:
256,192,121560,1,0,0:0:0:0:
256,192,121704,1,8,0:0:0:0:
256,192,121849,1,0,0:0:0:0:
256,192,122137,1,0,0:0:0:0:
256,192,122281,1,8,0:0:0:0:
256,192,122569,1,0,0:0:0:0:
256,192,122858,1,8,0:0:0:0:
256,192,123002,1,0,0:0:0:0:
256,192,123146,1,0,0:0:0:0:
256,192,123434,1,8,0:0:0:0:
256,192,123579,1,8,0:0:0:0:
256,192,123723,1,0,0:0:0:0:
256,192,124011,1,12,0:0:0:0:
256,192,124299,1,12,0:0:0:0:
256,192,124588,1,12,0:0:0:0:
256,192,124876,1,4,0:0:0:0:
256,192,125164,1,8,0:0:0:0:
256,192,125309,1,0,0:0:0:0:
256,192,125453,1,0,0:0:0:0:
256,192,125525,1,0,0:0:0:0:
256,192,125597,1,0,0:0:0:0:
256,192,125741,1,0,0:0:0:0:
256,192,125886,1,8,0:0:0:0:
256,192,126029,1,0,0:0:0:0:
256,192,126173,1,0,0:0:0:0:
256,192,126318,1,8,0:0:0:0:
256,192,126462,1,0,0:0:0:0:
256,192,126606,1,0,0:0:0:0:
256,192,126750,1,0,0:0:0:0:
256,192,126894,1,8,0:0:0:0:
256,192,127183,1,0,0:0:0:0:
256,192,127471,1,8,0:0:0:0:
256,192,127759,1,8,0:0:0:0:
256,192,128192,1,0,0:0:0:0:
256,192,128336,1,8,0:0:0:0:
256,192,128480,1,8,0:0:0:0:
256,192,128624,1,8,0:0:0:0:
256,192,128913,1,8,0:0:0:0:
256,192,129345,1,0,0:0:0:0:
256,192,129489,1,12,0:0:0:0:
256,192,129778,1,12,0:0:0:0:
256,192,130066,1,12,0:0:0:0:
256,192,130354,1,4,0:0:0:0:
256,192,130643,1,0,0:0:0:0:
256,192,130931,1,8,0:0:0:0:
256,192,131075,1,0,0:0:0:0:
256,192,131219,1,0,0:0:0:0:
256,192,131508,1,8,0:0:0:0:
256,192,131796,1,0,0:0:0:0:
256,192,131940,1,0,0:0:0:0:
256,192,132084,1,8,0:0:0:0:
256,192,132373,1,0,0:0:0:0:
256,192,132661,1,8,0:0:0:0:
256,192,132805,1,0,0:0:0:0:
256,192,132949,1,0,0:0:0:0:
256,192,133238,1,8,0:0:0:0:
256,192,133526,1,0,0:0:0:0:
256,192,133670,1,8,0:0:0:0:
256,192,133814,1,0,0:0:0:0:
256,192,134103,1,8,0:0:0:0:
256,192,134247,1,8,0:0:0:0:
256,192,134391,2,8,L|480:192,1,210
256,192,135256,1,0,0:0:0:0:
256,192,135544,1,8,0:0:0:0:
256,192,135833,1,0,0:0:0:0:
256,192,135977,1,0,0:0:0:0:
256,192,136121,1,8,0:0:0:0:
256,192,136409,1,0,0:0:0:0:
256,192,136698,1,8,0:0:0:0:
256,192,136842,1,0,0:0:0:0:
256,192,137130,1,0,0:0:0:0:
256,192,137274,1,8,0:0:0:0:
256,192,137563,1,0,0:0:0:0:
256,192,137851,1,8,0:0:0:0:
256,192,138139,1,0,0:0:0:0:
256,192,138283,1,0,0:0:0:0:
256,192,138428,1,8,0:0:0:0:
256,192,138716,1,8,0:0:0:0:
256,192,138860,1,0,0:0:0:0:
256,192,139004,1,8,0:0:0:0:
256,192,139293,1,8,0:0:0:0:
256,192,139365,1,8,0:0:0:0:
256,192,139437,1,8,0:0:0:0:
256,192,139581,1,8,0:0:0:0:
256,192,139725,1,0,0:0:0:0:
256,192,139869,1,4,0:0:0:0:
256,192,140013,1,0,0:0:0:0:
256,192,140157,1,8,0:0:0:0:
256,192,140302,1,0,0:0:0:0:
256,192,140590,1,0,0:0:0:0:
256,192,140734,1,8,0:0:0:0:
256,192,141022,1,0,0:0:0:0:
256,192,141311,1,8,0:0:0:0:
256,192,141455,1,0,0:0:0:0:
256,192,141599,1,0,0:0:0:0:
256,192,141887,1,8,0:0:0:0:
256,192,142032,1,8,0:0:0:0:
256,192,142176,1,0,0:0:0:0:
256,192,142320,1,0,0:0:0:0:
256,192,142464,1,8,0:0:0:0:
256,192,142608,1,0,0:0:0:0:
256,192,142752,1,8,0:0:0:0:
256,192,142896,1,0,0:0:0:0:
256,192,143041,1,8,0:0:0:0:
256,192,143329,1,0,0:0:0:0:
256,192,143617,1,0,0:0:0:0:
256,192,143762,1,8,0:0:0:0:
256,192,143906,1,0,0:0:0:0:
256,192,143978,1,0,0:0:0:0:
256,192,144050,1,0,0:0:0:0:
256,192,144194,1,0,0:0:0:0:
256,192,144338,1,8,0:0:0:0:
256,192,144482,1,0,0:0:0:0:
256,192,144626,1,0,0:0:0:0:
256,192,144771,1,8,0:0:0:0:
256,192,144915,1,0,0:0:0:0:
256,192,145059,1,8,0:0:0:0:
256,192,145203,1,0,0:0:0:0:
256,192,145347,1,8,0:0:0:0:
256,192,145636,1,0,0:0:0:0:
256,192,145924,1,8,0:0:0:0:
256,192,146068,1,0,0:0:0:0:
256,192,146212,1,8,0:0:0:0:
256,192,146356,1,0,0:0:0:0:
256,192,146500,1,8,0:0:0:0:
256,192,146789,1,8,0:0:0:0:
256,192,146933,1,0,0:0:0:0:
256,192,147077,1,0,0:0:0:0:
256,192,147221,1,8,0:0:0:0:
256,192,147366,1,0,0:0:0:0:
256,192,147654,1,8,0:0:0:0:
256,192,147798,1,0,0:0:0:0:
256,192,147942,1,8,0:0:0:0:
256,192,148086,1,0,0:0:0:0:
256,192,148230,1,0,0:0:0:0:
256,192,148374,1,8,0:0:0:0:
256,192,148519,1,0,0:0:0:0:
256,192,148807,1,8,0:0:0:0:
256,192,148951,1,0,0:0:0:0:
256,192,149384,12,0,150249,0:0:0:0:
+1 -1
View File
@@ -1163,7 +1163,7 @@ mod tests {
}
if cfg!(feature = "taiko") {
map_ids.push(222766);
map_ids.push(1028484);
}
map_ids
+1 -1
View File
@@ -379,7 +379,7 @@ mod tests {
#[cfg(not(any(feature = "async_tokio", feature = "async_std")))]
#[test]
fn iter_end_eq_regular() {
let map = Beatmap::from_path("./maps/222766.osu").expect("failed to parse map");
let map = Beatmap::from_path("./maps/1028484.osu").expect("failed to parse map");
let mods = 64;
let regular = crate::taiko::stars(&map, mods, None);
+262
View File
@@ -0,0 +1,262 @@
use crate::{Beatmap, TaikoPP};
use super::{TaikoGradualDifficultyAttributes, TaikoPerformanceAttributes};
// TODO: Benchmark if Copy is faster than Clone
/// Aggregation for a score's current state i.e. what was the
/// maximum combo so far and what are the current hitresults.
#[derive(Copy, Clone, Debug, Default)]
pub struct TaikoScoreState {
/// Maximum combo that the score has had so far.
/// **Not** the maximum possible combo of the map so far.
pub max_combo: usize,
/// Amount of current 300s.
pub n300: usize,
/// Amount of current 100s.
pub n100: usize,
/// Amount of current misses.
pub misses: usize,
}
impl TaikoScoreState {
/// Create a new empty score state.
pub fn new() -> Self {
Self::default()
}
}
/// Gradually calculate the performance attributes of an osu!taiko map.
///
/// After each hit object you can call
/// [`process_next_object`](`TaikoGradualPerformanceAttributes::process_next_object`)
/// and it will return the resulting current [`TaikoPerformanceAttributes`].
/// To process multiple objects at once, use
/// [`process_next_n_objects`](`TaikoGradualPerformanceAttributes::process_next_n_objects`) instead.
///
/// Both methods require an [`TaikoScoreState`] that contains the current
/// hitresults as well as the maximum combo so far.
///
/// If you only want to calculate difficulty attributes use
/// [`TaikoGradualDifficultyAttributes`](crate::taiko::TaikoGradualDifficultyAttributes) instead.
///
/// # Example
///
/// ```
/// use rosu_pp::{Beatmap, taiko::{TaikoGradualPerformanceAttributes, TaikoScoreState}};
///
/// # /*
/// let map: Beatmap = ...
/// # */
/// # let map = Beatmap::default();
///
/// let mods = 64; // DT
/// let mut gradual_perf = TaikoGradualPerformanceAttributes::new(&map, mods);
/// let mut state = TaikoScoreState::new(); // empty state, everything is on 0.
///
/// // The first 10 hitresults are 300s
/// for _ in 0..10 {
/// state.n300 += 1;
/// state.max_combo += 1;
///
/// # /*
/// let performance = gradual_perf.process_next_object(state).unwrap();
/// println!("PP: {}", performance.pp);
/// # */
/// # let _ = gradual_perf.process_next_object(state);
/// }
///
/// // Then comes a miss.
/// // Note that state's max combo won't be incremented for
/// // the next few objects because the combo is reset.
/// state.misses += 1;
/// # /*
/// let performance = gradual_perf.process_next_object(state).unwrap();
/// println!("PP: {}", performance.pp);
/// # */
/// # let _ = gradual_perf.process_next_object(state);
///
/// // The next 10 objects will be a mixture of 300s and 100s.
/// // Notice how all 10 objects will be processed in one go.
/// state.n300 += 3;
/// state.n100 += 7;
/// # /*
/// let performance = gradual_perf.process_next_n_objects(state, 10).unwrap();
/// println!("PP: {}", performance.pp);
/// # */
/// # let _ = gradual_perf.process_next_n_objects(state, 10);
///
/// // Now comes another 300. Note that the max combo gets incremented again.
/// state.n300 += 1;
/// state.max_combo += 1;
/// # /*
/// let performance = gradual_perf.process_next_object(state).unwrap();
/// println!("PP: {}", performance.pp);
/// # */
/// # let _ = gradual_perf.process_next_object(state);
///
/// // Skip to the end
/// # /*
/// state.max_combo = ...
/// state.n300 = ...
/// state.n100 = ...
/// state.misses = ...
/// let final_performance = gradual_perf.process_next_n_objects(state, usize::MAX).unwrap();
/// println!("PP: {}", performance.pp);
/// # */
/// # let _ = gradual_perf.process_next_n_objects(state, usize::MAX);
///
/// // Once the final performance was calculated,
/// // attempting to process further objects will return `None`.
/// assert!(gradual_perf.process_next_object(state).is_none());
/// ```
#[derive(Clone, Debug)]
pub struct TaikoGradualPerformanceAttributes<'map> {
difficulty: TaikoGradualDifficultyAttributes<'map>,
performance: TaikoPP<'map>,
}
impl<'map> TaikoGradualPerformanceAttributes<'map> {
/// Create a new gradual performance calculator for osu!taiko maps.
pub fn new(map: &'map Beatmap, mods: u32) -> Self {
let difficulty = TaikoGradualDifficultyAttributes::new(map, mods);
let performance = TaikoPP::new(map).mods(mods).passed_objects(0);
Self {
difficulty,
performance,
}
}
/// Process the next hit object and calculate the
/// performance attributes for the resulting score.
pub fn process_next_object(
&mut self,
state: TaikoScoreState,
) -> Option<TaikoPerformanceAttributes> {
self.process_next_n_objects(state, 1)
}
/// Same as [`process_next_object`](`TaikoGradualPerformanceAttributes::process_next_object`)
/// but instead of processing only one object it process `n` many.
///
/// If `n` is 0 it will be considered as 1.
/// If there are still objects to be processed but `n` is larger than the amount
/// of remaining objects, `n` will be considered as the amount of remaining objects.
pub fn process_next_n_objects(
&mut self,
state: TaikoScoreState,
n: usize,
) -> Option<TaikoPerformanceAttributes> {
let n = n.min(self.difficulty.len()).saturating_sub(1);
let difficulty = self.difficulty.nth(n)?;
let _ = self.performance.n300.insert(state.n300);
let _ = self.performance.n100.insert(state.n100);
self.performance.n_misses = state.misses;
let performance = self
.performance
.clone()
.attributes(difficulty)
.combo(state.max_combo)
.passed_objects(self.difficulty.idx)
.calculate();
Some(performance)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[cfg(not(any(feature = "async_tokio", feature = "async_std")))]
#[test]
fn correct_empty() {
let map = Beatmap::from_path("./maps/1028484.osu").expect("failed to parse map");
let mods = 64;
let mut gradual = TaikoGradualPerformanceAttributes::new(&map, mods);
let state = TaikoScoreState::default();
assert!(gradual.process_next_n_objects(state, usize::MAX).is_some());
assert!(gradual.process_next_object(state).is_none());
}
#[cfg(not(any(feature = "async_tokio", feature = "async_std")))]
#[test]
fn next_and_next_n() {
let map = Beatmap::from_path("./maps/1028484.osu").expect("failed to parse map");
let mods = 64;
let state = TaikoScoreState::default();
let mut gradual1 = TaikoGradualPerformanceAttributes::new(&map, mods);
let mut gradual2 = TaikoGradualPerformanceAttributes::new(&map, mods);
for _ in 0..50 {
let _ = gradual1.process_next_object(state);
let _ = gradual2.process_next_object(state);
}
let n = 200;
for _ in 1..n {
let _ = gradual1.process_next_object(state);
}
let state = TaikoScoreState {
max_combo: 246,
n300: 200,
n100: 40,
misses: 6,
};
let next = gradual1.process_next_object(state);
let next_n = gradual2.process_next_n_objects(state, n);
assert_eq!(next_n, next);
}
#[cfg(not(any(feature = "async_tokio", feature = "async_std")))]
#[test]
fn gradual_end_eq_regular() {
let map = Beatmap::from_path("./maps/1028484.osu").expect("failed to parse map");
let mods = 64;
let regular = TaikoPP::new(&map).mods(mods).calculate();
let mut gradual = TaikoGradualPerformanceAttributes::new(&map, mods);
let state = TaikoScoreState {
max_combo: 289,
n300: 289,
n100: 0,
misses: 0,
};
let gradual_end = gradual.process_next_n_objects(state, usize::MAX).unwrap();
assert_eq!(regular, gradual_end);
}
#[cfg(not(any(feature = "async_tokio", feature = "async_std")))]
#[test]
fn gradual_eq_regular_passed() {
let map = Beatmap::from_path("./maps/1028484.osu").expect("failed to parse map");
let mods = 64;
let n = 250;
let regular = TaikoPP::new(&map).mods(mods).passed_objects(n).calculate();
let mut gradual = TaikoGradualPerformanceAttributes::new(&map, mods);
let state = TaikoScoreState {
max_combo: 246,
n300: 246,
n100: 0,
misses: 0,
};
let gradual = gradual.process_next_n_objects(state, n).unwrap();
assert_eq!(regular, gradual);
}
}
+3 -1
View File
@@ -2,6 +2,7 @@
mod difficulty_object;
mod gradual_difficulty;
mod gradual_performance;
mod hitobject_rhythm;
mod limited_queue;
mod pp;
@@ -12,6 +13,7 @@ mod stamina_cheese;
use difficulty_object::DifficultyObject;
pub use gradual_difficulty::*;
pub use gradual_performance::*;
use hitobject_rhythm::{closest_rhythm, HitObjectRhythm};
use limited_queue::LimitedQueue;
pub use pp::*;
@@ -227,7 +229,7 @@ impl TaikoDifficultyAttributes {
}
/// The result of a performance calculation on an osu!taiko map.
#[derive(Clone, Debug, Default)]
#[derive(Clone, Debug, Default, PartialEq)]
pub struct TaikoPerformanceAttributes {
/// The difficulty attributes that were used for the performance calculation
pub difficulty: TaikoDifficultyAttributes,
+3 -3
View File
@@ -38,11 +38,11 @@ pub struct TaikoPP<'map> {
mods: u32,
combo: Option<usize>,
acc: f64,
n_misses: usize,
passed_objects: Option<usize>,
n300: Option<usize>,
n100: Option<usize>,
pub(crate) n300: Option<usize>,
pub(crate) n100: Option<usize>,
pub(crate) n_misses: usize,
}
impl<'map> TaikoPP<'map> {