diff --git a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
index f0b57e5c09..07c499b56c 100644
--- a/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
+++ b/osu.Game.Rulesets.Taiko/Judgements/TaikoStrongHitJudgement.cs
@@ -11,9 +11,7 @@ namespace osu.Game.Rulesets.Taiko.Judgements
public TaikoStrongHitJudgement()
{
- base.Result = HitResult.Perfect;
+ Final = true;
}
-
- public new HitResult Result => base.Result;
}
}
diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs
index 6c14a71a4c..abb4c7770e 100644
--- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs
+++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs
@@ -17,6 +17,11 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
///
protected abstract TaikoAction[] HitActions { get; }
+ ///
+ /// Whether a second hit is allowed to be processed.
+ ///
+ protected bool SecondHitAllowed { get; private set; }
+
///
/// Whether the last key pressed is a valid hit key.
///
@@ -45,7 +50,15 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
if (!validKeyPressed)
AddJudgement(new TaikoJudgement { Result = HitResult.Miss });
else if (hitOffset < HitObject.HitWindowGood)
- AddJudgement(new TaikoJudgement { Result = hitOffset < HitObject.HitWindowGreat ? HitResult.Great : HitResult.Good });
+ {
+ AddJudgement(new TaikoJudgement
+ {
+ Result = hitOffset < HitObject.HitWindowGreat ? HitResult.Great : HitResult.Good,
+ Final = !HitObject.IsStrong
+ });
+
+ SecondHitAllowed = true;
+ }
else
AddJudgement(new TaikoJudgement { Result = HitResult.Miss });
}
diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHitStrong.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHitStrong.cs
index 48812093c4..c07eaf4d8b 100644
--- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHitStrong.cs
+++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHitStrong.cs
@@ -3,6 +3,7 @@
using System;
using System.Linq;
+using osu.Game.Rulesets.Objects.Drawables;
using osu.Game.Rulesets.Taiko.Judgements;
namespace osu.Game.Rulesets.Taiko.Objects.Drawables
@@ -24,27 +25,25 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
{
}
- private bool processedSecondHit;
- public override bool AllJudged => processedSecondHit && base.AllJudged;
-
protected override void CheckForJudgements(bool userTriggered, double timeOffset)
{
- if (!base.AllJudged)
+ if (!SecondHitAllowed)
{
base.CheckForJudgements(userTriggered, timeOffset);
return;
}
if (!userTriggered)
+ {
+ if (timeOffset > second_hit_window)
+ AddJudgement(new TaikoStrongHitJudgement { Result = HitResult.Miss });
return;
+ }
// If we get here, we're assured that the key pressed is the correct secondary key
if (Math.Abs(firstHitTime - Time.Current) < second_hit_window)
- {
- AddJudgement(new TaikoStrongHitJudgement());
- processedSecondHit = true;
- }
+ AddJudgement(new TaikoStrongHitJudgement { Result = HitResult.Great });
}
public override bool OnReleased(TaikoAction action)
@@ -56,8 +55,11 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
public override bool OnPressed(TaikoAction action)
{
+ if (AllJudged)
+ return false;
+
// Check if we've handled the first key
- if (!base.AllJudged)
+ if (!SecondHitAllowed)
{
// First key hasn't been handled yet, attempt to handle it
bool handled = base.OnPressed(action);
@@ -72,10 +74,6 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
return handled;
}
- // If we've already hit the second key, don't handle this object any further
- if (processedSecondHit)
- return false;
-
// Don't handle represses of the first key
if (firstHitAction == action)
return false;