diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
index 59088cffda..d798eba4e1 100644
--- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
+++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs
@@ -171,7 +171,10 @@ namespace osu.Game.Rulesets.Objects.Drawables
protected DrawableHitObject([CanBeNull] HitObject initialHitObject = null)
{
if (initialHitObject != null)
+ {
lifetimeEntry = new UnmanagedHitObjectEntry(initialHitObject);
+ ensureEntryHasResult();
+ }
}
[BackgroundDependencyLoader]
@@ -239,13 +242,7 @@ namespace osu.Game.Rulesets.Objects.Drawables
LifetimeStart = lifetimeEntry.LifetimeStart;
LifetimeEnd = lifetimeEntry.LifetimeEnd;
- // Ensure this DHO has a result.
- lifetimeEntry.Result ??= CreateResult(HitObject.CreateJudgement())
- ?? throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateResult)}.");
-
- // Copy back the result to the entry for potential future retrieval.
- if (lifetimeEntry != null)
- lifetimeEntry.Result = Result;
+ ensureEntryHasResult();
foreach (var h in HitObject.NestedHitObjects)
{
@@ -799,6 +796,13 @@ namespace osu.Game.Rulesets.Objects.Drawables
/// The that provides the scoring information.
protected virtual JudgementResult CreateResult(Judgement judgement) => new JudgementResult(HitObject, judgement);
+ private void ensureEntryHasResult()
+ {
+ Debug.Assert(lifetimeEntry != null);
+ lifetimeEntry.Result ??= CreateResult(HitObject.CreateJudgement())
+ ?? throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateResult)}.");
+ }
+
protected override void Dispose(bool isDisposing)
{
base.Dispose(isDisposing);