From 9a4247f67ee6dc01e48434488643b148a63eb6e9 Mon Sep 17 00:00:00 2001 From: Huo Yaoyuan Date: Tue, 14 Mar 2017 16:58:34 +0800 Subject: [PATCH] Make Footer handles hotkey. --- osu.Game/Screens/Select/Footer.cs | 18 ++++++++++++-- osu.Game/Screens/Select/FooterButton.cs | 18 +++++++++++--- osu.Game/Screens/Select/SongSelect.cs | 31 +++++-------------------- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/osu.Game/Screens/Select/Footer.cs b/osu.Game/Screens/Select/Footer.cs index 4af72cecd9..b93575ada9 100644 --- a/osu.Game/Screens/Select/Footer.cs +++ b/osu.Game/Screens/Select/Footer.cs @@ -4,11 +4,13 @@ using System; using OpenTK; using OpenTK.Graphics; +using OpenTK.Input; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Transforms; +using osu.Framework.Input; using osu.Game.Graphics.UserInterface; using osu.Game.Screens.Menu; @@ -34,7 +36,7 @@ namespace osu.Game.Screens.Select public OsuLogo StartButton; - public void AddButton(string text, Color4 colour, Action action) + public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null) { var button = new FooterButton { @@ -43,6 +45,7 @@ namespace osu.Game.Screens.Select Width = play_song_select_button_width, SelectedColour = colour, DeselectedColour = colour.Opacity(0.5f), + Hotkey = hotkey, }; button.Hovered = () => updateModeLight(button); @@ -89,7 +92,7 @@ namespace osu.Game.Screens.Select { Anchor = Anchor.BottomLeft, Origin = Anchor.BottomLeft, - Action = () => OnBack?.Invoke(), + Action = () => OnBack?.Invoke() }, new FillFlowContainer { @@ -114,5 +117,16 @@ namespace osu.Game.Screens.Select updateModeLight(); } + + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) + { + if (!args.Repeat && args.Key == Key.Enter) + { + OnStart?.Invoke(); + return true; + } + + return base.OnKeyDown(state, args); + } } } diff --git a/osu.Game/Screens/Select/FooterButton.cs b/osu.Game/Screens/Select/FooterButton.cs index daa09f03a3..2e245d205f 100644 --- a/osu.Game/Screens/Select/FooterButton.cs +++ b/osu.Game/Screens/Select/FooterButton.cs @@ -1,14 +1,15 @@ // Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using OpenTK; using OpenTK.Graphics; +using OpenTK.Input; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; -using osu.Framework.Input; -using System; using osu.Framework.Graphics.Transforms; +using osu.Framework.Input; using osu.Game.Graphics.Sprites; namespace osu.Game.Screens.Select @@ -34,7 +35,7 @@ namespace osu.Game.Screens.Select set { deselectedColour = value; - if(light.Colour != SelectedColour) + if (light.Colour != SelectedColour) light.Colour = value; } } @@ -83,6 +84,7 @@ namespace osu.Game.Screens.Select public Action Hovered; public Action HoverLost; + public Key? Hotkey; protected override bool OnHover(InputState state) { @@ -119,5 +121,15 @@ namespace osu.Game.Screens.Select return base.OnClick(state); } + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) + { + if (!args.Repeat && args.Key == Hotkey) + { + OnClick(state); + return true; + } + + return base.OnKeyDown(state, args); + } } } diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index d289004753..6bddebbdb2 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -164,9 +164,9 @@ namespace osu.Game.Screens.Select }, }; - footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility); - footer.AddButton(@"random", colours.Green, carousel.SelectRandom); - footer.AddButton(@"options", colours.Blue, beatmapOptions.ToggleVisibility); + footer.AddButton(@"mods", colours.Yellow, modSelect.ToggleVisibility, Key.F1); + footer.AddButton(@"random", colours.Green, carousel.SelectRandom, Key.F2); + footer.AddButton(@"options", colours.Blue, beatmapOptions.ToggleVisibility, Key.F3); if (osu != null) playMode.BindTo(osu.PlayMode); @@ -435,29 +435,10 @@ namespace osu.Game.Screens.Select protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { - if (args.Repeat) return false; - - switch (args.Key) + if (!args.Repeat && args.Key == Key.Delete && state.Keyboard.ShiftPressed) { - case Key.F1: - modSelect.ToggleVisibility(); - return true; - case Key.F2: - carousel.SelectRandom(); - return true; - case Key.F3: - beatmapOptions.ToggleVisibility(); - return true; - case Key.Enter: - footer.StartButton.TriggerClick(); - return true; - case Key.Delete: - if (state.Keyboard.ShiftPressed) - { - promptDelete(); - return true; - } - break; + promptDelete(); + return true; } return base.OnKeyDown(state, args);