diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index 78ccd9a66a..669bcd600c 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -36,6 +36,7 @@ namespace osu.Game.Screens.Play public int Retries { set { pauseOverlay.Retries = value; } } public bool CanPause => (CheckCanPause?.Invoke() ?? true) && Time.Current >= lastPauseActionTime + pause_cooldown; + public bool IsResuming { get; private set; } public Action OnRetry; public Action OnQuit; @@ -54,7 +55,11 @@ namespace osu.Game.Screens.Play AddInternal(pauseOverlay = new PauseOverlay { - OnResume = () => Schedule(Resume), + OnResume = () => + { + IsResuming = true; + this.Delay(400).Schedule(Resume); + }, OnRetry = () => OnRetry(), OnQuit = () => OnQuit(), }); @@ -100,6 +105,7 @@ namespace osu.Game.Screens.Play pauseOverlay.Hide(); AudioClock.Start(); + IsResuming = false; } private OsuGameBase game; diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 72864482d5..7028574997 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -351,7 +351,7 @@ namespace osu.Game.Screens.Play protected override bool OnExiting(Screen next) { - if (!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) + if ((!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) && (!pauseContainer?.IsResuming ?? false)) { // In the case of replays, we may have changed the playback rate. applyRateFromMods();