diff --git a/osu.Game/Rulesets/Scoring/HitEventExtensions.cs b/osu.Game/Rulesets/Scoring/HitEventExtensions.cs
index 7442c6ccc313..269342460f33 100644
--- a/osu.Game/Rulesets/Scoring/HitEventExtensions.cs
+++ b/osu.Game/Rulesets/Scoring/HitEventExtensions.cs
@@ -73,13 +73,36 @@ public static class HitEventExtensions
public static bool AffectsUnstableRate(HitEvent e) => AffectsUnstableRate(e.HitObject, e.Result);
public static bool AffectsUnstableRate(HitObject hitObject, HitResult result) => hitObject.HitWindows != HitWindows.Empty && result.IsHit();
+ ///
+ /// Data type returned by which allows efficient incremental processing.
+ ///
+ ///
+ /// This should be passed back into future calls as a parameter.
+ ///
+ /// The optimisations used here rely on hit events being a consecutive sequence from a single gameplay session.
+ /// When a new gameplay session is started, any existing results should be disposed.
+ ///
public class UnstableRateCalculationResult
{
+ ///
+ /// Total events processed. For internal incremental calculation use.
+ ///
public int EventCount;
+
+ ///
+ /// Last sum-of-squares value. For internal incremental calculation use.
+ ///
public double SumOfSquares;
+
+ ///
+ /// Last mean value. For internal incremental calculation use.
+ ///
public double Mean;
- public double Result => 10.0 * Math.Sqrt(SumOfSquares / EventCount);
+ ///
+ /// The unstable rate.
+ ///
+ public double Result => EventCount == 0 ? 0 : 10.0 * Math.Sqrt(SumOfSquares / EventCount);
}
}
}