diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index b2a1bfaabd..e86c218797 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Linq;
using osu.Framework.Configuration;
using osu.Framework.Extensions;
using osu.Framework.Extensions.TypeExtensions;
@@ -59,6 +60,11 @@ namespace osu.Game.Rulesets.Scoring
///
public readonly BindableInt Combo = new BindableInt();
+ ///
+ /// Create a for this processor.
+ ///
+ protected virtual HitWindows CreateHitWindows() => new HitWindows();
+
///
/// The current rank.
///
@@ -171,12 +177,10 @@ namespace osu.Game.Rulesets.Scoring
score.Rank = Rank;
score.Date = DateTimeOffset.Now;
- score.Statistics[HitResult.Perfect] = scoreResultCounts.GetOrDefault(HitResult.Perfect);
- score.Statistics[HitResult.Great] = scoreResultCounts.GetOrDefault(HitResult.Great);
- score.Statistics[HitResult.Good] = scoreResultCounts.GetOrDefault(HitResult.Good);
- score.Statistics[HitResult.Ok] = scoreResultCounts.GetOrDefault(HitResult.Ok);
- score.Statistics[HitResult.Meh] = scoreResultCounts.GetOrDefault(HitResult.Meh);
- score.Statistics[HitResult.Miss] = scoreResultCounts.GetOrDefault(HitResult.Miss);
+ var hitWindows = CreateHitWindows();
+
+ foreach (var result in Enum.GetValues(typeof(HitResult)).OfType().Where(r => hitWindows.IsHitResultAllowed(r)))
+ score.Statistics[result] = scoreResultCounts.GetOrDefault(result);
}
public abstract double GetStandardisedScore();