diff --git a/src/Artemis.Core/VisualScripting/NodeScript.cs b/src/Artemis.Core/VisualScripting/NodeScript.cs index 330b3b417..ce6a7af00 100644 --- a/src/Artemis.Core/VisualScripting/NodeScript.cs +++ b/src/Artemis.Core/VisualScripting/NodeScript.cs @@ -341,8 +341,14 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript, IStorageMod private void SavePins(INode node, int collectionId, IEnumerable pins) { int sourcePinId = 0; - foreach (IPin sourcePin in pins.Where(p => p.Direction == PinDirection.Input)) + foreach (IPin sourcePin in pins) { + if (sourcePin.Direction == PinDirection.Output) + { + sourcePinId++; + continue; + } + foreach (IPin targetPin in sourcePin.ConnectedTo) { int targetPinCollectionId = -1; diff --git a/src/Artemis.UI.Shared/Services/NodeEditor/NodeConnectionStore.cs b/src/Artemis.UI.Shared/Services/NodeEditor/NodeConnectionStore.cs index 3598d41fa..596e66304 100644 --- a/src/Artemis.UI.Shared/Services/NodeEditor/NodeConnectionStore.cs +++ b/src/Artemis.UI.Shared/Services/NodeEditor/NodeConnectionStore.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Artemis.Core; namespace Artemis.UI.Shared.Services.NodeEditor; @@ -30,20 +31,18 @@ public class NodeConnectionStore public void Store() { _pinConnections.Clear(); - foreach (IPin nodePin in Node.Pins) - { + + // Iterate to save + foreach (IPin nodePin in Node.Pins.ToList()) + _pinConnections.Add(nodePin, new List(nodePin.ConnectedTo)); + foreach (IPin nodePin in Node.PinCollections.ToList().SelectMany(nodePinCollection => nodePinCollection)) _pinConnections.Add(nodePin, new List(nodePin.ConnectedTo)); - nodePin.DisconnectAll(); - } - foreach (IPinCollection nodePinCollection in Node.PinCollections) - { - foreach (IPin nodePin in nodePinCollection) - { - _pinConnections.Add(nodePin, new List(nodePin.ConnectedTo)); - nodePin.DisconnectAll(); - } - } + // Iterate to disconnect + foreach (IPin nodePin in Node.Pins.ToList()) + nodePin.DisconnectAll(); + foreach (IPin nodePin in Node.PinCollections.ToList().SelectMany(nodePinCollection => nodePinCollection)) + nodePin.DisconnectAll(); } /// @@ -51,23 +50,10 @@ public class NodeConnectionStore /// public void Restore() { - foreach (IPin nodePin in Node.Pins) + foreach ((IPin? pin, List? connections) in _pinConnections) { - if (!_pinConnections.TryGetValue(nodePin, out List? connections)) - continue; foreach (IPin connection in connections) - nodePin.ConnectTo(connection); - } - - foreach (IPinCollection nodePinCollection in Node.PinCollections) - { - foreach (IPin nodePin in nodePinCollection) - { - if (!_pinConnections.TryGetValue(nodePin, out List? connections)) - continue; - foreach (IPin connection in connections) - nodePin.ConnectTo(connection); - } + pin.ConnectTo(connection); } _pinConnections.Clear(); diff --git a/src/Artemis.UI/Services/RegistrationService.cs b/src/Artemis.UI/Services/RegistrationService.cs index 6767cff71..9f87aa2db 100644 --- a/src/Artemis.UI/Services/RegistrationService.cs +++ b/src/Artemis.UI/Services/RegistrationService.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Linq; +using System.Reflection; using Artemis.Core; using Artemis.Core.Services; using Artemis.UI.Controllers; @@ -106,6 +107,9 @@ public class RegistrationService : IRegistrationService _nodeService.RegisterTypeColor(Constants.CorePlugin, typeof(Enum), new SKColor(0xFF1E90FF)); foreach (Type nodeType in typeof(SumNumericsNode).Assembly.GetTypes().Where(t => typeof(INode).IsAssignableFrom(t) && t.IsPublic && !t.IsAbstract && !t.IsInterface)) - _nodeService.RegisterNodeType(Constants.CorePlugin, nodeType); + { + if (nodeType.GetCustomAttribute(typeof(NodeAttribute)) != null) + _nodeService.RegisterNodeType(Constants.CorePlugin, nodeType); + } } } \ No newline at end of file diff --git a/src/Artemis.VisualScripting/Nodes/External/LayerPropertyNode.cs b/src/Artemis.VisualScripting/Nodes/External/LayerPropertyNode.cs index 89226a328..72fff998a 100644 --- a/src/Artemis.VisualScripting/Nodes/External/LayerPropertyNode.cs +++ b/src/Artemis.VisualScripting/Nodes/External/LayerPropertyNode.cs @@ -3,7 +3,7 @@ using Artemis.VisualScripting.Nodes.External.Screens; namespace Artemis.VisualScripting.Nodes.External; -[Node("Layer/Folder Property", "Outputs the property of a selected layer or folder", "External")] +// [Node("Layer/Folder Property", "Outputs the property of a selected layer or folder", "External")] public class LayerPropertyNode : Node { private readonly object _layerPropertyLock = new();