mirror of
https://github.com/ppy/osu.git
synced 2025-03-15 11:47:18 +08:00
Merge pull request #20195 from cdwcgt/SkinEditorShortcut
Add arrow shortcuts to skin editor
This commit is contained in:
commit
c6c59f050c
@ -1,8 +1,6 @@
|
|||||||
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
@ -22,7 +20,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
{
|
{
|
||||||
public class TestSceneSkinEditor : PlayerTestScene
|
public class TestSceneSkinEditor : PlayerTestScene
|
||||||
{
|
{
|
||||||
private SkinEditor skinEditor;
|
private SkinEditor? skinEditor;
|
||||||
|
|
||||||
protected override bool Autoplay => true;
|
protected override bool Autoplay => true;
|
||||||
|
|
||||||
@ -42,29 +40,33 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
Player.ScaleTo(0.4f);
|
Player.ScaleTo(0.4f);
|
||||||
LoadComponentAsync(skinEditor = new SkinEditor(Player), Add);
|
LoadComponentAsync(skinEditor = new SkinEditor(Player), Add);
|
||||||
});
|
});
|
||||||
AddUntilStep("wait for loaded", () => skinEditor.IsLoaded);
|
AddUntilStep("wait for loaded", () => skinEditor!.IsLoaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestToggleEditor()
|
public void TestToggleEditor()
|
||||||
{
|
{
|
||||||
AddToggleStep("toggle editor visibility", _ => skinEditor.ToggleVisibility());
|
AddToggleStep("toggle editor visibility", _ => skinEditor!.ToggleVisibility());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestEditComponent()
|
public void TestEditComponent()
|
||||||
{
|
{
|
||||||
BarHitErrorMeter hitErrorMeter = null;
|
BarHitErrorMeter hitErrorMeter = null!;
|
||||||
|
|
||||||
AddStep("select bar hit error blueprint", () =>
|
AddStep("select bar hit error blueprint", () =>
|
||||||
{
|
{
|
||||||
var blueprint = skinEditor.ChildrenOfType<SkinBlueprint>().First(b => b.Item is BarHitErrorMeter);
|
var blueprint = skinEditor.ChildrenOfType<SkinBlueprint>().First(b => b.Item is BarHitErrorMeter);
|
||||||
|
|
||||||
hitErrorMeter = (BarHitErrorMeter)blueprint.Item;
|
hitErrorMeter = (BarHitErrorMeter)blueprint.Item;
|
||||||
skinEditor.SelectedComponents.Clear();
|
skinEditor!.SelectedComponents.Clear();
|
||||||
skinEditor.SelectedComponents.Add(blueprint.Item);
|
skinEditor.SelectedComponents.Add(blueprint.Item);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
AddStep("move by keyboard", () => InputManager.Key(Key.Right));
|
||||||
|
|
||||||
|
AddAssert("hitErrorMeter moved", () => hitErrorMeter.X != 0);
|
||||||
|
|
||||||
AddAssert("value is default", () => hitErrorMeter.JudgementLineThickness.IsDefault);
|
AddAssert("value is default", () => hitErrorMeter.JudgementLineThickness.IsDefault);
|
||||||
|
|
||||||
AddStep("hover first slider", () =>
|
AddStep("hover first slider", () =>
|
||||||
|
@ -11,9 +11,12 @@ using osu.Framework.Bindables;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Screens;
|
using osu.Framework.Screens;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
|
using osu.Framework.Input.Events;
|
||||||
using osu.Game.Rulesets.Edit;
|
using osu.Game.Rulesets.Edit;
|
||||||
using osu.Game.Screens;
|
using osu.Game.Screens;
|
||||||
using osu.Game.Screens.Edit.Compose.Components;
|
using osu.Game.Screens.Edit.Compose.Components;
|
||||||
|
using osuTK;
|
||||||
|
using osuTK.Input;
|
||||||
|
|
||||||
namespace osu.Game.Skinning.Editor
|
namespace osu.Game.Skinning.Editor
|
||||||
{
|
{
|
||||||
@ -90,6 +93,47 @@ namespace osu.Game.Skinning.Editor
|
|||||||
base.AddBlueprintFor(item);
|
base.AddBlueprintFor(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool OnKeyDown(KeyDownEvent e)
|
||||||
|
{
|
||||||
|
switch (e.Key)
|
||||||
|
{
|
||||||
|
case Key.Left:
|
||||||
|
moveSelection(new Vector2(-1, 0));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case Key.Right:
|
||||||
|
moveSelection(new Vector2(1, 0));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case Key.Up:
|
||||||
|
moveSelection(new Vector2(0, -1));
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case Key.Down:
|
||||||
|
moveSelection(new Vector2(0, 1));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Move the current selection spatially by the specified delta, in screen coordinates (ie. the same coordinates as the blueprints).
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="delta"></param>
|
||||||
|
private void moveSelection(Vector2 delta)
|
||||||
|
{
|
||||||
|
var firstBlueprint = SelectionHandler.SelectedBlueprints.FirstOrDefault();
|
||||||
|
|
||||||
|
if (firstBlueprint == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// convert to game space coordinates
|
||||||
|
delta = firstBlueprint.ToScreenSpace(delta) - firstBlueprint.ToScreenSpace(Vector2.Zero);
|
||||||
|
|
||||||
|
SelectionHandler.HandleMovement(new MoveSelectionEvent<ISkinnableDrawable>(firstBlueprint, delta));
|
||||||
|
}
|
||||||
|
|
||||||
protected override SelectionHandler<ISkinnableDrawable> CreateSelectionHandler() => new SkinSelectionHandler();
|
protected override SelectionHandler<ISkinnableDrawable> CreateSelectionHandler() => new SkinSelectionHandler();
|
||||||
|
|
||||||
protected override SelectionBlueprint<ISkinnableDrawable> CreateBlueprintFor(ISkinnableDrawable component)
|
protected override SelectionBlueprint<ISkinnableDrawable> CreateBlueprintFor(ISkinnableDrawable component)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user