Dan Balasescu
2b33aec124
Require slider head to be judged before ticks
2023-12-17 21:26:48 +09:00
Dan Balasescu
fddfa33e49
Fix 1-frame issues due to referencing external value
2023-12-17 20:19:25 +09:00
Dan Balasescu
9b02bd712b
Only track if in slider ball after any ticks missed
2023-12-17 20:12:02 +09:00
Dan Balasescu
fbe48d7be8
Fix tail being missed too early
2023-12-17 20:11:15 +09:00
Dan Balasescu
f77884b62f
Only hit passed-through ticks if none were missed
2023-12-17 19:57:48 +09:00
Dean Herbert
c0e96927aa
Merge branch 'master' into slider-late-hit-lenience
2023-12-17 13:00:01 +09:00
Dan Balasescu
12210017e4
Use the cursor position to test nested object validity
2023-12-15 17:05:14 +09:00
Dan Balasescu
6bd190c55d
Refactor all slider input into SliderInputManager
2023-12-15 16:13:32 +09:00
Dan Balasescu
599fdb0128
Add lenience for late-hit of slider heads
2023-12-15 14:14:58 +09:00
Bartłomiej Dach
605269f65f
Extract preempt durations to shared constants
2023-12-14 20:41:12 +01:00
Dan Balasescu
3f67538d61
Allow slider to be tracked before its start time
2023-12-13 16:59:41 +09:00
Dean Herbert
039f8e6242
Add note about shared code
2023-11-24 10:25:23 +09:00
Dan Balasescu
7998204cfe
Fix combo/combo colouring issues around spinners
2023-11-23 13:54:05 +09:00
Dan Balasescu
a8cf105beb
Merge pull request #25342 from peppy/slider-combo-matching-2
...
Fix osu! (slider) combo not matching expectations when classic mod is disabled
2023-11-10 15:07:05 +09:00
Dan Balasescu
44c0442f4f
Adjust comment on Slider's judgement
2023-11-10 14:00:34 +09:00
Dean Herbert
edef31f426
Correctly propagate classic behaviour flag to tail
2023-11-09 22:03:22 +09:00
Bartłomiej Dach
5180fa669b
Merge pull request #25343 from peppy/spinner-max-sample
...
Continue to play spinner bonus sounds when MAX display occurs
2023-11-09 13:34:29 +01:00
Dean Herbert
92e4a8666d
Add spinnerbonus-max
support and fallback to spinnerbonus
2023-11-06 18:43:47 +09:00
Dean Herbert
b219a371a9
Move sample playback logic local to avoid edge case with no bonus ticks
...
Can't see a better way of doing this.
2023-11-06 18:29:51 +09:00
Bartłomiej Dach
d3c5988bf1
Merge branch 'master' into slider-combo-matching-2
2023-11-03 09:11:39 +01:00
Bartłomiej Dach
a0757ce13f
Update xmldoc to match flipped flag semantics
2023-11-02 18:58:14 +01:00
Bartłomiej Dach
86ede717cb
Clean up comment
2023-11-02 18:52:47 +01:00
Dean Herbert
ac6fb386d1
Remove nested ternary
2023-11-02 23:42:52 +09:00
Dean Herbert
f0f595ca40
Continue to play spinner bonus sounds when MAX display occurs
2023-11-02 19:52:49 +09:00
Dean Herbert
818432fab4
Fix non-classic osu! combo not matching expectations
2023-11-02 19:27:55 +09:00
Dean Herbert
bf9f20705f
Simplify classic behaviour flag to only need to be specified on the slider itself
2023-11-02 18:31:29 +09:00
Dean Herbert
a7705284e7
Add better commenting around DrawableSliderHead
logic
2023-11-02 18:31:28 +09:00
Dean Herbert
9af2a5930c
Remove redundant passing of Scale
to nested objects
2023-11-02 17:52:10 +09:00
Dean Herbert
9c1f4b552e
Rename and invert flags for slider classic behaviours
2023-11-02 17:43:21 +09:00
Bartłomiej Dach
ad82ada030
Trim redundant comments
2023-11-02 08:18:37 +01:00
Dean Herbert
c2de03aa44
Fix all spinner ticks being alive and causing performance degradation
...
Regressed in https://github.com/ppy/osu/pull/25216 .
The new logic will ensure at least one tick is ready for judgement.
There shouldn't be a case where more than one is needed in a single
frame.
2023-11-01 18:28:07 +09:00
Dean Herbert
a91b704d21
Fix some new nullable inspections
2023-10-30 15:10:10 +09:00
Dan Balasescu
9a0882af69
Merge pull request #25218 from peppy/better-slider-judgement-handling
...
Fix out-of-order judgements when missing a slider head
2023-10-27 15:50:13 +09:00
Dean Herbert
2f95e7a284
Add note about implementation being shared
2023-10-25 15:44:51 +09:00
Dean Herbert
6eafb66fdf
Fix DrawableSliderTail
potentially forcing miss on head too early
2023-10-25 15:44:42 +09:00
Dean Herbert
74f794a549
Fix repeat circles on sliders not correctly getting dimmed
2023-10-25 14:01:55 +09:00
Dean Herbert
34505b3933
Merge pull request #25185 from bdach/minimum-sample-volume
2023-10-24 22:04:43 +09:00
Dean Herbert
bf313cc732
Merge pull request #25216 from bdach/spinner-tick-lifetime
...
Fix spinner ticks not playing samples correctly sometimes
2023-10-24 19:12:49 +09:00
Dean Herbert
5503407907
Force miss head when a tick or repeat is successfully judged
2023-10-24 19:10:57 +09:00
Dean Herbert
5eefc5323d
Standardise DrawableSliderRepeat
/ DrawableSliderTick
judgement implementations
2023-10-24 19:10:57 +09:00
Dean Herbert
176cb0dd28
Remove unused variable
2023-10-24 19:10:57 +09:00
Dean Herbert
93147a5998
Change slider tail tick to only hold back judgement on ticks/repeats
2023-10-24 19:10:57 +09:00
Dean Herbert
68397f0e81
Remove unused using
2023-10-24 18:01:24 +09:00
Bartłomiej Dach
a0c8158033
Remove unnecessary LifetimeEnd
specification
2023-10-24 10:42:03 +02:00
Bartłomiej Dach
0e5a521695
Merge pull request #25157 from peppy/spinner-anti-cheese-final
...
Fix spinner cheese by accounting for spin directionality
2023-10-24 08:13:32 +02:00
Bartłomiej Dach
cfd8d05fde
Fix spinner ticks not playing samples correctly sometimes
...
Noticed this during work on https://github.com/ppy/osu/pull/25185 .
In some circumstances, it seemed that spinner bonus ticks (and mostly
them specifically) would not always play with the correct volume.
Hours of debugging later pointed at a trace at
`DrawableAudioWrapper.refreshLayoutFromParent()` not firing sometimes.
Initially I thought it to be some sort of framework bug, but after
preparing a diff and running final checks, I noticed that sometimes
the sample was being played *by a `PoolableSkinnableSample` that wasn't
loaded*. And determining why *that* is the case turned out with this
diff.
As it happens, spinner ticks get assigned a start time proportionally,
i.e. the 1st of 10 ticks is placed at 10% of the duration, the 2nd
at 20%, and so on. The start time generally shouldn't matter,
because the spinner is manually judging the ticks. *However*, the ticks
*still* receive a lifetime start / end in the same way normal objects
do, which means that in some cases they can *not be alive* when they're
hit, which means that the `DrawableAudioWrapper` flow *hasn't had
a chance to run*, and rightly so.
To fix, ensure that all spinner ticks are alive throughout the entirety
of the spinner's duration.
2023-10-23 21:29:55 +02:00
Dean Herbert
4e057b446a
Rename accumulated rotation variable
2023-10-23 16:46:15 +09:00
Dean Herbert
d0599496bd
Merge pull request #25177 from peppy/spinner-max-display
2023-10-21 11:10:09 +09:00
Bartłomiej Dach
b321d556b6
Enforce minimum gameplay sample volume of 5%
2023-10-20 15:50:13 +02:00
Dean Herbert
3fb74cb5f9
Move helper method to LegacyRulesetExtensions
and stop applying rounding allowance to catch
...
As discussed, it isn't used in stable like this. Was a mistake.
2023-10-20 18:57:14 +09:00