From edd71c0560607df2a8536399a6e80960e9a6e85c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 18 Apr 2017 16:56:01 +0900 Subject: [PATCH] Tidy up and comment PlayerLoader logic. --- osu.Game/Screens/Play/Player.cs | 4 ++-- osu.Game/Screens/Play/PlayerLoader.cs | 29 +++++++++++++-------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index d0f2e2be5a..f831387626 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -35,7 +35,7 @@ namespace osu.Game.Screens.Play public BeatmapInfo BeatmapInfo; - public Action OnRestart; + public Action RestartRequested; public bool IsPaused => !interpolatedSourceClock.IsRunning; @@ -249,7 +249,7 @@ namespace osu.Game.Screens.Play public void Restart() { ValidForResume = false; - OnRestart?.Invoke(); + RestartRequested?.Invoke(); Exit(); } diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 2f74cd854f..642826753c 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -31,11 +31,16 @@ namespace osu.Game.Screens.Play public PlayerLoader(Player player) { + this.player = player; + + //By default, we want to load the player and never be returned to. + //Note that this may change if the player we load requested a re-run. ValidForResume = false; - player.OnRestart = restart; - - this.player = player; + player.RestartRequested = () => { + showOverlays = false; + ValidForResume = true; + }; Children = new Drawable[] { @@ -45,7 +50,6 @@ namespace osu.Game.Screens.Play Interactive = false, }, }; - } [BackgroundDependencyLoader] @@ -64,13 +68,14 @@ namespace osu.Game.Screens.Play protected override void OnResuming(Screen last) { base.OnResuming(last); - if (last != player) return; - player = new Player + + //we will only be resumed if the player has requested a re-run (see ValidForResume setting above) + LoadComponentAsync(player = new Player { RestartCount = player.RestartCount + 1, - OnRestart = restart - }; - LoadComponentAsync(player, delegate + RestartRequested = player.RestartRequested, + Beatmap = player.Beatmap, + }, p => { if (!Push(player)) Exit(); @@ -78,12 +83,6 @@ namespace osu.Game.Screens.Play }); } - private void restart() - { - showOverlays = false; - ValidForResume = true; - } - protected override void OnEntering(Screen last) { base.OnEntering(last);