Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion NodeEditor/View/NodeTreeWindow.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.Reflection;
using System.Text;
using System.Collections.Generic;
using Altseed2.NodeEditor.ViewModel;

Expand All @@ -10,6 +12,8 @@ internal class NodeTreeWindow
private readonly NodeTreeViewModel _viewModel;
private readonly NodeEditorPane _pane = new NodeEditorPane("Node");

private List<Type> _userDefinedNodes = new();

public NodeTreeWindow(IEditorPropertyAccessor accessor, NodeTreeViewModel viewModel)
{
_accessor = accessor;
Expand All @@ -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<Type> LoadDLL(string path)
{
List<Type> 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<Type> 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)
{
Expand Down
1 change: 1 addition & 0 deletions NodeEditor/ViewModel/NodeTreeViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,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;
Expand Down