From 66c307e0eecc4842adbdf9c52f0b56ae8bd1768b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 18 Nov 2021 12:38:20 +0900 Subject: [PATCH] Remove usage of key repeat helper method --- osu.Game/Extensions/DrawableExtensions.cs | 27 --------- .../Overlays/Volume/VolumeControlReceptor.cs | 9 --- .../UI/Scrolling/DrawableScrollingRuleset.cs | 11 +--- .../Lounge/Components/RoomsContainer.cs | 39 +------------ osu.Game/Screens/Play/ReplayPlayer.cs | 17 +----- osu.Game/Screens/Select/BeatmapCarousel.cs | 58 ++----------------- 6 files changed, 10 insertions(+), 151 deletions(-) diff --git a/osu.Game/Extensions/DrawableExtensions.cs b/osu.Game/Extensions/DrawableExtensions.cs index 03cc345947..005804789e 100644 --- a/osu.Game/Extensions/DrawableExtensions.cs +++ b/osu.Game/Extensions/DrawableExtensions.cs @@ -1,11 +1,8 @@ // Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using System; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Input.Bindings; -using osu.Framework.Threading; using osu.Game.Screens.Play.HUD; using osu.Game.Skinning; using osuTK; @@ -14,30 +11,6 @@ namespace osu.Game.Extensions { public static class DrawableExtensions { - public const double REPEAT_INTERVAL = 70; - public const double INITIAL_DELAY = 250; - - /// - /// Helper method that is used while doesn't support repetitions of . - /// Simulates repetitions by continually invoking a delegate according to the default key repeat rate. - /// - /// - /// The returned delegate can be cancelled to stop repeat events from firing (usually in ). - /// - /// The which is handling the repeat. - /// The to schedule repetitions on. - /// The to be invoked once immediately and with every repetition. - /// The delay imposed on the first repeat. Defaults to . - /// A which can be cancelled to stop the repeat events from firing. - public static ScheduledDelegate BeginKeyRepeat(this IKeyBindingHandler handler, Scheduler scheduler, Action action, double initialRepeatDelay = INITIAL_DELAY) - { - action(); - - ScheduledDelegate repeatDelegate = new ScheduledDelegate(action, handler.Time.Current + initialRepeatDelay, REPEAT_INTERVAL); - scheduler.Add(repeatDelegate); - return repeatDelegate; - } - /// /// Shakes this drawable. /// diff --git a/osu.Game/Overlays/Volume/VolumeControlReceptor.cs b/osu.Game/Overlays/Volume/VolumeControlReceptor.cs index 4129b46ce3..c601ce4130 100644 --- a/osu.Game/Overlays/Volume/VolumeControlReceptor.cs +++ b/osu.Game/Overlays/Volume/VolumeControlReceptor.cs @@ -6,8 +6,6 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Input; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; -using osu.Framework.Threading; -using osu.Game.Extensions; using osu.Game.Input.Bindings; namespace osu.Game.Overlays.Volume @@ -17,18 +15,12 @@ namespace osu.Game.Overlays.Volume public Func ActionRequested; public Func ScrollActionRequested; - private ScheduledDelegate keyRepeat; - public bool OnPressed(KeyBindingPressEvent e) { switch (e.Action) { case GlobalAction.DecreaseVolume: case GlobalAction.IncreaseVolume: - keyRepeat?.Cancel(); - keyRepeat = this.BeginKeyRepeat(Scheduler, () => ActionRequested?.Invoke(e.Action), 150); - return true; - case GlobalAction.ToggleMute: case GlobalAction.NextVolumeMeter: case GlobalAction.PreviousVolumeMeter: @@ -41,7 +33,6 @@ namespace osu.Game.Overlays.Volume public void OnReleased(KeyBindingReleaseEvent e) { - keyRepeat?.Cancel(); } protected override bool OnScroll(ScrollEvent e) diff --git a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs index 2a9d3d1cf0..1f3a937311 100644 --- a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs +++ b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs @@ -14,7 +14,6 @@ using osu.Framework.Threading; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Configuration; -using osu.Game.Extensions; using osu.Game.Input.Bindings; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; @@ -204,11 +203,11 @@ namespace osu.Game.Rulesets.UI.Scrolling switch (e.Action) { case GlobalAction.IncreaseScrollSpeed: - scheduleScrollSpeedAdjustment(1); + AdjustScrollSpeed(1); return true; case GlobalAction.DecreaseScrollSpeed: - scheduleScrollSpeedAdjustment(-1); + AdjustScrollSpeed(-1); return true; } @@ -223,12 +222,6 @@ namespace osu.Game.Rulesets.UI.Scrolling scheduledScrollSpeedAdjustment = null; } - private void scheduleScrollSpeedAdjustment(int amount) - { - scheduledScrollSpeedAdjustment?.Cancel(); - scheduledScrollSpeedAdjustment = this.BeginKeyRepeat(Scheduler, () => AdjustScrollSpeed(amount)); - } - private class LocalScrollingInfo : IScrollingInfo { public IBindable Direction { get; } = new Bindable(); diff --git a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs index 32ae7cf859..54c762b8ce 100644 --- a/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs +++ b/osu.Game/Screens/OnlinePlay/Lounge/Components/RoomsContainer.cs @@ -12,7 +12,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; -using osu.Framework.Threading; using osu.Game.Extensions; using osu.Game.Graphics.Cursor; using osu.Game.Input.Bindings; @@ -146,11 +145,11 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components switch (e.Action) { case GlobalAction.SelectNext: - beginRepeatSelection(() => selectNext(1), e.Action); + selectNext(1); return true; case GlobalAction.SelectPrevious: - beginRepeatSelection(() => selectNext(-1), e.Action); + selectNext(-1); return true; } @@ -159,40 +158,6 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components public void OnReleased(KeyBindingReleaseEvent e) { - switch (e.Action) - { - case GlobalAction.SelectNext: - case GlobalAction.SelectPrevious: - endRepeatSelection(e.Action); - break; - } - } - - private ScheduledDelegate repeatDelegate; - private object lastRepeatSource; - - /// - /// Begin repeating the specified selection action. - /// - /// The action to perform. - /// The source of the action. Used in conjunction with to only cancel the correct action (most recently pressed key). - private void beginRepeatSelection(Action action, object source) - { - endRepeatSelection(); - - lastRepeatSource = source; - repeatDelegate = this.BeginKeyRepeat(Scheduler, action); - } - - private void endRepeatSelection(object source = null) - { - // only the most recent source should be able to cancel the current action. - if (source != null && !EqualityComparer.Default.Equals(lastRepeatSource, source)) - return; - - repeatDelegate?.Cancel(); - repeatDelegate = null; - lastRepeatSource = null; } private void selectNext(int direction) diff --git a/osu.Game/Screens/Play/ReplayPlayer.cs b/osu.Game/Screens/Play/ReplayPlayer.cs index 93054b7bb5..617374b4fd 100644 --- a/osu.Game/Screens/Play/ReplayPlayer.cs +++ b/osu.Game/Screens/Play/ReplayPlayer.cs @@ -7,9 +7,7 @@ using System.Linq; using System.Threading.Tasks; using osu.Framework.Input.Bindings; using osu.Framework.Input.Events; -using osu.Framework.Threading; using osu.Game.Beatmaps; -using osu.Game.Extensions; using osu.Game.Input.Bindings; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; @@ -48,8 +46,6 @@ namespace osu.Game.Screens.Play protected override ResultsScreen CreateResults(ScoreInfo score) => new SoloResultsScreen(score, false); - private ScheduledDelegate keyboardSeekDelegate; - public bool OnPressed(KeyBindingPressEvent e) { const double keyboard_seek_amount = 5000; @@ -57,13 +53,11 @@ namespace osu.Game.Screens.Play switch (e.Action) { case GlobalAction.SeekReplayBackward: - keyboardSeekDelegate?.Cancel(); - keyboardSeekDelegate = this.BeginKeyRepeat(Scheduler, () => keyboardSeek(-1)); + keyboardSeek(-1); return true; case GlobalAction.SeekReplayForward: - keyboardSeekDelegate?.Cancel(); - keyboardSeekDelegate = this.BeginKeyRepeat(Scheduler, () => keyboardSeek(1)); + keyboardSeek(1); return true; case GlobalAction.TogglePauseReplay: @@ -86,13 +80,6 @@ namespace osu.Game.Screens.Play public void OnReleased(KeyBindingReleaseEvent e) { - switch (e.Action) - { - case GlobalAction.SeekReplayBackward: - case GlobalAction.SeekReplayForward: - keyboardSeekDelegate?.Cancel(); - break; - } } } } diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 0c593ebea1..0fc7a99c96 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -18,7 +18,6 @@ using osu.Framework.Threading; using osu.Framework.Utils; using osu.Game.Beatmaps; using osu.Game.Configuration; -using osu.Game.Extensions; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Cursor; using osu.Game.Input.Bindings; @@ -479,42 +478,27 @@ namespace osu.Game.Screens.Select switch (e.Key) { case Key.Left: - if (!e.Repeat) - beginRepeatSelection(() => SelectNext(-1), e.Key); + SelectNext(-1); return true; case Key.Right: - if (!e.Repeat) - beginRepeatSelection(() => SelectNext(), e.Key); + SelectNext(); return true; } return false; } - protected override void OnKeyUp(KeyUpEvent e) - { - switch (e.Key) - { - case Key.Left: - case Key.Right: - endRepeatSelection(e.Key); - break; - } - - base.OnKeyUp(e); - } - public bool OnPressed(KeyBindingPressEvent e) { switch (e.Action) { case GlobalAction.SelectNext: - beginRepeatSelection(() => SelectNext(1, false), e.Action); + SelectNext(1, false); return true; case GlobalAction.SelectPrevious: - beginRepeatSelection(() => SelectNext(-1, false), e.Action); + SelectNext(-1, false); return true; } @@ -523,40 +507,6 @@ namespace osu.Game.Screens.Select public void OnReleased(KeyBindingReleaseEvent e) { - switch (e.Action) - { - case GlobalAction.SelectNext: - case GlobalAction.SelectPrevious: - endRepeatSelection(e.Action); - break; - } - } - - private ScheduledDelegate repeatDelegate; - private object lastRepeatSource; - - /// - /// Begin repeating the specified selection action. - /// - /// The action to perform. - /// The source of the action. Used in conjunction with to only cancel the correct action (most recently pressed key). - private void beginRepeatSelection(Action action, object source) - { - endRepeatSelection(); - - lastRepeatSource = source; - repeatDelegate = this.BeginKeyRepeat(Scheduler, action); - } - - private void endRepeatSelection(object source = null) - { - // only the most recent source should be able to cancel the current action. - if (source != null && !EqualityComparer.Default.Equals(lastRepeatSource, source)) - return; - - repeatDelegate?.Cancel(); - repeatDelegate = null; - lastRepeatSource = null; } #endregion