diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 2a66c3d5d3..622f9bd09a 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -57,6 +57,11 @@ namespace osu.Game.Screens.Play /// public event Action OnGameplayStarted; + /// + /// Raised after all gameplay has finished. + /// + public event Action OnShowingResults; + public override bool AllowBackButton => false; // handled by HoldForMenuButton protected override bool PlayExitSound => !isRestarting; @@ -820,6 +825,7 @@ namespace osu.Game.Screens.Play // This player instance may already be in the process of exiting. return; + OnShowingResults?.Invoke(); this.Push(CreateResults(prepareScoreForDisplayTask.GetResultSafely())); }, Time.Current + delay, 50); diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 7682bba9a6..ea43ddd525 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -529,7 +529,13 @@ namespace osu.Game.Screens.Play scheduledPushPlayer = Scheduler.AddDelayed(() => { // ensure that once we have reached this "point of no return", readyForPush will be false for all future checks (until a new player instance is prepared). - var consumedPlayer = consumePlayer(); + Player consumedPlayer = consumePlayer(); + + consumedPlayer.OnShowingResults += () => + { + highPerformanceSession?.Dispose(); + highPerformanceSession = null; + }; ContentOut();