1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-01-02 02:33:32 +00:00

Nodes - Fixed some connections not saving on dynamic incoming pins

Nodes - Fixed undo/redo when deleting a node with dynamic incoming pins
Nodes - Disabled layer property node for now until I have time to finish it
This commit is contained in:
Robert 2022-08-23 23:28:42 +02:00
parent c45e879eef
commit 30be7a9915
4 changed files with 26 additions and 30 deletions

View File

@ -341,8 +341,14 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript, IStorageMod
private void SavePins(INode node, int collectionId, IEnumerable<IPin> pins) private void SavePins(INode node, int collectionId, IEnumerable<IPin> pins)
{ {
int sourcePinId = 0; 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) foreach (IPin targetPin in sourcePin.ConnectedTo)
{ {
int targetPinCollectionId = -1; int targetPinCollectionId = -1;

View File

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using Artemis.Core; using Artemis.Core;
namespace Artemis.UI.Shared.Services.NodeEditor; namespace Artemis.UI.Shared.Services.NodeEditor;
@ -30,20 +31,18 @@ public class NodeConnectionStore
public void Store() public void Store()
{ {
_pinConnections.Clear(); _pinConnections.Clear();
foreach (IPin nodePin in Node.Pins)
{ // Iterate to save
foreach (IPin nodePin in Node.Pins.ToList())
_pinConnections.Add(nodePin, new List<IPin>(nodePin.ConnectedTo));
foreach (IPin nodePin in Node.PinCollections.ToList().SelectMany(nodePinCollection => nodePinCollection))
_pinConnections.Add(nodePin, new List<IPin>(nodePin.ConnectedTo)); _pinConnections.Add(nodePin, new List<IPin>(nodePin.ConnectedTo));
nodePin.DisconnectAll();
}
foreach (IPinCollection nodePinCollection in Node.PinCollections) // Iterate to disconnect
{ foreach (IPin nodePin in Node.Pins.ToList())
foreach (IPin nodePin in nodePinCollection) nodePin.DisconnectAll();
{ foreach (IPin nodePin in Node.PinCollections.ToList().SelectMany(nodePinCollection => nodePinCollection))
_pinConnections.Add(nodePin, new List<IPin>(nodePin.ConnectedTo)); nodePin.DisconnectAll();
nodePin.DisconnectAll();
}
}
} }
/// <summary> /// <summary>
@ -51,23 +50,10 @@ public class NodeConnectionStore
/// </summary> /// </summary>
public void Restore() public void Restore()
{ {
foreach (IPin nodePin in Node.Pins) foreach ((IPin? pin, List<IPin>? connections) in _pinConnections)
{ {
if (!_pinConnections.TryGetValue(nodePin, out List<IPin>? connections))
continue;
foreach (IPin connection in connections) foreach (IPin connection in connections)
nodePin.ConnectTo(connection); pin.ConnectTo(connection);
}
foreach (IPinCollection nodePinCollection in Node.PinCollections)
{
foreach (IPin nodePin in nodePinCollection)
{
if (!_pinConnections.TryGetValue(nodePin, out List<IPin>? connections))
continue;
foreach (IPin connection in connections)
nodePin.ConnectTo(connection);
}
} }
_pinConnections.Clear(); _pinConnections.Clear();

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Linq; using System.Linq;
using System.Reflection;
using Artemis.Core; using Artemis.Core;
using Artemis.Core.Services; using Artemis.Core.Services;
using Artemis.UI.Controllers; using Artemis.UI.Controllers;
@ -106,6 +107,9 @@ public class RegistrationService : IRegistrationService
_nodeService.RegisterTypeColor(Constants.CorePlugin, typeof(Enum), new SKColor(0xFF1E90FF)); _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)) 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);
}
} }
} }

View File

@ -3,7 +3,7 @@ using Artemis.VisualScripting.Nodes.External.Screens;
namespace Artemis.VisualScripting.Nodes.External; 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<LayerPropertyNodeEntity, LayerPropertyNodeCustomViewModel> public class LayerPropertyNode : Node<LayerPropertyNodeEntity, LayerPropertyNodeCustomViewModel>
{ {
private readonly object _layerPropertyLock = new(); private readonly object _layerPropertyLock = new();