Fix logo not always returning to the correct state when rapidly changing menus

Fixes #1005 for real
This commit is contained in:
Dean Herbert
2017-11-18 11:19:15 +09:00
parent 322dd1bd05
commit c2d1de34fc

View File

@ -17,6 +17,7 @@ using OpenTK.Graphics;
using OpenTK.Input; using OpenTK.Input;
using osu.Framework.Audio.Sample; using osu.Framework.Audio.Sample;
using osu.Framework.Audio; using osu.Framework.Audio;
using osu.Framework.Threading;
namespace osu.Game.Screens.Menu namespace osu.Game.Screens.Menu
{ {
@ -281,16 +282,21 @@ namespace osu.Game.Screens.Menu
} }
} }
private ScheduledDelegate logoDelayedAction;
private void updateLogoState(MenuState lastState = MenuState.Initial) private void updateLogoState(MenuState lastState = MenuState.Initial)
{ {
if (logo == null) return;
logoDelayedAction?.Cancel();
switch (state) switch (state)
{ {
case MenuState.Exit: case MenuState.Exit:
case MenuState.Initial: case MenuState.Initial:
logoTracking = false; logoTracking = false;
logo?.Delay(150) logoDelayedAction = Scheduler.AddDelayed(() =>
.Schedule(() =>
{ {
toolbar?.Hide(); toolbar?.Hide();
@ -299,7 +305,7 @@ namespace osu.Game.Screens.Menu
logo.MoveTo(new Vector2(0.5f), 800, Easing.OutExpo); logo.MoveTo(new Vector2(0.5f), 800, Easing.OutExpo);
logo.ScaleTo(1, 800, Easing.OutExpo); logo.ScaleTo(1, 800, Easing.OutExpo);
}); }, 150);
break; break;
case MenuState.TopLevel: case MenuState.TopLevel:
@ -307,26 +313,24 @@ namespace osu.Game.Screens.Menu
logo.ClearTransforms(targetMember: nameof(Position)); logo.ClearTransforms(targetMember: nameof(Position));
logo.RelativePositionAxes = Axes.None; logo.RelativePositionAxes = Axes.None;
logoTracking = true;
switch (lastState) switch (lastState)
{ {
case MenuState.Initial: case MenuState.Initial:
logoTracking = false;
logo.ScaleTo(0.5f, 200, Easing.In); logo.ScaleTo(0.5f, 200, Easing.In);
logoTracking = false; logo.MoveTo(logoTrackingPosition, lastState == MenuState.EnteringMode ? 0 : 200, Easing.In);
logo logoDelayedAction = Scheduler.AddDelayed(() =>
.MoveTo(logoTrackingPosition, lastState == MenuState.EnteringMode ? 0 : 200, Easing.In)
.OnComplete(o =>
{ {
logoTracking = true; logoTracking = true;
o.Impact(); logo.Impact();
toolbar?.Show(); toolbar?.Show();
}); }, 200);
break; break;
default: default:
logoTracking = true;
logo.ScaleTo(0.5f, 200, Easing.OutQuint); logo.ScaleTo(0.5f, 200, Easing.OutQuint);
break; break;
} }