Move handling of replay seek operations out of progress bar

This is in order to avoid using the now obsoleted property
`SliderBar.AllowKeyboardInputWhenNotHovered`
(see https://github.com/ppy/osu-framework/pull/4579).
This commit is contained in:
Dean Herbert
2021-07-09 14:28:57 +09:00
parent f3b68a4fbf
commit 6a5f0e8237
3 changed files with 40 additions and 2 deletions

View File

@ -87,6 +87,8 @@ namespace osu.Game.Input.Bindings
new KeyBinding(new[] { InputKey.Shift, InputKey.Tab }, GlobalAction.ToggleInGameInterface),
new KeyBinding(InputKey.MouseMiddle, GlobalAction.PauseGameplay),
new KeyBinding(InputKey.Space, GlobalAction.TogglePauseReplay),
new KeyBinding(InputKey.Left, GlobalAction.SeekReplayBackward),
new KeyBinding(InputKey.Right, GlobalAction.SeekReplayForward),
new KeyBinding(InputKey.Control, GlobalAction.HoldForHUD),
};
@ -272,5 +274,11 @@ namespace osu.Game.Input.Bindings
[Description("Next volume meter")]
NextVolumeMeter,
[Description("Seek replay forward")]
SeekReplayForward,
[Description("Seek replay backward")]
SeekReplayBackward,
}
}

View File

@ -3,11 +3,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Input.Bindings;
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;
using osu.Game.Scoring;
using osu.Game.Screens.Ranking;
@ -43,10 +47,24 @@ namespace osu.Game.Screens.Play
protected override ResultsScreen CreateResults(ScoreInfo score) => new SoloResultsScreen(score, false);
private ScheduledDelegate keyboardSeekDelegate;
public bool OnPressed(GlobalAction action)
{
const double keyboard_seek_amount = 5000;
switch (action)
{
case GlobalAction.SeekReplayBackward:
keyboardSeekDelegate?.Cancel();
keyboardSeekDelegate = this.BeginKeyRepeat(Scheduler, () => keyboardSeek(-1));
return true;
case GlobalAction.SeekReplayForward:
keyboardSeekDelegate?.Cancel();
keyboardSeekDelegate = this.BeginKeyRepeat(Scheduler, () => keyboardSeek(1));
return true;
case GlobalAction.TogglePauseReplay:
if (GameplayClockContainer.IsPaused.Value)
GameplayClockContainer.Start();
@ -56,10 +74,24 @@ namespace osu.Game.Screens.Play
}
return false;
void keyboardSeek(int direction)
{
double target = Math.Clamp(GameplayClockContainer.CurrentTime + direction * keyboard_seek_amount, 0, GameplayBeatmap.HitObjects.Last().GetEndTime());
Seek(target);
}
}
public void OnReleased(GlobalAction action)
{
switch (action)
{
case GlobalAction.SeekReplayBackward:
case GlobalAction.SeekReplayForward:
keyboardSeekDelegate?.Cancel();
break;
}
}
}
}

View File

@ -57,8 +57,6 @@ namespace osu.Game.Screens.Play
set => CurrentNumber.Value = value;
}
protected override bool AllowKeyboardInputWhenNotHovered => true;
public SongProgressBar(float barHeight, float handleBarHeight, Vector2 handleSize)
{
CurrentNumber.MinValue = 0;