-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEntryNode.cs
More file actions
74 lines (54 loc) · 2.36 KB
/
Copy pathEntryNode.cs
File metadata and controls
74 lines (54 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using NodeDev.Core.Class;
using NodeDev.Core.Connections;
using NodeDev.Core.Types;
using System.Linq.Expressions;
namespace NodeDev.Core.Nodes.Flow;
public class EntryNode : FlowNode
{
public override string TitleColor => "red";
public EntryNode(Graph graph, string? id = null) : base(graph, id)
{
Name = "Entry";
Outputs.Add(new("Exec", this, TypeFactory.ExecType));
Outputs.AddRange(graph.SelfMethod.Parameters.Select(x => new Connection(x.Name, this, x.ParameterType)));
}
public override bool DoesOutputPathAllowDeadEnd(Connection execOutput) => false;
public override bool DoesOutputPathAllowMerge(Connection execOutput) => throw new NotImplementedException(); // only one exec, doesn't make sense to talk about merging.
public override string GetExecOutputPathId(string pathId, Connection execOutput) => throw new NotImplementedException();
public override bool IsFlowNode => true;
internal void AddNewParameter(NodeClassMethodParameter newParameter)
{
Outputs.Add(new Connection(newParameter.Name, this, newParameter.ParameterType));
Graph.RaiseGraphChanged(true);
}
internal void RenameParameter(NodeClassMethodParameter parameter, int index)
{
Outputs[index + 1].Name = parameter.Name;
Graph.RaiseGraphChanged(true);
}
internal Connection UpdateParameterType(NodeClassMethodParameter parameter, int index)
{
var connection = Outputs[index + 1];
connection.UpdateTypeAndTextboxVisibility(parameter.ParameterType, overrideInitialType: true);
return connection;
}
internal void Refresh()
{
var removedConnections = Outputs.Skip(1).ToList(); // everything except exec
var newConnections = Graph.SelfMethod.Parameters.Where(x => !x.IsOut).Select(x => new Connection(x.Name, this, x.ParameterType)).ToList();
Outputs.RemoveRange(1, Outputs.Count - 1);
Outputs.AddRange(newConnections);
Graph.Manager.MergeRemovedConnectionsWithNewConnections(newConnections, removedConnections);
}
internal override Expression BuildExpression(Dictionary<Connection, Graph.NodePathChunks>? subChunks, BuildExpressionInfo info)
{
throw new NotImplementedException();
}
internal override IEnumerable<(Connection Connection, ParameterExpression LocalVariable)> CreateOutputsLocalVariableExpressions(BuildExpressionInfo info)
{
foreach (var output in Outputs.Skip(1))
{
yield return (output, info.MethodParametersExpression[output.Name]);
}
}
}