From 3fc8ac0ec72f51c47dab588acbea8679f66b90bd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 7 Jun 2022 18:27:42 +0900 Subject: [PATCH] Add key bindings everywhere --- osu.Game/Graphics/UserInterface/OsuButton.cs | 2 +- osu.Game/Screens/LatencyComparerScreen.cs | 56 +++++++++++++------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/OsuButton.cs b/osu.Game/Graphics/UserInterface/OsuButton.cs index 08514d94c3..044df13152 100644 --- a/osu.Game/Graphics/UserInterface/OsuButton.cs +++ b/osu.Game/Graphics/UserInterface/OsuButton.cs @@ -20,7 +20,7 @@ namespace osu.Game.Graphics.UserInterface /// public class OsuButton : Button { - public LocalisableString Text + public virtual LocalisableString Text { get => SpriteText?.Text ?? default; set diff --git a/osu.Game/Screens/LatencyComparerScreen.cs b/osu.Game/Screens/LatencyComparerScreen.cs index 689729fa68..b61905a1e7 100644 --- a/osu.Game/Screens/LatencyComparerScreen.cs +++ b/osu.Game/Screens/LatencyComparerScreen.cs @@ -14,8 +14,10 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; using osu.Framework.Input.Events; +using osu.Framework.Localisation; using osu.Framework.Screens; using osu.Framework.Utils; +using osu.Game.Extensions; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Overlays; @@ -170,13 +172,13 @@ Do whatever you need to try and perceive the difference in latency, then choose int betterSide = RNG.Next(0, 2); - mainArea.Add(new LatencyArea(betterSide == 1 ? induced_latency / difficulty : 0) + mainArea.Add(new LatencyArea(Key.Number1, betterSide == 1 ? induced_latency / difficulty : 0) { Width = 0.5f, ReportBetter = () => recordResult(betterSide == 0) }); - mainArea.Add(new LatencyArea(betterSide == 0 ? induced_latency / difficulty : 0) + mainArea.Add(new LatencyArea(Key.Number2, betterSide == 0 ? induced_latency / difficulty : 0) { Width = 0.5f, Anchor = Anchor.TopRight, @@ -198,7 +200,7 @@ Do whatever you need to try and perceive the difference in latency, then choose Spacing = new Vector2(20), Children = new Drawable[] { - new Button + new Button(Key.R) { Text = "Increase confidence at current level", Anchor = Anchor.Centre, @@ -210,32 +212,22 @@ Do whatever you need to try and perceive the difference in latency, then choose loadNextRound(); } }, - new Button + new Button(Key.I) { Text = "Increase difficulty", BackgroundColour = colours.Red2, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Action = () => - { - changeDifficulty(difficulty + 1); - } + Action = () => changeDifficulty(difficulty + 1) }, - new Button + new Button(Key.D) { Text = "Decrease difficulty", BackgroundColour = colours.Green, Anchor = Anchor.Centre, Origin = Anchor.Centre, + Action = () => changeDifficulty(difficulty - 1), Enabled = { Value = difficulty > 1 }, - Action = () => - { - resultsArea.Clear(); - correctCount = 0; - targetRoundCount = rounds_to_complete; - difficulty--; - loadNextRound(); - } } } }); @@ -264,12 +256,14 @@ Do whatever you need to try and perceive the difference in latency, then choose private Drawable? background; + private readonly Key key; private readonly int inducedLatency; private long frameCount; - public LatencyArea(int inducedLatency) + public LatencyArea(Key key, int inducedLatency) { + this.key = key; this.inducedLatency = inducedLatency; RelativeSizeAxes = Axes.Both; @@ -302,7 +296,7 @@ Do whatever you need to try and perceive the difference in latency, then choose }, } }, - new Button + new Button(key) { Text = "Feels better", Y = 20, @@ -459,6 +453,30 @@ Do whatever you need to try and perceive the difference in latency, then choose public class Button : SettingsButton { + private readonly Key key; + + public Button(Key key) + { + this.key = key; + } + + public override LocalisableString Text + { + get => base.Text; + set => base.Text = $"{value} (Press {key.ToString().Replace("Number", string.Empty)})"; + } + + protected override bool OnKeyDown(KeyDownEvent e) + { + if (!e.Repeat && e.Key == key) + { + TriggerClick(); + return true; + } + + return base.OnKeyDown(e); + } + [Resolved] private OverlayColourProvider overlayColourProvider { get; set; } = null!;