Skip to content

Commit

Permalink
add KeyboardAction_ChangeDockableLaneType
Browse files Browse the repository at this point in the history
  • Loading branch information
MikiraSora committed Oct 28, 2024
1 parent e178576 commit 592ba78
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ namespace OngekiFumenEditor.Modules.FumenVisualEditor
{
public static class KeyBindingDefinitions
{
[Export]
public static KeyBindingDefinition KBD_ChangeDockableLaneType = new KeyBindingDefinition(
"kbd_editor_ChangeDockableLaneType",
Key.S);

[Export]
public static KeyBindingDefinition KBD_FastSetObjectIsCritical = new KeyBindingDefinition(
"kbd_editor_FastSetObjectIsCritical",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,84 @@ public void KeyboardAction_FastPlaceNewHold(ActionExecutionContext e)
KeyboardAction_FastPlaceNewObject<Hold>(position);
}

public void KeyboardAction_ChangeDockableLaneType(ActionExecutionContext e)
{
if (!(
SelectObjects.IsOnlyOne(out var r) &&
r is ConnectableObjectBase connectable &&
connectable.ReferenceStartObject is LaneStartBase start &&
start.IsDockableLane))
{
ToastNotify(Resources.SelectOneDockableLaneOnly);
return;
}

LaneStartBase genStart = start.LaneType switch
{
LaneType.Left => new LaneCenterStart(),
LaneType.Center => new LaneRightStart(),
LaneType.Right => new LaneLeftStart(),

LaneType.WallRight => new WallLeftStart(),
LaneType.WallLeft => new WallRightStart(),

_ => throw new NotSupportedException(),
};

void CopyCommon(ConnectableObjectBase s, ConnectableObjectBase t)
{
t.TGrid = s.TGrid;
t.XGrid = s.XGrid;
}

void CopyChild(ConnectableChildObjectBase s, ConnectableChildObjectBase t)
{
CopyCommon(s, t);

t.CurveInterpolaterFactory = s.CurveInterpolaterFactory;
t.CurvePrecision = s.CurvePrecision;
foreach (var ctrl in s.PathControls)
{
var cp = (LaneCurvePathControlObject)ctrl.CopyNew();
cp.TGrid = cp.TGrid;
cp.XGrid = cp.XGrid;
t.AddControlObject(cp);
}
}

//generate and setup new lane.
CopyCommon(start, genStart);
foreach (var child in start.Children)
{
var cpChild = genStart.CreateChildObject();
CopyChild(child, cpChild);
genStart.AddChildObject(cpChild);
}

var affactedDockableObjects = Fumen.GetAllDisplayableObjects()
.OfType<ILaneDockable>()
.Where(x => x.ReferenceLaneStart == start)
.ToArray();

UndoRedoManager.ExecuteAction(LambdaUndoAction.Create(Resources.kbd_editor_ChangeDockableLaneType, () =>
{
RemoveObject(start);
Fumen.AddObject(genStart);
NotifyObjectClicked(genStart);

foreach (var obj in affactedDockableObjects)
obj.ReferenceLaneStart = genStart;
}, () =>
{
RemoveObject(genStart);
Fumen.AddObject(start);
NotifyObjectClicked(start);

foreach (var obj in affactedDockableObjects)
obj.ReferenceLaneStart = start;
}));
}

private void KeyboardAction_FastPlaceNewObject<T>(Point position) where T : OngekiObjectBase, new()
{
var tap = new T();
Expand Down Expand Up @@ -1113,7 +1191,8 @@ public void OnMouseDown(ActionExecutionContext e)
TryCancelAllObjectSelecting();
Log.LogInfo($"SelectionArea ${CurrentCursorPosition}");

if (!SelectionArea.IsActive) {
if (!SelectionArea.IsActive)
{
InitializeSelectionArea(SelectionAreaKind.Select);
}
}
Expand Down Expand Up @@ -1173,7 +1252,8 @@ public void InitializeSelectionArea(SelectionAreaKind kind, Point? position = nu
{
var cursor = position ?? CurrentCursorPosition!.Value;

if (!Keyboard.Modifiers.HasFlag(ModifierKeys.Shift)) {
if (!Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
{
TryCancelAllObjectSelecting();
}

Expand Down Expand Up @@ -1709,7 +1789,8 @@ public void ToastNotify(string message)

// Check coordinates are the same
if (tX.TGrid != obj.TGrid) return false;
if (obj is OngekiMovableObjectBase movable) {
if (obj is OngekiMovableObjectBase movable)
{
var mX = (OngekiMovableObjectBase)x;
if (movable.XGrid != mX.XGrid) return false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
<kb:ActionMessageKeyBinding Definition="{x:Static kbDefs:KeyBindingDefinitions.KBD_PasteCopiesObjects}" Message="KeyboardAction_PasteCopiesObjects($executionContext)" />
<kb:ActionMessageKeyBinding Definition="{x:Static kbDefs:KeyBindingDefinitions.KBD_ScrollPageDown}" Message="ScrollPage(-1)" />
<kb:ActionMessageKeyBinding Definition="{x:Static kbDefs:KeyBindingDefinitions.KBD_ScrollPageUp}" Message="ScrollPage(1)" />
<kb:ActionMessageKeyBinding Definition="{x:Static kbDefs:KeyBindingDefinitions.KBD_ChangeDockableLaneType}" Message="KeyboardAction_ChangeDockableLaneType($executionContext)" />
<!--#endregion-->
</i:Interaction.Triggers>

Expand Down
18 changes: 18 additions & 0 deletions OngekiFumenEditor/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions OngekiFumenEditor/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1992,4 +1992,10 @@
<data name="kbd_layer_Batch" xml:space="preserve">
<value>Batch</value>
</data>
<data name="kbd_editor_ChangeDockableLaneType" xml:space="preserve">
<value>Change type of dockable lane</value>
</data>
<data name="SelectOneDockableLaneOnly" xml:space="preserve">
<value />
</data>
</root>
3 changes: 3 additions & 0 deletions OngekiFumenEditor/Properties/Resources.zh-Hans.resx
Original file line number Diff line number Diff line change
Expand Up @@ -1875,4 +1875,7 @@
<data name="kbd_layer_Batch" xml:space="preserve">
<value>批量模式</value>
</data>
<data name="SelectOneDockableLaneOnly" xml:space="preserve">
<value>请选择单独选择一个可击打轨道节点</value>
</data>
</root>

0 comments on commit 592ba78

Please sign in to comment.