private void updateLogoState(ButtonSystemState lastState = ButtonSystemState.Initial) { if (logo == null) { return; } switch (state) { case ButtonSystemState.Exit: case ButtonSystemState.Initial: logoDelayedAction?.Cancel(); logoDelayedAction = Scheduler.AddDelayed(() => { logoTracking = false; game?.Toolbar.Hide(); logo.ClearTransforms(targetMember: nameof(Position)); logo.RelativePositionAxes = Axes.Both; logo.MoveTo(new Vector2(0.5f), 800, Easing.OutExpo); logo.ScaleTo(1, 800, Easing.OutExpo); }, buttonArea.Alpha * 150); break; case ButtonSystemState.TopLevel: case ButtonSystemState.Play: switch (lastState) { case ButtonSystemState.TopLevel: // coming from toplevel to play break; case ButtonSystemState.Initial: logo.ClearTransforms(targetMember: nameof(Position)); logo.RelativePositionAxes = Axes.None; bool impact = logo.Scale.X > 0.6f; if (lastState == ButtonSystemState.Initial) { logo.ScaleTo(0.5f, 200, Easing.In); } logo.MoveTo(logoTrackingPosition, lastState == ButtonSystemState.EnteringMode ? 0 : 200, Easing.In); logoDelayedAction?.Cancel(); logoDelayedAction = Scheduler.AddDelayed(() => { logoTracking = true; if (impact) { logo.Impact(); } game?.Toolbar.Show(); }, 200); break; default: logo.ClearTransforms(targetMember: nameof(Position)); logo.RelativePositionAxes = Axes.None; logoTracking = true; logo.ScaleTo(0.5f, 200, Easing.OutQuint); break; } break; case ButtonSystemState.EnteringMode: logoTracking = true; break; } }
private void updateLogoState(MenuState lastState = MenuState.Initial) { if (logo == null) { return; } logoDelayedAction?.Cancel(); switch (state) { case MenuState.Exit: case MenuState.Initial: logoTracking = false; logoDelayedAction = Scheduler.AddDelayed(() => { showOverlays.Value = false; logo.ClearTransforms(targetMember: nameof(Position)); logo.RelativePositionAxes = Axes.Both; logo.MoveTo(new Vector2(0.5f), 800, Easing.OutExpo); logo.ScaleTo(1, 800, Easing.OutExpo); }, 150); break; case MenuState.TopLevel: case MenuState.Play: logo.ClearTransforms(targetMember: nameof(Position)); logo.RelativePositionAxes = Axes.None; switch (lastState) { case MenuState.TopLevel: // coming from toplevel to play case MenuState.Initial: logoTracking = false; logo.ScaleTo(0.5f, 200, Easing.In); logo.MoveTo(logoTrackingPosition, lastState == MenuState.EnteringMode ? 0 : 200, Easing.In); logoDelayedAction = Scheduler.AddDelayed(() => { logoTracking = true; logo.Impact(); showOverlays.Value = true; }, 200); break; default: logoTracking = true; logo.ScaleTo(0.5f, 200, Easing.OutQuint); break; } break; case MenuState.EnteringMode: logoTracking = true; break; } }