diff --git a/osu.Game/Graphics/UserInterface/BackButton.cs b/osu.Game/Graphics/UserInterface/BackButton.cs index 2f0f78b7a6..bd7ccfdb97 100644 --- a/osu.Game/Graphics/UserInterface/BackButton.cs +++ b/osu.Game/Graphics/UserInterface/BackButton.cs @@ -19,13 +19,10 @@ namespace osu.Game.Graphics.UserInterface { private TextAwesome icon; - private Container leftContainer; - private Container rightContainer; - private Box leftBox; private Box rightBox; - private const double transform_time = 300.0; + private const double transform_time = 600; private const int pulse_length = 250; private const float shear = 0.1f; @@ -40,7 +37,7 @@ namespace osu.Game.Graphics.UserInterface Children = new Drawable[] { - leftContainer = new Container + new Container { RelativeSizeAxes = Axes.Both, Width = 0.4f, @@ -60,7 +57,7 @@ namespace osu.Game.Graphics.UserInterface }, } }, - rightContainer = new Container + new Container { Origin = Anchor.TopRight, Anchor = Anchor.TopRight, @@ -88,10 +85,7 @@ namespace osu.Game.Graphics.UserInterface }; } - public override bool Contains(Vector2 screenSpacePos) - { - return leftBox.Contains(screenSpacePos) || rightBox.Contains(screenSpacePos); - } + public override bool Contains(Vector2 screenSpacePos) => leftBox.Contains(screenSpacePos) || rightBox.Contains(screenSpacePos); protected override bool OnHover(InputState state) { diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index c6e07c3a79..a4ca4c5817 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -20,6 +20,7 @@ using osu.Game.Graphics.UserInterface.Volume; using osu.Game.Database; using osu.Framework.Allocation; using osu.Framework.Graphics.Transformations; +using osu.Framework.Timing; using osu.Game.Modes; using osu.Game.Overlays.Toolbar; using osu.Game.Screens; @@ -154,11 +155,19 @@ namespace osu.Game private bool globalHotkeyPressed(InputState state, KeyDownEventArgs args) { + if (args.Repeat) return false; + switch (args.Key) { case Key.F8: chat.ToggleVisibility(); return true; + case Key.PageUp: + case Key.PageDown: + var rate = ((Clock as ThrottledFrameClock).Source as StopwatchClock).Rate * (args.Key == Key.PageUp ? 1.1f : 0.9f); + ((Clock as ThrottledFrameClock).Source as StopwatchClock).Rate = rate; + Logger.Log($@"Adjusting game clock to {rate}", LoggingTarget.Debug); + return true; } if (state.Keyboard.ControlPressed) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 86db7f5e5f..6e15d458c1 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -155,7 +155,6 @@ namespace osu.Game.Screens.Menu private void onExit() { - State = MenuState.Exit; OnExit?.Invoke(); } diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index ed7c0fa7e9..ca85546b10 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -25,6 +25,7 @@ namespace osu.Game.Screens.Menu MainMenu mainMenu; private AudioSample welcome; + private AudioSample seeya; private AudioTrack bgm; internal override bool ShowOverlays => (ParentGameMode as OsuGameMode)?.ShowOverlays ?? false; @@ -58,6 +59,7 @@ namespace osu.Game.Screens.Menu private void load(AudioManager audio) { welcome = audio.Sample.Get(@"welcome"); + seeya = audio.Sample.Get(@"seeya"); bgm = audio.Track.Get(@"circles"); bgm.Looping = true; @@ -106,8 +108,15 @@ namespace osu.Game.Screens.Menu protected override void OnResuming(GameMode last) { - //we are just an intro. if we are resumed, we just want to exit after a short delay (to allow the last mode to transition out). - Scheduler.AddDelayed(Exit, 600); + //we also handle the exit transition. + seeya.Play(); + + double fadeOutTime = (last.LifetimeEnd - Time.Current) + 100; + + Scheduler.AddDelayed(Exit, fadeOutTime); + + //don't want to fade out completely else we will stop running updates and shit will hit the fan. + Game.FadeTo(0.01f, fadeOutTime); base.OnResuming(last); } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index a6f8b51536..7b000ff7d5 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -1,6 +1,7 @@ //Copyright (c) 2007-2016 ppy Pty Ltd . //Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Framework.Allocation; using osu.Framework.GameModes; using osu.Framework.GameModes.Testing; @@ -49,7 +50,7 @@ namespace osu.Game.Screens.Menu OnSolo = delegate { Push(new PlaySongSelect()); }, OnMulti = delegate { Push(new Lobby()); }, OnTest = delegate { Push(new TestBrowser()); }, - OnExit = delegate { Scheduler.AddDelayed(Exit, ButtonSystem.EXIT_DELAY); }, + OnExit = delegate { Exit(); }, } } } @@ -93,5 +94,12 @@ namespace osu.Game.Screens.Menu Content.FadeIn(length, EasingTypes.OutQuint); Content.MoveTo(new Vector2(0, 0), length, EasingTypes.OutQuint); } + + protected override bool OnExiting(GameMode next) + { + buttons.State = MenuState.Exit; + Content.FadeOut(ButtonSystem.EXIT_DELAY); + return base.OnExiting(next); + } } }