diff --git a/osu.Game/Screens/Backgrounds/EditorBackgroundScreen.cs b/osu.Game/Screens/Backgrounds/EditorBackgroundScreen.cs index b2fa05ae1bd7..f44cbbea819d 100644 --- a/osu.Game/Screens/Backgrounds/EditorBackgroundScreen.cs +++ b/osu.Game/Screens/Backgrounds/EditorBackgroundScreen.cs @@ -111,6 +111,9 @@ public void RefreshBackgroundAsync() private void updateState(bool withAnimation = true) { background?.Storyboard.FadeTo(showStoryboard.Value ? 1 : 0, withAnimation ? 500 : 0, Easing.OutQuint); + // if the storyboard is disabled, in some cases (e.g. involving `StoryboardReplacesBackground`) + // we still need to show the background sprite, because if we don't, then there will be no background shown at all + background?.Sprite.FadeTo(showStoryboard.Value ? 0 : 1, withAnimation ? 500 : 0, Easing.OutQuint); } public override bool Equals(BackgroundScreen? other) diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs index a67fbab55b3b..2ebf7767c338 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs @@ -53,6 +53,9 @@ public partial class GameplayWarmupScreen : RankedPlaySubScreen [Resolved] private RulesetStore rulesets { get; set; } = null!; + [Resolved] + private MusicController musicController { get; set; } = null!; + [Resolved] private Bindable globalBeatmap { get; set; } = null!; @@ -164,6 +167,10 @@ protected override void LoadComplete() globalRuleset.Value = ruleset; globalMods.Value = item.RequiredMods.Select(m => m.ToMod(rulesetInstance)).ToArray(); + // Play the new track from its preview point. + globalBeatmap.Value.PrepareTrackForPreview(false); + musicController.Play(true); + Client.ChangeState(MultiplayerUserState.Ready).FireAndForget(); } diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs index 8ecce26075ee..ee4556e1b824 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs @@ -66,9 +66,6 @@ public partial class RankedPlayScreen : OsuScreen, IPreviewTrackOwner, IHandlePr [Resolved] private PreviewTrackManager previewTrackManager { get; set; } = null!; - [Resolved] - private MusicController music { get; set; } = null!; - [Resolved] private QueueController? controller { get; set; } @@ -285,16 +282,9 @@ private void onStageChanged(RankedPlayStage stage) } } - public override void OnEntering(ScreenTransitionEvent e) - { - base.OnEntering(e); - - beginHandlingTrack(); - } - public override void OnSuspending(ScreenTransitionEvent e) { - endHandlingTrack(); + previewTrackManager.StopAnyPlaying(this); base.OnSuspending(e); } @@ -312,7 +302,7 @@ public override bool OnExiting(ScreenExitEvent e) return true; } - endHandlingTrack(); + previewTrackManager.StopAnyPlaying(this); client.LeaveRoom().FireAndForget(); @@ -341,8 +331,6 @@ public override void OnResuming(ScreenTransitionEvent e) { base.OnResuming(e); - beginHandlingTrack(); - if (e.Last is not MultiplayerPlayerLoader playerLoader) return; @@ -355,38 +343,6 @@ public override void OnResuming(ScreenTransitionEvent e) client.ChangeState(MultiplayerUserState.Idle).FireAndForget(); } - /// - /// Handles changes in the track to keep it looping while active. - /// - private void beginHandlingTrack() - { - Beatmap.BindValueChanged(applyLoopingToTrack, true); - } - - /// - /// Stops looping the current track and stops handling further changes to the track. - /// - private void endHandlingTrack() - { - Beatmap.ValueChanged -= applyLoopingToTrack; - Beatmap.Value.Track.Looping = false; - - previewTrackManager.StopAnyPlaying(this); - } - - /// - /// Invoked on changes to the beatmap to loop the track. See: . - /// - /// The beatmap change event. - private void applyLoopingToTrack(ValueChangedEvent beatmap) - { - if (!this.IsCurrentScreen()) - return; - - beatmap.NewValue.PrepareTrackForPreview(true); - music.EnsurePlayingSomething(); - } - public void PresentBeatmap(WorkingBeatmap beatmap, RulesetInfo ruleset) { // Do nothing to prevent the user from potentially being kicked out