diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs index d18b3dd65e..60586327ab 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -5,6 +5,7 @@ using System.ComponentModel; using osu.Game.Rulesets.Objects.Drawables; using osu.Framework.Graphics; using osu.Game.Rulesets.Objects.Types; +using System.Linq; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -31,7 +32,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables UpdatePreemptState(); - var offset = !AllJudged ? 0 : Time.Current - ((HitObject as IHasEndTime)?.EndTime ?? HitObject.StartTime); + var judgement = Judgements.FirstOrDefault(); + var offset = judgement != null ? judgement.TimeOffset : 0; using (BeginDelayedSequence(TIME_PREEMPT + offset, true)) UpdateCurrentState(state); } diff --git a/osu.Game/Rulesets/Judgements/Judgement.cs b/osu.Game/Rulesets/Judgements/Judgement.cs index 5ee2421f4f..29cd3ff384 100644 --- a/osu.Game/Rulesets/Judgements/Judgement.cs +++ b/osu.Game/Rulesets/Judgements/Judgement.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Judgements public bool IsHit => Result > HitResult.Miss; /// - /// The offset at which this judgement occurred. + /// The offset from a perfect hit at which this judgement occurred. /// Populated when added via . /// public double TimeOffset { get; internal set; } diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index dfea9527e1..e72d0dd142 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -138,7 +138,7 @@ namespace osu.Game.Rulesets.Objects.Drawables { judgementOccurred = false; - if (AllJudged) + if (AllJudged || State != ArmedState.Idle) return false; if (NestedHitObjects != null)