diff --git a/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgementResult.cs b/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgementResult.cs index 2825d9170b..d1453cb7ad 100644 --- a/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgementResult.cs +++ b/osu.Game.Rulesets.Mania/Judgements/HoldNoteJudgementResult.cs @@ -27,6 +27,17 @@ namespace osu.Game.Rulesets.Mania.Judgements public bool IsHolding(double currentTime) => getLastReport(currentTime).holding; + public bool DroppedHoldAfter(double time) + { + foreach (var state in holdingState) + { + if (state.time >= time && !state.holding) + return true; + } + + return false; + } + public void ReportHoldState(double currentTime, bool holding) { var lastReport = getLastReport(currentTime); diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs index 4db73e4985..6c607886ae 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs @@ -235,7 +235,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables // // As per stable, this should not apply for early hits, waiting until the object starts to touch the // judgement area first. - if (Head.IsHit && isHolding.Value && DrawHeight > 0) + if (Head.IsHit && !Result.DroppedHoldAfter(HitObject.StartTime) && DrawHeight > 0) { // How far past the hit target this hold note is. float yOffset = Direction.Value == ScrollingDirection.Up ? -Y : Y;