From e2f680a65f40c39b1a24f61f66ba9f59291583c0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 20:29:26 +0900 Subject: [PATCH 1/6] Change main menu buttons to be activate OnClick. --- osu.Game/Screens/Menu/Button.cs | 32 +++++++++++++++++++++++---- osu.Game/Screens/Menu/ButtonSystem.cs | 4 ++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs index 15fce73a3b..e61dae6277 100644 --- a/osu.Game/Screens/Menu/Button.cs +++ b/osu.Game/Screens/Menu/Button.cs @@ -27,6 +27,8 @@ namespace osu.Game.Screens.Menu { private Container iconText; private Container box; + private Box boxColourLayer; + private Box boxHoverLayer; private Color4 colour; private TextAwesome icon; private string internalName; @@ -72,16 +74,24 @@ namespace osu.Game.Screens.Menu }, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Colour = colour, Scale = new Vector2(0, 1), Size = boxSize, Shear = new Vector2(ButtonSystem.WEDGE_WIDTH / boxSize.Y, 0), - Children = new Drawable[] + Children = new [] { - new Box + boxColourLayer = new Box { EdgeSmoothness = new Vector2(1.5f, 0), RelativeSizeAxes = Axes.Both, + Colour = colour, + }, + boxHoverLayer = new Box + { + EdgeSmoothness = new Vector2(1.5f, 0), + RelativeSizeAxes = Axes.Both, + BlendingMode = BlendingMode.Additive, + Colour = Color4.White, + Alpha = 0, }, } }, @@ -228,6 +238,18 @@ namespace osu.Game.Screens.Menu } protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + boxHoverLayer.FadeTo(0.1f, 1000, EasingTypes.OutQuint); + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + boxHoverLayer.FadeTo(0, 1000, EasingTypes.OutQuint); + return base.OnMouseUp(state, args); + } + + protected override bool OnClick(InputState state) { trigger(); return true; @@ -250,7 +272,9 @@ namespace osu.Game.Screens.Menu { sampleClick.Play(); - box.FlashColour(Color4.White, 500, EasingTypes.OutExpo); + boxHoverLayer.ClearTransformations(); + boxHoverLayer.Alpha = 0.9f; + boxHoverLayer.FadeOut(800, EasingTypes.OutExpo); clickAction?.Invoke(); } diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index a2c6f60bb4..c6d515f303 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -172,10 +172,10 @@ namespace osu.Game.Screens.Menu State = MenuState.TopLevel; return; case MenuState.TopLevel: - buttonsTopLevel.First().TriggerMouseDown(); + buttonsTopLevel.First().TriggerClick(); return; case MenuState.Play: - buttonsPlay.First().TriggerMouseDown(); + buttonsPlay.First().TriggerClick(); return; } } From 24ba21363e0d7501c2bf0990387e86240e04be63 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 21:37:34 +0900 Subject: [PATCH 2/6] Make intro->mainmenu work better by delaying interactiveness of osu! logo. --- osu.Game/Screens/Menu/ButtonSystem.cs | 2 ++ osu.Game/Screens/Menu/MainMenu.cs | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index c6d515f303..15d64a0766 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -288,6 +288,8 @@ namespace osu.Game.Screens.Menu //if (OsuGame.IdleTime > 6000 && State != MenuState.Exit) // State = MenuState.Initial; + osuLogo.Interactive = Alpha >= 0.8f; + iconFacade.Width = osuLogo.SizeForFlow * 0.5f; base.Update(); } diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs index 258e20a8bd..9a715c17be 100644 --- a/osu.Game/Screens/Menu/MainMenu.cs +++ b/osu.Game/Screens/Menu/MainMenu.cs @@ -65,9 +65,10 @@ namespace osu.Game.Screens.Menu buttons.OnSettings = game.ToggleOptions; } - protected override void LoadComplete() + protected override void OnEntering(GameMode last) { - base.LoadComplete(); + + base.OnEntering(last); buttons.FadeInFromZero(500); } From 8a0887c3c3863a8decd4fb9baa13d69789efc25b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 21:45:59 +0900 Subject: [PATCH 3/6] Add sound effect to osu! logo clicking. --- osu.Game/Screens/Menu/OsuLogo.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs index 25f6f4055e..c18659b445 100644 --- a/osu.Game/Screens/Menu/OsuLogo.cs +++ b/osu.Game/Screens/Menu/OsuLogo.cs @@ -4,6 +4,8 @@ using System; using System.Diagnostics; using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; @@ -32,6 +34,8 @@ namespace osu.Game.Screens.Menu private Container logoHoverContainer; private MenuVisualisation vis; + private AudioSample sampleClick; + private Container colourAndTriangles; public Action Action; @@ -166,8 +170,9 @@ namespace osu.Game.Screens.Menu } [BackgroundDependencyLoader] - private void load(TextureStore textures) + private void load(TextureStore textures, AudioManager audio) { + sampleClick = audio.Sample.Get(@"Menu/menuhit"); logo.Texture = textures.Get(@"Menu/logo"); ripple.Texture = textures.Get(@"Menu/logo"); } @@ -200,6 +205,8 @@ namespace osu.Game.Screens.Menu { if (!Interactive) return false; + sampleClick.Play(); + flashLayer.ClearTransformations(); flashLayer.Alpha = 0.4f; flashLayer.FadeOut(1500, EasingTypes.OutExpo); From dc5e9dde56be8e113b916a71b28230099f851722 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 21:46:13 +0900 Subject: [PATCH 4/6] Fix escape key nonsense. --- osu.Game/Screens/Menu/Button.cs | 2 +- osu.Game/Screens/Menu/ButtonSystem.cs | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs index e61dae6277..a2e088adf7 100644 --- a/osu.Game/Screens/Menu/Button.cs +++ b/osu.Game/Screens/Menu/Button.cs @@ -257,7 +257,7 @@ namespace osu.Game.Screens.Menu protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { - base.OnKeyDown(state, args); + if (args.Repeat) return false; if (triggerKey == args.Key && triggerKey != Key.Unknown) { diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 15d64a0766..00e2b27f07 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -132,6 +132,8 @@ namespace osu.Game.Screens.Menu protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { + if (args.Repeat) return false; + switch (args.Key) { case Key.Space: @@ -288,7 +290,7 @@ namespace osu.Game.Screens.Menu //if (OsuGame.IdleTime > 6000 && State != MenuState.Exit) // State = MenuState.Initial; - osuLogo.Interactive = Alpha >= 0.8f; + osuLogo.Interactive = Alpha > 0.2f; iconFacade.Width = osuLogo.SizeForFlow * 0.5f; base.Update(); From d06f0cf8704c47e7e2010077e4433b820a788778 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 21:53:40 +0900 Subject: [PATCH 5/6] Fix escape not always handling back action correctly at main menu (back button not yet visible). --- osu.Game/Screens/Menu/ButtonSystem.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 00e2b27f07..0449128a94 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -85,7 +85,7 @@ namespace osu.Game.Screens.Menu Children = new[] { settingsButton = new Button(@"settings", @"options", FontAwesome.fa_gear, new Color4(85, 85, 85, 255), () => OnSettings?.Invoke(), -WEDGE_WIDTH, Key.O), - backButton = new Button(@"back", @"back", FontAwesome.fa_osu_left_o, new Color4(51, 58, 94, 255), onBack, -WEDGE_WIDTH, Key.Escape), + backButton = new Button(@"back", @"back", FontAwesome.fa_osu_left_o, new Color4(51, 58, 94, 255), onBack, -WEDGE_WIDTH), iconFacade = new Container //need a container to make the osu! icon flow properly. { Size = new Vector2(0, BUTTON_AREA_HEIGHT) @@ -140,11 +140,18 @@ namespace osu.Game.Screens.Menu osuLogo.TriggerClick(state); return true; case Key.Escape: - if (State == MenuState.Initial) - return false; + switch (State) + { + case MenuState.TopLevel: + State = MenuState.Initial; + return true; + case MenuState.Play: + State = MenuState.TopLevel; + return true; + } - State = MenuState.Initial; - return true; + + return false; } return false; From 34a030e3bedfb95539d557166a6ff0d59f9f83de Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Feb 2017 22:19:36 +0900 Subject: [PATCH 6/6] Fix race conditions causing menu transitions to look wrong when executed in very fast succession. --- osu.Game/Screens/Menu/Button.cs | 4 ++-- osu.Game/Screens/Menu/ButtonSystem.cs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Menu/Button.cs b/osu.Game/Screens/Menu/Button.cs index a2e088adf7..7e1db73205 100644 --- a/osu.Game/Screens/Menu/Button.cs +++ b/osu.Game/Screens/Menu/Button.cs @@ -272,11 +272,11 @@ namespace osu.Game.Screens.Menu { sampleClick.Play(); + clickAction?.Invoke(); + boxHoverLayer.ClearTransformations(); boxHoverLayer.Alpha = 0.9f; boxHoverLayer.FadeOut(800, EasingTypes.OutExpo); - - clickAction?.Invoke(); } public override bool HandleInput => state != ButtonState.Exploded && box.Scale.X >= 0.8f; diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 0449128a94..67802ab2f3 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -146,7 +146,7 @@ namespace osu.Game.Screens.Menu State = MenuState.Initial; return true; case MenuState.Play: - State = MenuState.TopLevel; + backButton.TriggerClick(); return true; } @@ -216,7 +216,7 @@ namespace osu.Game.Screens.Menu { case MenuState.Initial: buttonAreaBackground.ScaleTo(Vector2.One, 500, EasingTypes.Out); - buttonArea.FadeOut(500); + buttonArea.FadeOut(300); osuLogo.Delay(150); osuLogo.MoveTo(Vector2.Zero, 800, EasingTypes.OutExpo); @@ -229,6 +229,8 @@ namespace osu.Game.Screens.Menu b.State = ButtonState.Contracted; break; case MenuState.TopLevel: + buttonArea.Flush(true); + buttonAreaBackground.ScaleTo(Vector2.One, 200, EasingTypes.Out); osuLogo.MoveTo(buttonFlow.DrawPosition, 200, EasingTypes.In);