diff --git a/osu.Game/Rulesets/UI/HitObjectContainer.cs b/osu.Game/Rulesets/UI/HitObjectContainer.cs index 7315ce61e7..4164681ffc 100644 --- a/osu.Game/Rulesets/UI/HitObjectContainer.cs +++ b/osu.Game/Rulesets/UI/HitObjectContainer.cs @@ -57,6 +57,14 @@ namespace osu.Game.Rulesets.UI lifetimeManager.EntryBecameDead += entryBecameDead; } + protected override void LoadAsyncComplete() + { + base.LoadAsyncComplete(); + + // Application of hitobjects during load() may have changed their start times, so ensure the correct sorting order. + SortInternal(); + } + #region Pooling support public void Add(HitObjectLifetimeEntry entry) => lifetimeManager.AddEntry(entry); @@ -163,7 +171,12 @@ namespace osu.Game.Rulesets.UI private void bindStartTime(DrawableHitObject hitObject) { var bindable = hitObject.StartTimeBindable.GetBoundCopy(); - bindable.BindValueChanged(_ => SortInternal()); + + bindable.BindValueChanged(_ => + { + if (LoadState >= LoadState.Ready) + SortInternal(); + }); startTimeMap[hitObject] = bindable; }