diff --git a/Source/Editor/Surface/Archetypes/ConvertibleNode.cs b/Source/Editor/Surface/Archetypes/ConvertibleNode.cs
index a54c9e0d4..44a8147e6 100644
--- a/Source/Editor/Surface/Archetypes/ConvertibleNode.cs
+++ b/Source/Editor/Surface/Archetypes/ConvertibleNode.cs
@@ -6,101 +6,102 @@ using FlaxEditor.Surface.Elements;
using FlaxEditor.Surface.Undo;
using FlaxEngine;
-namespace FlaxEditor.Surface.Archetypes;
-
-///
-/// A special type of node that adds the functionality to convert nodes to parameters
-///
-internal class ConvertibleNode : SurfaceNode
-{
- private readonly ScriptType _type;
- private readonly Func _convertFunction;
-
- ///
- public ConvertibleNode(uint id, VisjectSurfaceContext context, NodeArchetype nodeArch, GroupArchetype groupArch, ScriptType type, Func convertFunction = null)
- : base(id, context, nodeArch, groupArch)
+namespace FlaxEditor.Surface.Archetypes
+{
+ ///
+ /// A special type of node that adds the functionality to convert nodes to parameters
+ ///
+ internal class ConvertibleNode : SurfaceNode
{
- _type = type;
- _convertFunction = convertFunction;
- }
+ private readonly ScriptType _type;
+ private readonly Func _convertFunction;
- ///
- public override void OnShowSecondaryContextMenu(FlaxEditor.GUI.ContextMenu.ContextMenu menu, Float2 location)
- {
- base.OnShowSecondaryContextMenu(menu, location);
-
- menu.AddSeparator();
- menu.AddButton("Convert to Parameter", OnConvertToParameter);
- }
-
- private void OnConvertToParameter()
- {
- if(Surface.Owner is not IVisjectSurfaceWindow window)
- throw new Exception("Surface owner is not a Visject Surface Window");
-
- Asset asset = Surface.Owner.SurfaceAsset;
- if (asset == null || !asset.IsLoaded)
+ ///
+ public ConvertibleNode(uint id, VisjectSurfaceContext context, NodeArchetype nodeArch, GroupArchetype groupArch, ScriptType type, Func convertFunction = null)
+ : base(id, context, nodeArch, groupArch)
{
- Editor.LogError("Asset is null or not loaded");
- return;
+ _type = type;
+ _convertFunction = convertFunction;
}
- // Add parameter to editor
- var paramIndex = Surface.Parameters.Count;
- object initValue = _convertFunction == null ? Values[0] : _convertFunction.Invoke(Values);
- var paramAction = new AddRemoveParamAction
+ ///
+ public override void OnShowSecondaryContextMenu(FlaxEditor.GUI.ContextMenu.ContextMenu menu, Float2 location)
{
- Window = window,
- IsAdd = true,
- Name = Utilities.Utils.IncrementNameNumber("New parameter", x => OnParameterRenameValidate(null, x)),
- Type = _type,
- Index = paramIndex,
- InitValue = initValue,
- };
- paramAction.Do();
+ base.OnShowSecondaryContextMenu(menu, location);
- Guid parameterGuid = Surface.Parameters[paramIndex].ID;
+ menu.AddSeparator();
+ menu.AddButton("Convert to Parameter", OnConvertToParameter);
+ }
- bool undoEnabled = Surface.Undo.Enabled;
- Surface.Undo.Enabled = false;
- NodeArchetype arch = Surface.GetParameterGetterNodeArchetype(out var groupId);
- SurfaceNode node = Surface.Context.SpawnNode(groupId, arch.TypeID, this.Location, new object[] {parameterGuid}); // 1 Visject, 2 particle, 3 VS
- Surface.Undo.Enabled = undoEnabled;
-
- if (node is not Parameters.SurfaceNodeParamsGet getNode)
- throw new Exception("Node is not a ParamsGet node!");
-
- // Recreate connections of constant node
- // Constant nodes and parameter nodes should have the same ports, so we can just iterate through the connections
- var boxes = GetBoxes();
- for (int i = 0;i < boxes.Count; i++)
+ private void OnConvertToParameter()
{
- Box box = boxes[i];
- if (!box.HasAnyConnection)
- continue;
+ if (Surface.Owner is not IVisjectSurfaceWindow window)
+ throw new Exception("Surface owner is not a Visject Surface Window");
- if (!getNode.TryGetBox(i, out Box paramBox))
- continue;
-
- // Iterating backwards, because the CreateConnection method deletes entries from the box connections when target box IsSingle is set to true
- for (int k = box.Connections.Count-1; k >= 0; k--)
+ Asset asset = Surface.Owner.SurfaceAsset;
+ if (asset == null || !asset.IsLoaded)
{
- Box connectedBox = box.Connections[k];
- paramBox.CreateConnection(connectedBox);
+ Editor.LogError("Asset is null or not loaded");
+ return;
}
+
+ // Add parameter to editor
+ var paramIndex = Surface.Parameters.Count;
+ object initValue = _convertFunction == null ? Values[0] : _convertFunction.Invoke(Values);
+ var paramAction = new AddRemoveParamAction
+ {
+ Window = window,
+ IsAdd = true,
+ Name = Utilities.Utils.IncrementNameNumber("New parameter", x => OnParameterRenameValidate(null, x)),
+ Type = _type,
+ Index = paramIndex,
+ InitValue = initValue,
+ };
+ paramAction.Do();
+
+ Guid parameterGuid = Surface.Parameters[paramIndex].ID;
+
+ bool undoEnabled = Surface.Undo.Enabled;
+ Surface.Undo.Enabled = false;
+ NodeArchetype arch = Surface.GetParameterGetterNodeArchetype(out var groupId);
+ SurfaceNode node = Surface.Context.SpawnNode(groupId, arch.TypeID, this.Location, new object[] { parameterGuid }); // 1 Visject, 2 particle, 3 VS
+ Surface.Undo.Enabled = undoEnabled;
+
+ if (node is not Parameters.SurfaceNodeParamsGet getNode)
+ throw new Exception("Node is not a ParamsGet node!");
+
+ // Recreate connections of constant node
+ // Constant nodes and parameter nodes should have the same ports, so we can just iterate through the connections
+ var boxes = GetBoxes();
+ for (int i = 0; i < boxes.Count; i++)
+ {
+ Box box = boxes[i];
+ if (!box.HasAnyConnection)
+ continue;
+
+ if (!getNode.TryGetBox(i, out Box paramBox))
+ continue;
+
+ // Iterating backwards, because the CreateConnection method deletes entries from the box connections when target box IsSingle is set to true
+ for (int k = box.Connections.Count - 1; k >= 0; k--)
+ {
+ Box connectedBox = box.Connections[k];
+ paramBox.CreateConnection(connectedBox);
+ }
+ }
+
+ var spawnNodeAction = new AddRemoveNodeAction(getNode, true);
+ var removeConstantAction = new AddRemoveNodeAction(this, false);
+
+ Surface.AddBatchedUndoAction(new MultiUndoAction(paramAction, spawnNodeAction, removeConstantAction));
+ removeConstantAction.Do();
}
- var spawnNodeAction = new AddRemoveNodeAction(getNode, true);
- var removeConstantAction = new AddRemoveNodeAction(this, false);
-
- Surface.AddBatchedUndoAction(new MultiUndoAction(paramAction, spawnNodeAction, removeConstantAction));
- removeConstantAction.Do();
- }
-
- private bool OnParameterRenameValidate(RenamePopup popup, string value)
- {
- if(Surface.Owner is not IVisjectSurfaceWindow window)
- throw new Exception("Surface owner is not a Visject Surface Window");
- return !string.IsNullOrWhiteSpace(value) && window.VisjectSurface.Parameters.All(x => x.Name != value);
+ private bool OnParameterRenameValidate(RenamePopup popup, string value)
+ {
+ if (Surface.Owner is not IVisjectSurfaceWindow window)
+ throw new Exception("Surface owner is not a Visject Surface Window");
+ return !string.IsNullOrWhiteSpace(value) && window.VisjectSurface.Parameters.All(x => x.Name != value);
+ }
}
}