From ab7985f31ea0a104b5db666e95a5f9e85195baa2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 5 Sep 2025 16:19:55 +0900 Subject: [PATCH] Improve initial state handling --- osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs | 11 +++++++++-- osu.Game/Skinning/LegacyRankDisplay.cs | 13 ++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs b/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs index ec31a03f90..5ea0e75956 100644 --- a/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs +++ b/osu.Game/Screens/Play/HUD/DefaultRankDisplay.cs @@ -63,6 +63,13 @@ namespace osu.Game.Screens.Play.HUD lastSamplePlayback = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); } + protected override void LoadComplete() + { + base.LoadComplete(); + + updateRank(scoreProcessor.Rank.Value); + } + protected override void Update() { base.Update(); @@ -75,7 +82,7 @@ namespace osu.Game.Screens.Play.HUD return; } - if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value) + if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value || currentRank == ScoreRank.F) updateRank(currentRank); } @@ -87,7 +94,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 && displayedRank != null) + if (displayedRank != null && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed) { if (rank > displayedRank) rankUpSample.Play(); diff --git a/osu.Game/Skinning/LegacyRankDisplay.cs b/osu.Game/Skinning/LegacyRankDisplay.cs index da033d9756..3109f68e9f 100644 --- a/osu.Game/Skinning/LegacyRankDisplay.cs +++ b/osu.Game/Skinning/LegacyRankDisplay.cs @@ -67,6 +67,13 @@ namespace osu.Game.Skinning lastSamplePlayback = statics.GetBindable(Static.LastRankChangeSamplePlaybackTime); } + protected override void LoadComplete() + { + base.LoadComplete(); + + updateRank(scoreProcessor.Rank.Value); + } + protected override void Update() { base.Update(); @@ -79,7 +86,7 @@ namespace osu.Game.Skinning return; } - if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value) + if ((timeSinceChange += Time.Elapsed) >= time_before_commit || scoreProcessor.HasCompleted.Value || currentRank == ScoreRank.F) updateRank(currentRank); } @@ -89,7 +96,7 @@ namespace osu.Game.Skinning rankDisplay.Texture = texture; - if (texture != null) + if (texture != null && displayedRank != null) { var transientRank = new Sprite { @@ -111,7 +118,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 && displayedRank != null) + if (displayedRank != null && rank > ScoreRank.F && PlaySamples.Value && enoughSampleTimeElapsed) { if (rank > displayedRank) rankUpSample.Play();