1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-14 19:22:56 +08:00

Ensure player is consumed at the point of scheduled push running the first time

This commit is contained in:
Dean Herbert 2020-12-10 16:32:14 +09:00
parent a5e2509d52
commit cc996ec7fc

View File

@ -274,6 +274,13 @@ namespace osu.Game.Screens.Play
} }
} }
private Player consumePlayer()
{
var consumed = player;
player = null;
return consumed;
}
private void prepareNewPlayer() private void prepareNewPlayer()
{ {
if (!this.IsCurrentScreen()) if (!this.IsCurrentScreen())
@ -331,6 +338,8 @@ namespace osu.Game.Screens.Play
scheduledPushPlayer = Scheduler.AddDelayed(() => scheduledPushPlayer = Scheduler.AddDelayed(() =>
{ {
contentOut(); contentOut();
// 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();
TransformSequence<PlayerLoader> pushSequence = this.Delay(250); TransformSequence<PlayerLoader> pushSequence = this.Delay(250);
@ -362,8 +371,6 @@ namespace osu.Game.Screens.Play
// Note that this may change if the player we load requested a re-run. // Note that this may change if the player we load requested a re-run.
ValidForResume = false; ValidForResume = false;
if (player.LoadedBeatmapSuccessfully)
this.Push(player);
else else
this.Exit(); this.Exit();
}); });
@ -373,6 +380,8 @@ namespace osu.Game.Screens.Play
{ {
Schedule(pushWhenLoaded); Schedule(pushWhenLoaded);
} }
if (consumedPlayer.LoadedBeatmapSuccessfully)
this.Push(consumedPlayer);
} }
private void cancelLoad() private void cancelLoad()