From cfcc21f8b9b48f099caac38c86e4dfece30b13e2 Mon Sep 17 00:00:00 2001 From: UweSilver <40294263+syutotyou@users.noreply.github.com> Date: Sun, 13 Jun 2021 02:17:52 +0900 Subject: [PATCH 1/3] Update Core version --- Core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core b/Core index 25ce3d5c..7d0a334d 160000 --- a/Core +++ b/Core @@ -1 +1 @@ -Subproject commit 25ce3d5c9c52ebf89afe8a06b2226ef82512c8d0 +Subproject commit 7d0a334d75bb54f79dd37a30ae87b117750718ac From 24023028f62a586451b3dbfb84a81d1ee8ef2d0c Mon Sep 17 00:00:00 2001 From: UweSilver <40294263+syutotyou@users.noreply.github.com> Date: Wed, 8 Sep 2021 11:24:45 +0900 Subject: [PATCH 2/3] enable to load nodes from DLL --- NodeEditor/View/NodeTreeWindow.cs | 49 ++++++++++++++++++++++- NodeEditor/ViewModel/NodeTreeViewModel.cs | 4 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/NodeEditor/View/NodeTreeWindow.cs b/NodeEditor/View/NodeTreeWindow.cs index ee95b784..c02237d5 100644 --- a/NodeEditor/View/NodeTreeWindow.cs +++ b/NodeEditor/View/NodeTreeWindow.cs @@ -1,4 +1,6 @@ using System; +using System.Reflection; +using System.Text; using System.Collections.Generic; using Altseed2.NodeEditor.ViewModel; @@ -10,6 +12,8 @@ internal class NodeTreeWindow private readonly NodeTreeViewModel _viewModel; private readonly NodeEditorPane _pane = new NodeEditorPane("Node"); + private List _userDefinedNodes = new(); + public NodeTreeWindow(IEditorPropertyAccessor accessor, NodeTreeViewModel viewModel) { _accessor = accessor; @@ -28,11 +32,54 @@ public void Render() RenderButton("Rectangle", _viewModel.CreateRectangleNode); RenderButton("Triangle", _viewModel.CreateTriangleNode); + RenderUserDefinedNodeCreateButtons(_userDefinedNodes); + + RenderButton("+", OpenDLL); RenderNodeTree(Engine.GetNodes()); }); } - private void RenderButton(string label, Action action, bool onNewLine = false) + private void OpenDLL() + { + if (Engine.Tool.OpenDialog("dll", "") is { } path) + { + _userDefinedNodes = LoadDLL(path); + } + } + + public List LoadDLL(string path) + { + List nodes = new(); + + var asm = Assembly.LoadFrom(path); + var typeinfo = asm.GetTypes(); + + foreach (var type in typeinfo) + { + if (type.IsSubclassOf(typeof(Node))) + { + nodes.Add(type); + } + } + + return nodes; + } + + private void RenderUserDefinedNodeCreateButtons(List types) + { + foreach (var type in types) + { + RenderButton(type.Name, () => { CreateUserDefinedNode(type); }); + } + } + + private void CreateUserDefinedNode(Type type) + { + dynamic node = Activator.CreateInstance(type); + Engine.AddNode(node); + } + + private void RenderButton(string label, Action action, bool onNewLine = true) { if (!onNewLine) { diff --git a/NodeEditor/ViewModel/NodeTreeViewModel.cs b/NodeEditor/ViewModel/NodeTreeViewModel.cs index af9d249a..71801772 100644 --- a/NodeEditor/ViewModel/NodeTreeViewModel.cs +++ b/NodeEditor/ViewModel/NodeTreeViewModel.cs @@ -1,4 +1,5 @@ -namespace Altseed2.NodeEditor.ViewModel + +namespace Altseed2.NodeEditor.ViewModel { internal sealed class NodeTreeViewModel { @@ -32,6 +33,7 @@ public void CreateTriangleNode() => Engine.AddNode(new TriangleNode Point2 = new Vector2F(50, 50), Point3 = new Vector2F(100, 0) }); + public ToolTreeNodeFlags GetNodeStatus(Node node) { var flags = ToolTreeNodeFlags.OpenOnArrow; From c8d3718b7fc68754f4dc1aa65c645872f6dd5064 Mon Sep 17 00:00:00 2001 From: UweSilver <40294263+syutotyou@users.noreply.github.com> Date: Wed, 8 Sep 2021 11:41:12 +0900 Subject: [PATCH 3/3] fix --- NodeEditor/ViewModel/NodeTreeViewModel.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/NodeEditor/ViewModel/NodeTreeViewModel.cs b/NodeEditor/ViewModel/NodeTreeViewModel.cs index 71801772..df1cdcfc 100644 --- a/NodeEditor/ViewModel/NodeTreeViewModel.cs +++ b/NodeEditor/ViewModel/NodeTreeViewModel.cs @@ -1,5 +1,4 @@ - -namespace Altseed2.NodeEditor.ViewModel +namespace Altseed2.NodeEditor.ViewModel { internal sealed class NodeTreeViewModel {