diff --git a/src/Artemis.Core/Services/PluginManagementService.cs b/src/Artemis.Core/Services/PluginManagementService.cs index c5eba9608..dc5d1e3b1 100644 --- a/src/Artemis.Core/Services/PluginManagementService.cs +++ b/src/Artemis.Core/Services/PluginManagementService.cs @@ -233,7 +233,7 @@ internal class PluginManagementService : IPluginManagementService } catch (Exception e) { - _logger.Warning(new ArtemisPluginException("Failed to load plugin", e), "Plugin exception"); + _logger.Warning(new ArtemisPluginException($"Failed to load plugin at {subDirectory}", e), "Plugin exception"); } } diff --git a/src/Artemis.Core/Stores/NodeTypeStore.cs b/src/Artemis.Core/Stores/NodeTypeStore.cs index 401db6406..fb96f2794 100644 --- a/src/Artemis.Core/Stores/NodeTypeStore.cs +++ b/src/Artemis.Core/Stores/NodeTypeStore.cs @@ -62,9 +62,10 @@ internal class NodeTypeStore public static Plugin? GetPlugin(INode node) { + Type nodeType = node.GetType(); lock (Registrations) { - return Registrations.FirstOrDefault(r => r.Plugin.GetType().Assembly == node.GetType().Assembly)?.Plugin; + return Registrations.FirstOrDefault(r => r.NodeData.Type == nodeType)?.Plugin; } } diff --git a/src/Artemis.Core/VisualScripting/NodeScript.cs b/src/Artemis.Core/VisualScripting/NodeScript.cs index 8abc29fbd..8644c06b0 100644 --- a/src/Artemis.Core/VisualScripting/NodeScript.cs +++ b/src/Artemis.Core/VisualScripting/NodeScript.cs @@ -14,13 +14,6 @@ namespace Artemis.Core; /// public abstract class NodeScript : CorePropertyChanged, INodeScript { - private void NodeTypeStoreOnNodeTypeChanged(object? sender, NodeTypeStoreEvent e) - { - // Only respond to node changes applicable to the current script - if (Entity.Nodes.Any(n => e.TypeRegistration.MatchesEntity(n))) - Load(); - } - /// public event EventHandler>? NodeAdded; @@ -79,8 +72,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript Entity = new NodeScriptEntity(); ExitNode = null!; - NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged; - NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged; + NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded; + NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved; } internal NodeScript(string name, string description, NodeScriptEntity entity, object? context = null) @@ -91,8 +84,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript Context = context; ExitNode = null!; - NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged; - NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged; + NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded; + NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved; } #endregion @@ -136,8 +129,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript /// public void Dispose() { - NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeChanged; - NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeChanged; + NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeAdded; + NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeRemoved; lock (_nodes) { @@ -346,7 +339,7 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript sourcePinId++; continue; } - + foreach (IPin targetPin in sourcePin.ConnectedTo) { int targetPinCollectionId = -1; @@ -381,6 +374,19 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript } #endregion + + private void NodeTypeStoreOnNodeTypeAdded(object? sender, NodeTypeStoreEvent e) + { + if (Entity.Nodes.Any(n => e.TypeRegistration.MatchesEntity(n))) + Load(); + } + + private void NodeTypeStoreOnNodeTypeRemoved(object? sender, NodeTypeStoreEvent e) + { + List nodes = Nodes.Where(n => n.GetType() == e.TypeRegistration.NodeData.Type).ToList(); + foreach (INode node in nodes) + RemoveNode(node); + } } ///