forked from vr-voyage/SharpLogix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
225 lines (198 loc) · 5.6 KB
/
Program.cs
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace SharpLogix.Core
{
class NodeDefinition
{
protected string typename;
protected string[] inputs;
protected string[] outputs;
protected string default_output_name;
}
class BinaryOperationNode : NodeDefinition
{
public BinaryOperationNode(string name)
{
typename = name;
inputs = new string[] { "A", "B" };
outputs = new string[] { "*" };
default_output_name = "*";
}
}
struct NodeInfo
{
public string className;
public string defaultOutput;
public string[] inputs;
public string[] outputs;
public static NodeInfo Define(
string cName,
string output,
string[] nodeInputs,
string[] nodeOutputs)
{
return new NodeInfo
{
className = cName,
defaultOutput = output,
inputs = nodeInputs,
outputs = nodeOutputs
};
}
public static NodeInfo Define(string cName)
{
return Define(cName, "*", new string[0], new string[] { "*" });
}
}
class NodeDB : Dictionary<string, NodeInfo>
{
public NodeInfo AddInputDefinition(string name)
{
string[] inputs = { };
string[] outputs = { "*" };
return AddDefinition(name, "*", inputs, outputs);
}
public NodeInfo AddBinaryOperationDefinition(string name)
{
string[] inputs = { "A", "B" };
string[] outputs = { "*" };
return AddDefinition(name, "*", inputs, outputs);
}
public NodeInfo AddDefinition(
string name,
string defaultOutputName,
string[] inputs,
string[] outputs)
{
string completeName = "FrooxEngine.LogiX." + name;
NodeInfo nodeInfo = NodeInfo.Define(
completeName, defaultOutputName, inputs, outputs);
this.Add(completeName, nodeInfo);
return nodeInfo;
}
public NodeInfo GetNodeInformation(string name)
{
return this[name];
}
public string DefaultOutputFor(string name)
{
return this[name].defaultOutput;
}
}
struct Node
{
public string typename;
public string GenericTypeName()
{
return typename.Split(new char[] { '<' })[0];
}
}
struct NodeRef
{
public int nodeId;
public NodeRef(int id)
{
nodeId = id;
}
}
struct NodeRefGroup
{
List<NodeRef> nodes;
}
class ActiveElement
{
NodeRef node;
string defaultOutputName;
string selectedOutput;
};
// NumericLiteral - Int -> IntInput. 0 Inputs. 1 Output. DefaultOutputName = *
// StringLiteral - String -> StringInput. 0 Inputs. 1 Output. DefaultOutputName = *
// Operator + -> Add. 2 Inputs. 1 Output. DefaultOutputName = *
//
// AssignmentOperation - NodeGroup. 0 Inputs. 1 Output (NodeGroup ID). DefaultOutputName = ??
class OperationNodes : List<int> { }
class LogixMethodParameter
{
public string name;
public string type; // FIXME : Infer this from the representing node ?
public NodeRef node;
public LogixMethodParameter(string paramName, string paramType, int nodeID)
{
name = paramName;
type = paramType;
node = new NodeRef(nodeID);
}
}
class LogixMethod
{
public string name;
public List<LogixMethodParameter> parameters;
public string returnType;
public int slotID;
public bool ReturnValue()
{
return returnType != "void";
}
public void SetReturnType(string typeName)
{
returnType = typeName;
}
static readonly LogixMethodParameter invalidParam = new LogixMethodParameter("", "", -1);
public LogixMethod(string methodName, int newSlotID)
{
name = methodName;
slotID = newSlotID;
parameters = new List<LogixMethodParameter>(4);
}
public void AddParameter(string name, string type, int nodeID)
{
parameters.Add(new LogixMethodParameter(name, type, nodeID));
}
public LogixMethodParameter GetParameter(string name)
{
foreach (LogixMethodParameter methodParam in parameters)
{
if (methodParam.name == name) return methodParam;
}
return invalidParam;
}
}
class Nodes : List<Node>
{
public readonly static Node invalidNode = new Node();
public Node GetNode(int nodeID)
{
if (nodeID >= this.Count)
{
return invalidNode;
}
return this[nodeID];
}
}
struct LogixSlot
{
public string name;
public LogixSlot(string slotName)
{
name = slotName;
}
}
class Slots : List<LogixSlot>
{
public int AddSlot(string name)
{
int slotID = Count;
Add(new LogixSlot(name));
return slotID;
}
public LogixSlot GetSlot(int slotID)
{
return this[slotID];
}
}
}