void CompileTimeLine(NodeCode parent, int index, CodeBlock targetFunctionBlock) { CodeBlock TimeLineCodeBlock = new CodeBlock(new Variable() { Var = "void TimeLine_" + index + "()" }, new List <ICodeBase>()); targetFunctionBlock.CommandLines.Add(TimeLineCodeBlock); ((CodeBlock)(targetFunctionBlock.CommandLines[1])).CommandLines.Add(new Variable( "TimelineEvents.Add(new TimeLineEvent(" + parent.logicParamCode.ToCodeText() + ", TimeLine_" + index + "));\n" )); List <NodePointData> flowPoint = parent.GetPointData(ConnectionPointType.Out); NodePointData currentFlow = flowPoint[0]; if (currentFlow.connections.Count == 0) { return; } NodeCode nextCode = guidMap.GetCode(guidMap.GetData <NodePointData>( guidMap.GetData <NodeConnectionData>(currentFlow.connections[0]).inGUID).nodeGUID); CompileFunction(nextCode, TimeLineCodeBlock); }
void CompileFunction(NodeCode parent, CodeBlock targetFunctionBlock) { List <NodePointData> flowPoint = parent.GetPointData(ConnectionPointType.Out); NodePointData currentFlow = flowPoint[0]; if (parent.funcNodeData.nodeType == NodeType.Event) { if (currentFlow.connections.Count == 0) { return; } NodeCode nextCode = guidMap.GetCode(guidMap.GetData <NodePointData>( guidMap.GetData <NodeConnectionData>(currentFlow.connections[0]).inGUID).nodeGUID); CompileFunction(nextCode, targetFunctionBlock); } else if (parent.funcNodeData.nodeType == NodeType.Condition) { if (currentFlow.connections.Count != 0) { NodeCode nextCode = guidMap.GetCode(guidMap.GetData <NodePointData>( guidMap.GetData <NodeConnectionData>(currentFlow.connections[0]).inGUID).nodeGUID); CompileFunction(nextCode, ((ConditionCode)parent.code).isTrue); } currentFlow = flowPoint[1]; if (currentFlow.connections.Count != 0) { NodeCode nextCode = guidMap.GetCode(guidMap.GetData <NodePointData>( guidMap.GetData <NodeConnectionData>(currentFlow.connections[0]).inGUID).nodeGUID); CompileFunction(nextCode, ((ConditionCode)parent.code).isFalse); } targetFunctionBlock.CommandLines.Add(parent.code); } //add for else { targetFunctionBlock.CommandLines.Add(new CodeLine() { code = parent.code }); if (currentFlow.connections.Count == 0) { return; } NodeCode nextCode = guidMap.GetCode(guidMap.GetData <NodePointData>( guidMap.GetData <NodeConnectionData>(currentFlow.connections[0]).inGUID).nodeGUID); CompileFunction(nextCode, targetFunctionBlock); } }
public List <NodePointData> GetPointData(ConnectionPointType type) { List <NodePointData> retVal = new List <NodePointData>(); foreach (var guid in funcNodeData.points) { NodePointData point = guidMap.GetData <NodePointData>(guid); if (point.pointType == type) { retVal.Add(point); } } return(retVal); }
public void InitFunc() { FunctionCall func = new FunctionCall(); NodeFuncData funcNodeData = this.funcNodeData as NodeFuncData; Type methodClassType = NodeGUIUtility.GetType(funcNodeData.funcClassType); MethodInfo method = methodClassType.GetMethod(funcNodeData.methodName); AccessCode access = new AccessCode(); List <NodePointData> parameterPoint = GetPointData(ConnectionPointType.Parameter); if (method.IsStatic) { access.ownerObject = new Variable() { Var = methodClassType.Name }; func.Access = access; } else { NodePointData ownerPoint = parameterPoint.Find((p) => p.parameterType == funcNodeData.funcClassType); AddMapping(ownerPoint.GUID, (c) => ((AccessCode)((FunctionCall)code).Access).ownerObject = c); parameterPoint.Remove(ownerPoint); } foreach (var param in parameterPoint) { AddMapping(param.GUID, (c) => ((ParameterBlock)((FunctionCall)code).Parameter).Parameters.Add(c)); } access.member = new Variable() { Var = method.Name }; func.Access = access; func.Parameter = new ParameterBlock(); code = func; }
public void InitFunc() { FunctionCall func = new FunctionCall(); NodeFuncData funcNodeData = this.funcNodeData as NodeFuncData; Type methodClassType = NodeGUIUtility.GetType(funcNodeData.funcClassType); List <NodePointData> parameterPoint = GetPointData(ConnectionPointType.Parameter); List <Type> methodParameters = new List <Type>(); foreach (var point in funcNodeData.parameters) { methodParameters.Add(NodeGUIUtility.GetType(point)); } MethodBase method; if (funcNodeData.nodeType == NodeType.Constructor) { method = methodClassType.GetConstructor(methodParameters.ToArray()); KeywordCode keyCode = new KeywordCode() { keyword = new Variable() { Var = "new" }, code = new Variable() { Var = funcNodeData.funcClassType } }; foreach (var param in parameterPoint) { AddMapping(param.GUID, (c) => ((ParameterBlock)((FunctionCall)code).Parameter).Parameters.Add(c)); } func.Access = keyCode; func.Parameter = new ParameterBlock(); code = func; } else if (funcNodeData.nodeType == NodeType.Property) { method = methodParameters.Count != 0 ? methodClassType.GetMethod(funcNodeData.methodName, methodParameters.ToArray()) : methodClassType.GetMethod(funcNodeData.methodName); AccessCode access = new AccessCode(); if (method.IsStatic) { access.ownerObject = new Variable() { Var = methodClassType.Name }; func.Access = access; } else { NodePointData ownerPoint = parameterPoint.Find((p) => p.parameterType == funcNodeData.funcClassType); AddMapping(ownerPoint.GUID, (c) => { if (code is OperatorBlock) { ((AccessCode)((OperatorBlock)code).A).ownerObject = c; } else { ((AccessCode)code).ownerObject = c; } }); parameterPoint.Remove(ownerPoint); } foreach (var param in parameterPoint) { AddMapping(param.GUID, (c) => { OperatorBlock oper = new OperatorBlock(); oper.Operator = "="; oper.A = code; oper.B = c; code = oper; }); } access.member = new Variable() { Var = method.Name.Split('_')[1] }; code = access; } else { method = methodParameters.Count != 0 ? methodClassType.GetMethod(funcNodeData.methodName, methodParameters.ToArray()) : methodClassType.GetMethod(funcNodeData.methodName); AccessCode access = new AccessCode(); if (method.IsStatic) { access.ownerObject = new Variable() { Var = methodClassType.Name }; func.Access = access; } else { NodePointData ownerPoint = parameterPoint.Find((p) => p.parameterType == funcNodeData.funcClassType); AddMapping(ownerPoint.GUID, (c) => ((AccessCode)((FunctionCall)code).Access).ownerObject = c); parameterPoint.Remove(ownerPoint); } foreach (var param in parameterPoint) { AddMapping(param.GUID, (c) => ((ParameterBlock)((FunctionCall)code).Parameter).Parameters.Add(c)); } access.member = new Variable() { Var = method.Name }; func.Access = access; func.Parameter = new ParameterBlock(); code = func; } }