diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index ca1c601c1d..4eea058163 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -172,7 +172,7 @@ namespace osu.Game.Rulesets.Objects.Drawables { if (initialHitObject != null) { - lifetimeEntry = new SyntheticHitObjectEntry(initialHitObject); + lifetimeEntry = new SyntheticHitObjectEntry(initialHitObject, initialHitObject.StartTime - InitialLifetimeOffset); ensureEntryHasResult(); } } @@ -227,7 +227,7 @@ namespace osu.Game.Rulesets.Objects.Drawables if (hitObject == null) throw new ArgumentNullException($"Cannot apply a null {nameof(HitObject)}."); - Apply(new SyntheticHitObjectEntry(hitObject)); + Apply(new SyntheticHitObjectEntry(hitObject, hitObject.StartTime - InitialLifetimeOffset)); } /// diff --git a/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs b/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs index 1954d7e6d2..d1d459a8f6 100644 --- a/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs +++ b/osu.Game/Rulesets/Objects/HitObjectLifetimeEntry.cs @@ -30,12 +30,17 @@ namespace osu.Game.Rulesets.Objects /// Creates a new . /// /// The to store the lifetime of. - public HitObjectLifetimeEntry(HitObject hitObject) + /// The . + /// The . + public HitObjectLifetimeEntry(HitObject hitObject, double lifetimeStart = double.MinValue, double lifetimeEnd = double.MaxValue) { HitObject = hitObject; startTimeBindable.BindTo(HitObject.StartTimeBindable); - startTimeBindable.BindValueChanged(onStartTimeChanged, true); + // Only set initial lifetime if it is not provided + startTimeBindable.BindValueChanged(onStartTimeChanged, lifetimeStart == double.MinValue); + + setLifetime(lifetimeStart, lifetimeEnd); } // The lifetime start, as set by the hitobject. diff --git a/osu.Game/Rulesets/Objects/SyntheticHitObjectEntry.cs b/osu.Game/Rulesets/Objects/SyntheticHitObjectEntry.cs index 76f9eaf25a..c064f3ff10 100644 --- a/osu.Game/Rulesets/Objects/SyntheticHitObjectEntry.cs +++ b/osu.Game/Rulesets/Objects/SyntheticHitObjectEntry.cs @@ -1,6 +1,8 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +#nullable enable + using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Objects @@ -11,8 +13,8 @@ namespace osu.Game.Rulesets.Objects /// internal class SyntheticHitObjectEntry : HitObjectLifetimeEntry { - public SyntheticHitObjectEntry(HitObject hitObject) - : base(hitObject) + public SyntheticHitObjectEntry(HitObject hitObject, double initialLifetimeStart) + : base(hitObject, initialLifetimeStart) { } }