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)
{
}
}