diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index 64d5639133..7456ce06bd 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -272,7 +272,24 @@ namespace osu.Game.Rulesets.Scoring
}
///
- /// Computes the total score of a given finalised . This should be used when a score is known to be complete.
+ /// Computes the accuracy of a given .
+ ///
+ /// The to compute the total score of.
+ /// The score's accuracy.
+ [Pure]
+ public double ComputeAccuracy(ScoreInfo scoreInfo)
+ {
+ if (!ruleset.RulesetInfo.Equals(scoreInfo.Ruleset))
+ throw new ArgumentException($"Unexpected score ruleset. Expected \"{ruleset.RulesetInfo.ShortName}\" but was \"{scoreInfo.Ruleset.ShortName}\".");
+
+ // We only extract scoring values from the score's statistics. This is because accuracy is always relative to the point of pass or fail rather than relative to the whole beatmap.
+ extractScoringValues(scoreInfo.Statistics, out var current, out var maximum);
+
+ return maximum.BaseScore > 0 ? current.BaseScore / maximum.BaseScore : 1;
+ }
+
+ ///
+ /// Computes the total score of a given .
///
///
/// Does not require to have been called before use.