From 6d0dc62502ecd82dd409b85ffcfdb6bee1a61f2a Mon Sep 17 00:00:00 2001 From: ekrctb Date: Fri, 9 Apr 2021 16:04:45 +0900 Subject: [PATCH] Make sure latest catcher position is used for catching logic A replay frame processed in CatchInputManager is applied to catcher in `CatcherArea`. The catcher position is then used for the catching logic for each hit object under `HitObjectContainer`. Thus, if `HitObjectContainer` came before `CatcherArea`, the replay input is delayed one frame. That was one reason why the catch autoplay misses hit objects (especially when fast-forwarded). --- osu.Game.Rulesets.Catch/UI/CatchPlayfield.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Catch/UI/CatchPlayfield.cs b/osu.Game.Rulesets.Catch/UI/CatchPlayfield.cs index 73420a9eda..0e1ef90737 100644 --- a/osu.Game.Rulesets.Catch/UI/CatchPlayfield.cs +++ b/osu.Game.Rulesets.Catch/UI/CatchPlayfield.cs @@ -51,8 +51,11 @@ namespace osu.Game.Rulesets.Catch.UI { droppedObjectContainer, CatcherArea.MovableCatcher.CreateProxiedContent(), - HitObjectContainer, + HitObjectContainer.CreateProxy(), + // This ordering (`CatcherArea` before `HitObjectContainer`) is important to + // make sure the up-to-date catcher position is used for the catcher catching logic of hit objects. CatcherArea, + HitObjectContainer, }; }