From 2d2d1bedddf1664ef5037de502cc9b7885462b89 Mon Sep 17 00:00:00 2001 From: smoogipooo Date: Thu, 11 May 2017 14:48:08 +0900 Subject: [PATCH] More concrete method to determine if all hit objects have been judged. Covers the case where nested hit objects are involved. --- .../Objects/Drawables/DrawableHitObject.cs | 14 ++++++++++++-- osu.Game/Rulesets/UI/HitRenderer.cs | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index a300eeab31..45ef2553b5 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -12,6 +12,7 @@ using Container = osu.Framework.Graphics.Containers.Container; using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; using osu.Game.Audio; +using System.Linq; namespace osu.Game.Rulesets.Objects.Drawables { @@ -24,6 +25,11 @@ namespace osu.Game.Rulesets.Objects.Drawables public TJudgement Judgement; + /// + /// Whether this hit object has been judged. + /// + public virtual bool Judged => (Judgement?.Result ?? HitResult.None) != HitResult.None; + protected abstract TJudgement CreateJudgement(); protected abstract void UpdateState(ArmedState state); @@ -86,6 +92,11 @@ namespace osu.Game.Rulesets.Objects.Drawables /// public Color4 AccentColour { get; protected set; } + /// + /// Whether this hit object and all of its nested hit objects have been judged. + /// + public sealed override bool Judged => base.Judged && (NestedHitObjects?.All(h => h.Judged) ?? true); + protected DrawableHitObject(TObject hitObject) { HitObject = hitObject; @@ -97,7 +108,7 @@ namespace osu.Game.Rulesets.Objects.Drawables /// Whether a hit was processed. protected bool UpdateJudgement(bool userTriggered) { - IPartialJudgement partial = Judgement as IPartialJudgement; + var partial = Judgement as IPartialJudgement; // Never re-process non-partial hits if (Judgement.Result != HitResult.None && partial == null) @@ -169,7 +180,6 @@ namespace osu.Game.Rulesets.Objects.Drawables } private List> nestedHitObjects; - protected IEnumerable> NestedHitObjects => nestedHitObjects; protected void AddNested(DrawableHitObject h) diff --git a/osu.Game/Rulesets/UI/HitRenderer.cs b/osu.Game/Rulesets/UI/HitRenderer.cs index 4ca77f71df..559014ce95 100644 --- a/osu.Game/Rulesets/UI/HitRenderer.cs +++ b/osu.Game/Rulesets/UI/HitRenderer.cs @@ -189,7 +189,7 @@ namespace osu.Game.Rulesets.UI public override IEnumerable Objects => Beatmap.HitObjects; - protected override bool AllObjectsJudged => drawableObjects.All(h => h.Judgement.Result != HitResult.None); + protected override bool AllObjectsJudged => drawableObjects.All(h => h.Judged); /// /// The playfield.