diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs index a67fbab55b..2ebf7767c3 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/GameplayWarmupScreen.cs @@ -53,6 +53,9 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay [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 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay 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 8ecce26075..ee4556e1b8 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/RankedPlay/RankedPlayScreen.cs @@ -66,9 +66,6 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay [Resolved] private PreviewTrackManager previewTrackManager { get; set; } = null!; - [Resolved] - private MusicController music { get; set; } = null!; - [Resolved] private QueueController? controller { get; set; } @@ -285,16 +282,9 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay } } - 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 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay return true; } - endHandlingTrack(); + previewTrackManager.StopAnyPlaying(this); client.LeaveRoom().FireAndForget(); @@ -341,8 +331,6 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay { base.OnResuming(e); - beginHandlingTrack(); - if (e.Last is not MultiplayerPlayerLoader playerLoader) return; @@ -355,38 +343,6 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.RankedPlay 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