Use cleaner solution via cancellation of older schedule

This commit is contained in:
Dean Herbert 2019-12-26 19:05:32 +09:00
parent 8903f286ef
commit a041f32072
1 changed files with 16 additions and 20 deletions

View File

@ -350,18 +350,7 @@ private void onCompletion()
if (!showResults) return;
using (BeginDelayedSequence(1000))
{
completionProgressDelegate = Schedule(delegate
{
if (!this.IsCurrentScreen()) return;
var score = CreateScore();
if (DrawableRuleset.ReplayScore == null)
scoreManager.Import(score).Wait();
this.Push(CreateResults(score));
});
}
scheduleGotoRanking();
}
protected virtual ScoreInfo CreateScore()
@ -541,14 +530,8 @@ public override bool OnExiting(IScreen next)
{
if (completionProgressDelegate != null && !completionProgressDelegate.Cancelled && !completionProgressDelegate.Completed)
{
// Proceed to result screen if beatmap already finished playing.
// This is scheduled since the player needs to become the current screen before the delegate runs. This happens after the return true.
Scheduler.Add(() =>
{
if (!completionProgressDelegate.Completed && !completionProgressDelegate.Cancelled)
completionProgressDelegate.RunTask();
});
// proceed to result screen if beatmap already finished playing
scheduleGotoRanking();
return true;
}
@ -583,6 +566,19 @@ private void fadeOut(bool instant = false)
storyboardReplacesBackground.Value = false;
}
private void scheduleGotoRanking()
{
completionProgressDelegate?.Cancel();
completionProgressDelegate = Schedule(delegate
{
var score = CreateScore();
if (DrawableRuleset.ReplayScore == null)
scoreManager.Import(score).Wait();
this.Push(CreateResults(score));
});
}
#endregion
}
}