1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-12 20:22:55 +08:00

Add ability to cycle beat snap divisor using hotkeys

Defaults to Ctrl+Shift+Wheel (as per stable).

Closes #23785.
This commit is contained in:
Dean Herbert 2023-06-07 17:15:13 +09:00
parent 2a76348481
commit 2c89af608a
3 changed files with 52 additions and 2 deletions

View File

@ -101,6 +101,8 @@ namespace osu.Game.Input.Bindings
new KeyBinding(new[] { InputKey.Control, InputKey.J }, GlobalAction.EditorFlipVertically),
new KeyBinding(new[] { InputKey.Control, InputKey.Alt, InputKey.MouseWheelDown }, GlobalAction.EditorDecreaseDistanceSpacing),
new KeyBinding(new[] { InputKey.Control, InputKey.Alt, InputKey.MouseWheelUp }, GlobalAction.EditorIncreaseDistanceSpacing),
new KeyBinding(new[] { InputKey.Control, InputKey.Shift, InputKey.MouseWheelDown }, GlobalAction.EditorCyclePreviousBeatSnapDivisor),
new KeyBinding(new[] { InputKey.Control, InputKey.Shift, InputKey.MouseWheelUp }, GlobalAction.EditorCycleNextBeatSnapDivisor),
};
public IEnumerable<KeyBinding> InGameKeyBindings => new[]
@ -355,6 +357,12 @@ namespace osu.Game.Input.Bindings
ToggleProfile,
[LocalisableDescription(typeof(GlobalActionKeyBindingStrings), nameof(GlobalActionKeyBindingStrings.EditorCloneSelection))]
EditorCloneSelection
EditorCloneSelection,
[LocalisableDescription(typeof(GlobalActionKeyBindingStrings), nameof(GlobalActionKeyBindingStrings.EditorCyclePreviousBeatSnapDivisor))]
EditorCyclePreviousBeatSnapDivisor,
[LocalisableDescription(typeof(GlobalActionKeyBindingStrings), nameof(GlobalActionKeyBindingStrings.EditorCycleNextBeatSnapDivisor))]
EditorCycleNextBeatSnapDivisor,
}
}

View File

@ -279,6 +279,16 @@ namespace osu.Game.Localisation
/// </summary>
public static LocalisableString EditorDecreaseDistanceSpacing => new TranslatableString(getKey(@"editor_decrease_distance_spacing"), @"Decrease distance spacing");
/// <summary>
/// "Cycle previous beat snap divisor"
/// </summary>
public static LocalisableString EditorCyclePreviousBeatSnapDivisor => new TranslatableString(getKey(@"editor_decrease_distance_spacing"), @"Cycle previous beat snap divisor");
/// <summary>
/// "Cycle next beat snap divisor"
/// </summary>
public static LocalisableString EditorCycleNextBeatSnapDivisor => new TranslatableString(getKey(@"editor_increase_distance_spacing"), @"Cycle next beat snap divisor");
/// <summary>
/// "Toggle skin editor"
/// </summary>

View File

@ -16,12 +16,14 @@ using osu.Framework.Graphics.Cursor;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input.Bindings;
using osu.Framework.Input.Events;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.Sprites;
using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
using osu.Game.Input.Bindings;
using osu.Game.Overlays;
using osuTK;
using osuTK.Graphics;
@ -29,7 +31,7 @@ using osuTK.Input;
namespace osu.Game.Screens.Edit.Compose.Components
{
public partial class BeatDivisorControl : CompositeDrawable
public partial class BeatDivisorControl : CompositeDrawable, IKeyBindingHandler<GlobalAction>
{
private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor();
@ -220,6 +222,36 @@ namespace osu.Game.Screens.Edit.Compose.Components
return base.OnKeyDown(e);
}
public virtual bool OnPressed(KeyBindingPressEvent<GlobalAction> e)
{
switch (e.Action)
{
case GlobalAction.EditorCycleNextBeatSnapDivisor:
cycle(1);
return true;
case GlobalAction.EditorCyclePreviousBeatSnapDivisor:
cycle(-1);
return true;
}
return false;
}
private void cycle(int direction)
{
var presets = beatDivisor.ValidDivisors.Value.Presets;
int selectedIndex = presets.Count(e => e < beatDivisor.Value);
int newIndex = Math.Clamp(selectedIndex + direction, 0, presets.Count - 1);
beatDivisor.Value = presets[newIndex];
}
public void OnReleased(KeyBindingReleaseEvent<GlobalAction> e)
{
}
internal partial class DivisorDisplay : OsuAnimatedButton, IHasPopover
{
public BindableBeatDivisor BeatDivisor { get; } = new BindableBeatDivisor();