1
0
mirror of https://github.com/ppy/osu.git synced 2026-05-17 03:02:36 +08:00

Change debounce to be delayed since last actual change to avoid state flickering

This commit is contained in:
Dean Herbert
2025-09-05 16:10:12 +09:00
Unverified
parent 45ef97c92c
commit 912c0a39cf
2 changed files with 22 additions and 20 deletions
+11 -10
View File
@@ -33,11 +33,11 @@ namespace osu.Game.Screens.Play.HUD
private SkinnableSound rankUpSample = null!;
private Bindable<double?> lastSamplePlayback = null!;
private double lastRankUpdate;
private double timeSinceChange;
private ScoreRank displayedRank;
private ScoreRank? displayedRank;
private const int minimum_update_rate = 3000;
private const int time_before_commit = 1500;
public DefaultRankDisplay()
{
@@ -69,13 +69,14 @@ namespace osu.Game.Screens.Play.HUD
var currentRank = scoreProcessor.Rank.Value;
if (currentRank != displayedRank)
if (currentRank == displayedRank)
{
bool enoughTimeElapsed = Time.Current - lastRankUpdate >= minimum_update_rate;
if (enoughTimeElapsed || currentRank == ScoreRank.F)
updateRank(currentRank);
timeSinceChange = 0;
return;
}
if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value)
updateRank(currentRank);
}
private void updateRank(ScoreRank rank)
@@ -86,7 +87,7 @@ namespace osu.Game.Screens.Play.HUD
bool enoughSampleTimeElapsed = !lastSamplePlayback.Value.HasValue || Time.Current - lastSamplePlayback.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME;
// Also don't play rank-down sfx on quit/retry/initial update.
if (rank != displayedRank && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed && lastRankUpdate > 0)
if (rank != displayedRank && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed && displayedRank != null)
{
if (rank > displayedRank)
rankUpSample.Play();
@@ -97,7 +98,7 @@ namespace osu.Game.Screens.Play.HUD
}
displayedRank = rank;
lastRankUpdate = Time.Current;
timeSinceChange = 0;
}
}
}
+11 -10
View File
@@ -35,11 +35,11 @@ namespace osu.Game.Skinning
private SkinnableSound rankUpSample = null!;
private Bindable<double?> lastSamplePlayback = null!;
private double lastRankUpdate;
private double timeSinceChange;
private ScoreRank displayedRank;
private ScoreRank? displayedRank;
private const int minimum_update_rate = 3000;
private const int time_before_commit = 1500;
public LegacyRankDisplay()
{
@@ -73,13 +73,14 @@ namespace osu.Game.Skinning
var currentRank = scoreProcessor.Rank.Value;
if (currentRank != displayedRank)
if (currentRank == displayedRank)
{
bool enoughTimeElapsed = Time.Current - lastRankUpdate >= minimum_update_rate;
if (enoughTimeElapsed || currentRank == ScoreRank.F)
updateRank(currentRank);
timeSinceChange = 0;
return;
}
if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value)
updateRank(currentRank);
}
private void updateRank(ScoreRank rank)
@@ -110,7 +111,7 @@ namespace osu.Game.Skinning
bool enoughSampleTimeElapsed = !lastSamplePlayback.Value.HasValue || Time.Current - lastSamplePlayback.Value >= OsuGameBase.SAMPLE_DEBOUNCE_TIME;
// Also don't play rank-down sfx on quit/retry/initial update.
if (rank != displayedRank && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed && lastRankUpdate > 0)
if (rank != displayedRank && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed && displayedRank != null)
{
if (rank > displayedRank)
rankUpSample.Play();
@@ -121,7 +122,7 @@ namespace osu.Game.Skinning
}
displayedRank = rank;
lastRankUpdate = Time.Current;
timeSinceChange = 0;
}
}
}