From 18747e1bdb475c895c115c0bd2167455c28f1ea4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 24 Mar 2026 15:55:21 +0900 Subject: [PATCH] Fix storyboard / beatmap backgrounds being rendered in background of multiplayer (#37073) Closes https://github.com/ppy/osu/issues/37006 visually. Note that this adds a brief fade in on entering `PlayerLoader` from `OnlinePlayScreen`s due to actually loading the background at this point. I think this is fine. --- .../Screens/Backgrounds/BackgroundScreenBlack.cs | 16 +++++++++++++--- osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs | 5 +++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Backgrounds/BackgroundScreenBlack.cs b/osu.Game/Screens/Backgrounds/BackgroundScreenBlack.cs index 742d149580..0a53b0d77b 100644 --- a/osu.Game/Screens/Backgrounds/BackgroundScreenBlack.cs +++ b/osu.Game/Screens/Backgrounds/BackgroundScreenBlack.cs @@ -10,18 +10,28 @@ namespace osu.Game.Screens.Backgrounds { public partial class BackgroundScreenBlack : BackgroundScreen { - public BackgroundScreenBlack() + private readonly double delayBeforeBlack; + private readonly Box box; + + public BackgroundScreenBlack(double delayBeforeBlack = 0) { - InternalChild = new Box + this.delayBeforeBlack = delayBeforeBlack; + + InternalChild = box = new Box { Colour = Color4.Black, RelativeSizeAxes = Axes.Both, }; + + Alpha = 0; } public override void OnEntering(ScreenTransitionEvent e) { - Show(); + this + .Delay(delayBeforeBlack) + .FadeIn(200) + .OnComplete(_ => box.Hide()); } } } diff --git a/osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs b/osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs index cb14680626..9e39400c3a 100644 --- a/osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs +++ b/osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs @@ -10,6 +10,7 @@ using osu.Framework.Screens; using osu.Game.Graphics.Containers; using osu.Game.Online.API; using osu.Game.Overlays; +using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Menu; using osu.Game.Screens.OnlinePlay.Lounge; using osu.Game.Users; @@ -22,6 +23,10 @@ namespace osu.Game.Screens.OnlinePlay [Cached] protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Plum); + // Without this, the beatmap / menu background will be displayed behind the online play overlays. + // This adds needless load, and in some cases is visible when everything in front is transparent momentarily (song select). + protected override BackgroundScreen CreateBackground() => new BackgroundScreenBlack(WaveContainer.APPEAR_DURATION); + public IScreen CurrentSubScreen => screenStack.CurrentScreen; public override bool CursorVisible => (screenStack.CurrentScreen as IOnlinePlaySubScreen)?.CursorVisible ?? true;