diff --git a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
index 4228840461..cec2b7e6b9 100644
--- a/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/ScoreProcessor.cs
@@ -39,6 +39,16 @@ namespace osu.Game.Rulesets.Scoring
///
public readonly BindableDouble Accuracy = new BindableDouble(1) { MinValue = 0, MaxValue = 1 };
+ ///
+ /// The accuracy which increase from 0%.
+ ///
+ public readonly BindableDouble IncreaseAccuracy = new BindableDouble(0) { MinValue = 0, MaxValue = 1 };
+
+ ///
+ /// The accuracy which Decrease from 100%.
+ ///
+ public readonly BindableDouble DecreaseAccuracy = new BindableDouble(0) { MinValue = 0, MaxValue = 1 };
+
///
/// The current combo.
///
@@ -264,6 +274,10 @@ namespace osu.Game.Rulesets.Scoring
private void updateScore()
{
Accuracy.Value = currentMaximumScoringValues.BaseScore > 0 ? (double)currentScoringValues.BaseScore / currentMaximumScoringValues.BaseScore : 1;
+ IncreaseAccuracy.Value = maximumScoringValues.BaseScore > 0 ? (double)currentScoringValues.BaseScore / maximumScoringValues.BaseScore : 0;
+ DecreaseAccuracy.Value = maximumScoringValues.BaseScore > 0
+ ? (double)(maximumScoringValues.BaseScore - (currentMaximumScoringValues.BaseScore - currentScoringValues.BaseScore)) / maximumScoringValues.BaseScore
+ : 1;
TotalScore.Value = computeScore(Mode.Value, currentScoringValues, maximumScoringValues);
}
diff --git a/osu.Game/Screens/Play/HUD/GameplayAccuracyCounter.cs b/osu.Game/Screens/Play/HUD/GameplayAccuracyCounter.cs
index 1933193515..f8848f57b9 100644
--- a/osu.Game/Screens/Play/HUD/GameplayAccuracyCounter.cs
+++ b/osu.Game/Screens/Play/HUD/GameplayAccuracyCounter.cs
@@ -4,6 +4,8 @@
#nullable disable
using osu.Framework.Allocation;
+using osu.Framework.Bindables;
+using osu.Game.Configuration;
using osu.Game.Graphics.UserInterface;
using osu.Game.Rulesets.Scoring;
@@ -11,10 +13,38 @@ namespace osu.Game.Screens.Play.HUD
{
public abstract partial class GameplayAccuracyCounter : PercentageCounter
{
+ [SettingSource("Accuracy Display Mode")]
+ public Bindable AccType { get; } = new Bindable();
+
[BackgroundDependencyLoader]
private void load(ScoreProcessor scoreProcessor)
{
- Current.BindTo(scoreProcessor.Accuracy);
+ AccType.BindValueChanged(mod =>
+ {
+ Current.UnbindBindings();
+
+ switch (mod.NewValue)
+ {
+ case AccuracyType.Current:
+ Current.BindTo(scoreProcessor.Accuracy);
+ break;
+
+ case AccuracyType.Increase:
+ Current.BindTo(scoreProcessor.IncreaseAccuracy);
+ break;
+
+ case AccuracyType.Decrease:
+ Current.BindTo(scoreProcessor.DecreaseAccuracy);
+ break;
+ }
+ }, true);
+ }
+
+ public enum AccuracyType
+ {
+ Current,
+ Increase,
+ Decrease
}
}
}