From 8567f80de4da60521d30d63ec54bef1de21652ce Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 3 Jul 2018 18:34:42 +0900 Subject: [PATCH] Add "Select" action Allows progressing forwards in the interface --- .../Containers/OsuFocusedOverlayContainer.cs | 2 +- .../Input/Bindings/GlobalActionContainer.cs | 6 +++-- osu.Game/Overlays/Dialog/PopupDialog.cs | 19 ++++++++++----- osu.Game/Screens/Menu/ButtonSystem.cs | 18 +++------------ osu.Game/Screens/OsuScreen.cs | 2 +- osu.Game/Screens/Select/SongSelect.cs | 23 +++++++++++++++---- 6 files changed, 40 insertions(+), 30 deletions(-) diff --git a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs index 39369350ef..d6bc4a2095 100644 --- a/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs +++ b/osu.Game/Graphics/Containers/OsuFocusedOverlayContainer.cs @@ -67,7 +67,7 @@ namespace osu.Game.Graphics.Containers return base.OnClick(state); } - public bool OnPressed(GlobalAction action) + public virtual bool OnPressed(GlobalAction action) { if (action == GlobalAction.Back) { diff --git a/osu.Game/Input/Bindings/GlobalActionContainer.cs b/osu.Game/Input/Bindings/GlobalActionContainer.cs index 0ef86f06ac..b21deff509 100644 --- a/osu.Game/Input/Bindings/GlobalActionContainer.cs +++ b/osu.Game/Input/Bindings/GlobalActionContainer.cs @@ -39,8 +39,10 @@ namespace osu.Game.Input.Bindings new KeyBinding(InputKey.F4, GlobalAction.ToggleMute), new KeyBinding(InputKey.Escape, GlobalAction.Back), - new KeyBinding(InputKey.MouseButton1, GlobalAction.Back) - new KeyBinding(InputKey.Space, GlobalAction.Back), + new KeyBinding(InputKey.MouseButton1, GlobalAction.Back), + + new KeyBinding(InputKey.Space, GlobalAction.Select), + new KeyBinding(InputKey.Enter, GlobalAction.Select), }; public IEnumerable InGameKeyBindings => new[] diff --git a/osu.Game/Overlays/Dialog/PopupDialog.cs b/osu.Game/Overlays/Dialog/PopupDialog.cs index d90a850f4a..636cffac89 100644 --- a/osu.Game/Overlays/Dialog/PopupDialog.cs +++ b/osu.Game/Overlays/Dialog/PopupDialog.cs @@ -13,6 +13,7 @@ using osu.Game.Graphics; using osu.Game.Graphics.Backgrounds; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; +using osu.Game.Input.Bindings; using OpenTK; using OpenTK.Graphics; using OpenTK.Input; @@ -192,16 +193,22 @@ namespace osu.Game.Overlays.Dialog }; } + public override bool OnPressed(GlobalAction action) + { + switch (action) + { + case GlobalAction.Select: + Buttons.OfType().FirstOrDefault()?.TriggerOnClick(); + return true; + } + + return base.OnPressed(action); + } + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { if (args.Repeat) return false; - if (args.Key == Key.Enter || args.Key == Key.KeypadEnter) - { - Buttons.OfType().FirstOrDefault()?.TriggerOnClick(); - return true; - } - // press button at number if 1-9 on number row or keypad are pressed var k = args.Key; if (k >= Key.Number1 && k <= Key.Number9) diff --git a/osu.Game/Screens/Menu/ButtonSystem.cs b/osu.Game/Screens/Menu/ButtonSystem.cs index 4f2437cf01..d76ff9e6c5 100644 --- a/osu.Game/Screens/Menu/ButtonSystem.cs +++ b/osu.Game/Screens/Menu/ButtonSystem.cs @@ -10,7 +10,6 @@ using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Input; using osu.Framework.Input.Bindings; using osu.Framework.Logging; using osu.Framework.Threading; @@ -113,26 +112,15 @@ namespace osu.Game.Screens.Menu sampleBack = audio.Sample.Get(@"Menu/button-back-select"); } - protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) - { - if (args.Repeat) return false; - - switch (args.Key) - { - case Key.Space: - logo?.TriggerOnClick(state); - return true; - } - - return false; - } - public bool OnPressed(GlobalAction action) { switch (action) { case GlobalAction.Back: return goBack(); + case GlobalAction.Select: + logo?.TriggerOnClick(); + return true; default: return false; } diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs index 2a7daff3d0..4b893f0118 100644 --- a/osu.Game/Screens/OsuScreen.cs +++ b/osu.Game/Screens/OsuScreen.cs @@ -101,7 +101,7 @@ namespace osu.Game.Screens sampleExit = audio.Sample.Get(@"UI/screen-back"); } - public bool OnPressed(GlobalAction action) + public virtual bool OnPressed(GlobalAction action) { if (!IsCurrentScreen) return false; diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 94c16f1797..9c62f92311 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -17,6 +17,7 @@ using osu.Framework.Threading; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Containers; +using osu.Game.Input.Bindings; using osu.Game.Overlays; using osu.Game.Rulesets; using osu.Game.Screens.Backgrounds; @@ -67,6 +68,7 @@ namespace osu.Game.Screens.Select protected new readonly Bindable Ruleset = new Bindable(); private DependencyContainer dependencies; + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) => dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); @@ -464,7 +466,8 @@ namespace osu.Game.Screens.Select private void carouselBeatmapsLoaded() { - if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false && Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false)) + if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false + && Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false)) return; if (Carousel.SelectedBeatmapSet == null && !Carousel.SelectNextRandom()) @@ -481,16 +484,26 @@ namespace osu.Game.Screens.Select dialogOverlay?.Push(new BeatmapDeleteDialog(beatmap)); } + public override bool OnPressed(GlobalAction action) + { + if (!IsCurrentScreen) return false; + + switch (action) + { + case GlobalAction.Select: + FinaliseSelection(); + return true; + } + + return base.OnPressed(action); + } + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { if (args.Repeat) return false; switch (args.Key) { - case Key.KeypadEnter: - case Key.Enter: - FinaliseSelection(); - return true; case Key.Delete: if (state.Keyboard.ShiftPressed) {