protected override void LogoArriving(OsuLogo logo, bool resuming) { base.LogoArriving(logo, resuming); buttons.SetOsuLogo(logo); logo.FadeColour(Color4.White, 100, Easing.OutQuint); logo.FadeIn(100, Easing.OutQuint); if (resuming) { buttons.State = ButtonSystemState.TopLevel; const float length = 300; this.FadeIn(length, Easing.OutQuint); this.MoveTo(new Vector2(0, 0), length, Easing.OutQuint); sideFlashes.Delay(length).FadeIn(64, Easing.InQuint); } }
protected override void LogoArriving(OsuLogo logo, bool resuming) { base.LogoArriving(logo, resuming); buttons.SetOsuLogo(logo); logo.FadeColour(Color4.White, 100, Easing.OutQuint); logo.FadeIn(100, Easing.OutQuint); if (resuming) { buttons.State = ButtonSystemState.TopLevel; this.FadeIn(FADE_IN_DURATION, Easing.OutQuint); buttonsContainer.MoveTo(new Vector2(0, 0), FADE_IN_DURATION, Easing.OutQuint); sideFlashes.Delay(FADE_IN_DURATION).FadeIn(64, Easing.InQuint); } else if (!api.IsLoggedIn) { // copy out old action to avoid accidentally capturing logo.Action in closure, causing a self-reference loop. var previousAction = logo.Action; // we want to hook into logo.Action to display the login overlay, but also preserve the return value of the old action. // therefore pass the old action to displayLogin, so that it can return that value. // this ensures that the OsuLogo sample does not play when it is not desired. logo.Action = () => displayLogin(previousAction); } bool displayLogin(Func <bool> originalAction) { if (!loginDisplayed.Value) { Scheduler.AddDelayed(() => login?.Show(), 500); loginDisplayed.Value = true; } return(originalAction.Invoke()); } }