diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 4b3129929e..910abfeb4a 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; +using osu.Framework.Extensions.TypeExtensions; using osu.Game.Audio; using osu.Game.Graphics; using osu.Game.Rulesets.Judgements; @@ -70,7 +71,7 @@ namespace osu.Game.Rulesets.Objects.Drawables /// /// The scoring result of this . /// - public readonly JudgementResult Result; + public JudgementResult Result { get; private set; } private bool judgementOccurred; @@ -87,14 +88,19 @@ namespace osu.Game.Rulesets.Objects.Drawables protected DrawableHitObject(HitObject hitObject) { HitObject = hitObject; - - if (hitObject.Judgement != null) - Result = CreateJudgementResult(hitObject.Judgement); } [BackgroundDependencyLoader] private void load() { + if (HitObject.Judgement != null) + { + Result = CreateJudgementResult(HitObject.Judgement); + + if (Result == null) + throw new InvalidOperationException($"{GetType().ReadableName()} must provide a {nameof(JudgementResult)} through {nameof(CreateJudgementResult)}."); + } + var samples = GetSamples().ToArray(); if (samples.Any()) @@ -188,6 +194,9 @@ namespace osu.Game.Rulesets.Objects.Drawables { application?.Invoke(Result); + if (!Result.HasResult) + throw new InvalidOperationException($"{GetType().ReadableName()} applied a {nameof(JudgementResult)} but did not update {nameof(JudgementResult.Type)}."); + judgementOccurred = true; // Ensure that the judgement is given a valid time offset, because this may not get set by the caller