diff --git a/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs b/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs index 53cd411bb0..466fbf92a8 100644 --- a/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs +++ b/osu.Game.Tests/Visual/Navigation/TestSceneScreenNavigation.cs @@ -697,44 +697,6 @@ namespace osu.Game.Tests.Visual.Navigation AddUntilStep("wait for score panel removal", () => scorePanel.Parent == null); } - [TestCase(true)] - [TestCase(false)] - public void TestSongContinuesAfterExitPlayer(bool withUserPause) - { - Player player = null; - - IWorkingBeatmap beatmap() => Game.Beatmap.Value; - - Screens.SelectV2.SongSelect songSelect = null; - PushAndConfirm(() => songSelect = new SoloSongSelect()); - AddUntilStep("wait for song select", () => songSelect.CarouselItemsPresented); - - AddStep("import beatmap", () => BeatmapImportHelper.LoadOszIntoOsu(Game, virtualTrack: true).WaitSafely()); - - AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); - - if (withUserPause) - AddStep("pause", () => Game.Dependencies.Get().Stop(true)); - - AddStep("press enter", () => InputManager.Key(Key.Enter)); - - AddUntilStep("wait for player", () => - { - DismissAnyNotifications(); - return (player = Game.ScreenStack.CurrentScreen as Player) != null; - }); - - AddUntilStep("wait for fail", () => player.GameplayState.HasFailed); - - AddUntilStep("wait for track stop", () => !Game.MusicController.IsPlaying); - AddAssert("Ensure time before preview point", () => Game.MusicController.CurrentTrack.CurrentTime < beatmap().BeatmapInfo.Metadata.PreviewTime); - - pushEscape(); - - AddUntilStep("wait for track playing", () => Game.MusicController.IsPlaying); - AddAssert("Ensure time wasn't reset to preview point", () => Game.MusicController.CurrentTrack.CurrentTime < beatmap().BeatmapInfo.Metadata.PreviewTime); - } - [Test] public void TestMenuMakesMusic() { diff --git a/osu.Game.Tests/Visual/Navigation/TestSceneSongSelectNavigation.cs b/osu.Game.Tests/Visual/Navigation/TestSceneSongSelectNavigation.cs index 676be8fccf..9a1f1dc515 100644 --- a/osu.Game.Tests/Visual/Navigation/TestSceneSongSelectNavigation.cs +++ b/osu.Game.Tests/Visual/Navigation/TestSceneSongSelectNavigation.cs @@ -92,6 +92,30 @@ namespace osu.Game.Tests.Visual.Navigation waitForScreen(); } + [Test] + public void TestPresentBeatmapFromMainMenuUsesPreviewPoint() + { + BeatmapSetInfo beatmapInfo = null!; + + AddStep("import beatmap", () => + { + var task = BeatmapImportHelper.LoadOszIntoOsu(Game, virtualTrack: true); + task.WaitSafely(); + beatmapInfo = task.GetResultSafely(); + }); + + AddStep("present beatmap", () => Game.PresentBeatmap(beatmapInfo)); + + AddUntilStep("wait for track playing", () => Game.MusicController.IsPlaying); + + AddAssert("ensure time is reset to preview point", + () => + { + double timeFromPreviewPoint = Math.Abs(Game.MusicController.CurrentTrack.CurrentTime - beatmapInfo.Metadata.PreviewTime); + return timeFromPreviewPoint < 5000; + }); + } + [TestCase(true)] [TestCase(false)] public void TestSongContinuesAfterExitPlayer(bool withUserPause) diff --git a/osu.Game/Screens/SelectV2/SongSelect.cs b/osu.Game/Screens/SelectV2/SongSelect.cs index 33f2bd227d..6b1e812cdd 100644 --- a/osu.Game/Screens/SelectV2/SongSelect.cs +++ b/osu.Game/Screens/SelectV2/SongSelect.cs @@ -346,7 +346,7 @@ namespace osu.Game.Screens.SelectV2 ensureGlobalBeatmapValid(); - ensurePlayingSelected(true); + ensurePlayingSelected(); updateBackgroundDim(); updateWedgeVisibility(); }); @@ -379,7 +379,7 @@ namespace osu.Game.Screens.SelectV2 /// Ensures some music is playing for the current track. /// Will resume playback from a manual user pause if the track has changed. /// - private void ensurePlayingSelected(bool restart) + private void ensurePlayingSelected() { if (!ControlGlobalMusic) return; @@ -391,7 +391,10 @@ namespace osu.Game.Screens.SelectV2 if (!track.IsRunning && (music.UserPauseRequested != true || isNewTrack)) { Logger.Log($"Song select decided to {nameof(ensurePlayingSelected)}"); - music.Play(restart); + + // Only restart playback if a new track. + // This is important so that when exiting gameplay, the track is not restarted back to the preview point. + music.Play(isNewTrack); } lastTrack.SetTarget(track); @@ -634,7 +637,7 @@ namespace osu.Game.Screens.SelectV2 ensureGlobalBeatmapValid(); - ensurePlayingSelected(false); + ensurePlayingSelected(); updateBackgroundDim(); }