diff --git a/osu.Game/Graphics/UserInterface/RollingCounter.cs b/osu.Game/Graphics/UserInterface/RollingCounter.cs
index 67b0b6a06b..16555075d1 100644
--- a/osu.Game/Graphics/UserInterface/RollingCounter.cs
+++ b/osu.Game/Graphics/UserInterface/RollingCounter.cs
@@ -25,7 +25,9 @@ namespace osu.Game.Graphics.UserInterface
set => current.Current = value;
}
- private IHasText displayedCountSpriteText;
+ private IHasText displayedCountText;
+
+ public Drawable DrawableCount { get; private set; }
///
/// If true, the roll-up duration will be proportional to change in value.
@@ -72,16 +74,16 @@ namespace osu.Game.Graphics.UserInterface
[BackgroundDependencyLoader]
private void load()
{
- displayedCountSpriteText = CreateText();
+ displayedCountText = CreateText();
UpdateDisplay();
- Child = (Drawable)displayedCountSpriteText;
+ Child = DrawableCount = (Drawable)displayedCountText;
}
protected void UpdateDisplay()
{
- if (displayedCountSpriteText != null)
- displayedCountSpriteText.Text = FormatCount(DisplayedCount);
+ if (displayedCountText != null)
+ displayedCountText.Text = FormatCount(DisplayedCount);
}
protected override void LoadComplete()
diff --git a/osu.Game/Rulesets/Scoring/JudgementProcessor.cs b/osu.Game/Rulesets/Scoring/JudgementProcessor.cs
index 201a05e569..ed4a16f0e8 100644
--- a/osu.Game/Rulesets/Scoring/JudgementProcessor.cs
+++ b/osu.Game/Rulesets/Scoring/JudgementProcessor.cs
@@ -18,6 +18,11 @@ namespace osu.Game.Rulesets.Scoring
///
public event Action NewJudgement;
+ ///
+ /// Invoked when a judgement is reverted, usually due to rewinding gameplay.
+ ///
+ public event Action JudgementReverted;
+
///
/// The maximum number of hits that can be judged.
///
@@ -71,6 +76,8 @@ namespace osu.Game.Rulesets.Scoring
JudgedHits--;
RevertResultInternal(result);
+
+ JudgementReverted?.Invoke(result);
}
///
diff --git a/osu.Game/Screens/Play/HUD/PerformancePointsCounter.cs b/osu.Game/Screens/Play/HUD/PerformancePointsCounter.cs
index 2fc3f23190..b82a85691a 100644
--- a/osu.Game/Screens/Play/HUD/PerformancePointsCounter.cs
+++ b/osu.Game/Screens/Play/HUD/PerformancePointsCounter.cs
@@ -42,6 +42,9 @@ namespace osu.Game.Screens.Play.HUD
[CanBeNull]
private GameplayState gameplayState { get; set; }
+ [Resolved]
+ private GameplayClock gameplayClock { get; set; }
+
[CanBeNull]
private TimedDifficultyAttributes[] timedAttributes;
@@ -70,7 +73,24 @@ namespace osu.Game.Screens.Play.HUD
base.LoadComplete();
if (scoreProcessor != null)
+ {
scoreProcessor.NewJudgement += onNewJudgement;
+ scoreProcessor.JudgementReverted += onJudgementReverted;
+ }
+ }
+
+ private bool isValid;
+
+ protected bool IsValid
+ {
+ set
+ {
+ if (value == isValid)
+ return;
+
+ isValid = value;
+ DrawableCount.FadeTo(isValid ? 1 : 0.3f, 1000, Easing.OutQuint);
+ }
}
private void onNewJudgement(JudgementResult judgement)
@@ -86,6 +106,12 @@ namespace osu.Game.Screens.Play.HUD
var calculator = gameplayState.Ruleset.CreatePerformanceCalculator(timedAttributes[attribIndex].Attributes, gameplayState.Score.ScoreInfo);
Current.Value = (int)Math.Round(calculator?.Calculate() ?? 0, MidpointRounding.AwayFromZero);
+ IsValid = true;
+ }
+
+ private void onJudgementReverted(JudgementResult obj)
+ {
+ IsValid = false;
}
protected override LocalisableString FormatCount(int count) => count.ToString(@"D");