From 8cc2af4060bfb8a9c1f7ede893aae75bfb219e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Wed, 7 May 2025 12:02:36 +0200 Subject: [PATCH] Fix gameplay leaderboard not always being expanded in gameplay leaderboard I'd have preferred a `get; init;` property but tests were also attached at the hip to the public bindable. Without some extra composition this is the best that I can do. --- .../Visual/Gameplay/TestSceneGameplayLeaderboard.cs | 2 +- .../MultiplayerGameplayLeaderboardTestScene.cs | 2 +- .../Multiplayer/TestSceneMultiSpectatorLeaderboard.cs | 2 +- .../TestSceneMultiplayerGameplayLeaderboardTeams.cs | 2 +- .../Multiplayer/Spectate/MultiSpectatorScreen.cs | 2 +- osu.Game/Screens/Play/HUD/DrawableGameplayLeaderboard.cs | 9 +++++---- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayLeaderboard.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayLeaderboard.cs index 4a1c0121ae..f8caa121a9 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayLeaderboard.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneGameplayLeaderboard.cs @@ -36,7 +36,7 @@ namespace osu.Game.Tests.Visual.Gameplay AddStep("toggle expanded", () => { if (leaderboard.IsNotNull()) - leaderboard.Expanded.Value = !leaderboard.Expanded.Value; + leaderboard.ForceExpand.Value = !leaderboard.ForceExpand.Value; }); AddSliderStep("set player score", 50, 5000000, 1222333, v => playerScore.Value = v); diff --git a/osu.Game.Tests/Visual/Multiplayer/MultiplayerGameplayLeaderboardTestScene.cs b/osu.Game.Tests/Visual/Multiplayer/MultiplayerGameplayLeaderboardTestScene.cs index 1481629ba0..3008edf41f 100644 --- a/osu.Game.Tests/Visual/Multiplayer/MultiplayerGameplayLeaderboardTestScene.cs +++ b/osu.Game.Tests/Visual/Multiplayer/MultiplayerGameplayLeaderboardTestScene.cs @@ -167,7 +167,7 @@ namespace osu.Game.Tests.Visual.Multiplayer public void TestScoreUpdates() { AddRepeatStep("update state", UpdateUserStatesRandomly, 100); - AddToggleStep("switch compact mode", expanded => Leaderboard!.Expanded.Value = expanded); + AddToggleStep("switch compact mode", expanded => Leaderboard!.ForceExpand.Value = expanded); } [Test] diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorLeaderboard.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorLeaderboard.cs index 806de68f07..131b644dcb 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorLeaderboard.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiSpectatorLeaderboard.cs @@ -58,7 +58,7 @@ namespace osu.Game.Tests.Visual.Multiplayer { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Expanded = { Value = true } + ForceExpand = { Value = true } } }); }); diff --git a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs index 15efde7abe..40d8650c69 100644 --- a/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs +++ b/osu.Game.Tests/Visual/Multiplayer/TestSceneMultiplayerGameplayLeaderboardTeams.cs @@ -50,7 +50,7 @@ namespace osu.Game.Tests.Visual.Multiplayer Origin = Anchor.BottomCentre, Team1Score = { BindTarget = LeaderboardProvider.TeamScores[0] }, Team2Score = { BindTarget = LeaderboardProvider.TeamScores[1] }, - Expanded = { BindTarget = Leaderboard!.Expanded }, + Expanded = { BindTarget = Leaderboard!.ForceExpand }, }, Add); }); } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorScreen.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorScreen.cs index 59cbef0d15..06efffbf6e 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/Spectate/MultiSpectatorScreen.cs @@ -154,7 +154,7 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer.Spectate }); leaderboardFlow.Insert(0, Leaderboard = new DrawableGameplayLeaderboard { - Expanded = { Value = true } + ForceExpand = { Value = true } }); LoadComponentAsync(new GameplayChatDisplay(room) diff --git a/osu.Game/Screens/Play/HUD/DrawableGameplayLeaderboard.cs b/osu.Game/Screens/Play/HUD/DrawableGameplayLeaderboard.cs index af03a6b73f..fb064cd753 100644 --- a/osu.Game/Screens/Play/HUD/DrawableGameplayLeaderboard.cs +++ b/osu.Game/Screens/Play/HUD/DrawableGameplayLeaderboard.cs @@ -20,7 +20,7 @@ namespace osu.Game.Screens.Play.HUD { public partial class DrawableGameplayLeaderboard : CompositeDrawable, ISerialisableDrawable { - public Bindable Expanded = new Bindable(); + public readonly Bindable ForceExpand = new Bindable(); protected readonly FillFlowContainer Flow; @@ -40,7 +40,7 @@ namespace osu.Game.Screens.Play.HUD private readonly IBindable userPlayingState = new Bindable(); private readonly IBindable holdingForHUD = new Bindable(); - private const int max_panels = 8; + private readonly Bindable expanded = new Bindable(); /// /// Create a new leaderboard. @@ -100,6 +100,7 @@ namespace osu.Game.Screens.Play.HUD configVisibility.BindValueChanged(_ => Scheduler.AddOnce(updateState)); userPlayingState.BindValueChanged(_ => Scheduler.AddOnce(updateState)); holdingForHUD.BindValueChanged(_ => Scheduler.AddOnce(updateState)); + ForceExpand.BindValueChanged(_ => Scheduler.AddOnce(updateState)); updateState(); } @@ -110,7 +111,7 @@ namespace osu.Game.Screens.Play.HUD scroll.ScrollToStart(false); Flow.FadeTo(player?.Configuration.ShowLeaderboard != false && configVisibility.Value ? 1 : 0, 100, Easing.OutQuint); - Expanded.Value = userPlayingState.Value == LocalUserPlayingState.Playing || holdingForHUD.Value; + expanded.Value = ForceExpand.Value || userPlayingState.Value == LocalUserPlayingState.Playing || holdingForHUD.Value; } /// @@ -128,7 +129,7 @@ namespace osu.Game.Screens.Play.HUD TrackedScore = drawable; } - drawable.Expanded.BindTo(Expanded); + drawable.Expanded.BindTo(expanded); Flow.Add(drawable); drawable.ScorePosition.BindValueChanged(_ => Scheduler.AddOnce(sort));