1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-15 16:27:43 +08:00
Commit Graph

23 Commits

Author SHA1 Message Date
Chandler Stowell
d2775680e6 use stack to pass action state when applying hit results
this removes closure allocations
2024-01-24 13:13:45 -05: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
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
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
ekrctb
11e1b22bf5 Move MaximumJudgementOffset to HitObject
We want to access this property for computing lifetime
2023-01-19 21:23:55 +09:00
Dan Balasescu
7bc8908ca9 Partial everything 2022-11-27 00:00:27 +09:00
sw1tchbl4d3
0cffbb7562 Clamp LifetimeStart of HitObject's to their judgement windows 2022-09-27 16:54:24 +02:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Salman Ahmed
4158146c71 Fix spinenr tick samples not positioned at centre
Causing samples to be played at left ear rather than centre.
2022-06-07 00:30:11 +03:00
smoogipoo
0bdf99b97a Remove OnParentReceived() 2020-12-03 20:08:42 +09:00
smoogipoo
73e99718bc Change order of OnParentReceived() 2020-12-03 20:06:26 +09:00
smoogipoo
0414e5c550 Add MaximumJudgementOffset to DrawableHitObject, use in more places 2020-11-26 01:12:42 +09:00
smoogipoo
3f78d81386 Add nested osu! hitobject pooling 2020-11-12 15:59:48 +09:00
smoogipoo
a77741927c Use new hit results in osu 2020-09-29 16:33:38 +09:00
Dean Herbert
1560e1786a Revert back to bool for application 2020-07-21 19:48:44 +09:00
Dean Herbert
947f4e0d4c Move tick handling to DrawableSpinner itself 2020-07-21 19:20:19 +09:00
Dean Herbert
05102bc1ba Split ticks up into bonus and non-bonus 2020-07-21 18:22:37 +09:00
Salman Ahmed
35ad409da6 Fix spinner bonus ticks samples not actually playing 2020-07-21 06:59:29 +03:00
Dean Herbert
f48984920d Change bonus volume logic to work 2020-07-21 11:31:29 +09:00
Salman Ahmed
949ab4e0d3 Move spinner bonus scoring to it's own component class
Also fixes counter rewinding issue and does optimizations.
2019-12-25 05:34:12 +03:00
iiSaLMaN
68e370ce7c Set spinner tick start time to allow result reverting 2019-10-14 00:39:20 +03:00
iiSaLMaN
bb4178fa03 Add drawable spinner ticks implementation 2019-08-20 21:17:27 +03:00