mirror of
https://github.com/ppy/osu.git
synced 2024-12-16 17:42:54 +08:00
cfd8d05fde
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. |
||
---|---|---|
.. | ||
Connections | ||
DrawableHitCircle.cs | ||
DrawableOsuHitObject.cs | ||
DrawableOsuJudgement.cs | ||
DrawableSlider.cs | ||
DrawableSliderBall.cs | ||
DrawableSliderHead.cs | ||
DrawableSliderRepeat.cs | ||
DrawableSliderTail.cs | ||
DrawableSliderTick.cs | ||
DrawableSpinner.cs | ||
DrawableSpinnerBonusTick.cs | ||
DrawableSpinnerTick.cs | ||
IRequireTracking.cs | ||
ITrackSnaking.cs | ||
SkinnableLighting.cs |