diff --git a/osu.Game.Rulesets.Taiko/Objects/TaikoHitWindows.cs b/osu.Game.Rulesets.Taiko/Objects/TaikoHitWindows.cs
index 2c207114da..9199e6f141 100644
--- a/osu.Game.Rulesets.Taiko/Objects/TaikoHitWindows.cs
+++ b/osu.Game.Rulesets.Taiko/Objects/TaikoHitWindows.cs
@@ -17,8 +17,6 @@ namespace osu.Game.Rulesets.Taiko.Objects
{ HitResult.Miss, (270, 190, 140) },
};
- protected override HitResult LowestSuccessfulHitResult => HitResult.Good;
-
public override bool IsHitResultAllowed(HitResult result)
{
switch (result)
diff --git a/osu.Game/Rulesets/Objects/HitWindows.cs b/osu.Game/Rulesets/Objects/HitWindows.cs
index cf8769a105..40fb98a997 100644
--- a/osu.Game/Rulesets/Objects/HitWindows.cs
+++ b/osu.Game/Rulesets/Objects/HitWindows.cs
@@ -51,9 +51,19 @@ namespace osu.Game.Rulesets.Objects
public double Miss { get; protected set; }
///
- /// The with the largest hit window that produces a successful hit.
+ /// Retrieves the with the largest hit window that produces a successful hit.
///
- protected virtual HitResult LowestSuccessfulHitResult => HitResult.Meh;
+ /// The lowest allowed successful .
+ protected HitResult LowestSuccessfulHitResult()
+ {
+ for (var result = HitResult.Meh; result <= HitResult.Perfect; ++result)
+ {
+ if (IsHitResultAllowed(result))
+ return result;
+ }
+
+ return HitResult.None;
+ }
///
/// Check whether it is possible to achieve the provided .
@@ -137,6 +147,6 @@ namespace osu.Game.Rulesets.Objects
///
/// The time offset.
/// Whether the can be hit at any point in the future from this time offset.
- public bool CanBeHit(double timeOffset) => timeOffset <= HalfWindowFor(LowestSuccessfulHitResult);
+ public bool CanBeHit(double timeOffset) => timeOffset <= HalfWindowFor(LowestSuccessfulHitResult());
}
}