mirror of
https://github.com/ppy/osu.git
synced 2025-01-26 22:23:22 +08:00
Fix HOC not propagating DHO results applied on kill
`DrawableHitObject.OnKilled()` calls `UpdateResult()` to clean up a hitobject's state definitively with regards to the judgement result before returning the DHO back to the pool. As it turns out, if a consumer was relying on this code path (as taiko was in the case of nested strong hit objects), it would not work properly with pooling, due to `HitObjectContainer` unsubscribing from `On{New,Revert}Result` *before* calling the DHO's `OnKilled()`. This in turn would lead to users potentially getting stuck in gameplay, due to `ScoreProcessor` not receiving all results via that event path. To resolve, change the call ordering to allow hit result changes applied in `OnKilled()` to propagate normally.
This commit is contained in:
parent
7abe33ad0e
commit
1d9aaac2c2
@ -124,9 +124,11 @@ namespace osu.Game.Rulesets.UI
|
|||||||
Debug.Assert(drawableMap.ContainsKey(entry));
|
Debug.Assert(drawableMap.ContainsKey(entry));
|
||||||
|
|
||||||
var drawable = drawableMap[entry];
|
var drawable = drawableMap[entry];
|
||||||
|
|
||||||
|
// OnKilled can potentially change the hitobject's result, so it needs to run first before unbinding.
|
||||||
|
drawable.OnKilled();
|
||||||
drawable.OnNewResult -= onNewResult;
|
drawable.OnNewResult -= onNewResult;
|
||||||
drawable.OnRevertResult -= onRevertResult;
|
drawable.OnRevertResult -= onRevertResult;
|
||||||
drawable.OnKilled();
|
|
||||||
|
|
||||||
drawableMap.Remove(entry);
|
drawableMap.Remove(entry);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user