1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-13 08:32:57 +08:00

Fix hodl tail notes not correctly handling nested bonus judgement

This commit is contained in:
Dean Herbert 2023-10-13 17:36:19 +09:00
parent 94b64044e0
commit 125f28219d
No known key found for this signature in database
2 changed files with 12 additions and 27 deletions

View File

@ -3,7 +3,6 @@
#nullable disable
using System.Diagnostics;
using osu.Framework.Graphics;
using osu.Framework.Input.Events;
using osu.Game.Rulesets.Scoring;
@ -33,35 +32,19 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
public void UpdateResult() => base.UpdateResult(true);
protected override void CheckForResult(bool userTriggered, double timeOffset)
{
Debug.Assert(HitObject.HitWindows != null);
protected override void CheckForResult(bool userTriggered, double timeOffset) =>
// Factor in the release lenience
timeOffset /= TailNote.RELEASE_WINDOW_LENIENCE;
base.CheckForResult(userTriggered, timeOffset / TailNote.RELEASE_WINDOW_LENIENCE);
if (!userTriggered)
{
if (!HitObject.HitWindows.CanBeHit(timeOffset))
ApplyResult(r => r.Type = r.Judgement.MinResult);
protected override HitResult MutateResultApplication(HitResult result)
{
// If the head wasn't hit or the hold note was broken, cap the max score to Meh.
bool hasComboBreak = !HoldNote.Head.IsHit || HoldNote.Body.HasHoldBreak;
return;
}
if (result > HitResult.Meh && hasComboBreak)
return HitResult.Meh;
var result = HitObject.HitWindows.ResultFor(timeOffset);
if (result == HitResult.None)
return;
ApplyResult(r =>
{
// If the head wasn't hit or the hold note was broken, cap the max score to Meh.
bool hasComboBreak = !HoldNote.Head.IsHit || HoldNote.Body.HasHoldBreak;
if (result > HitResult.Meh && hasComboBreak)
result = HitResult.Meh;
r.Type = result;
});
return result;
}
public override bool OnPressed(KeyBindingPressEvent<ManiaAction> e) => false; // Handled by the hold note

View File

@ -108,9 +108,11 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables
return;
bonusNote!.TriggerResult(result == HitResult.Perfect);
ApplyResult(r => r.Type = result);
ApplyResult(r => r.Type = MutateResultApplication(result));
}
protected virtual HitResult MutateResultApplication(HitResult result) => result;
public virtual bool OnPressed(KeyBindingPressEvent<ManiaAction> e)
{
if (e.Action != Action.Value)