//System.CodeDom.CodeVariableDeclarationStatement mVecVariableDeclaration = new System.CodeDom.CodeVariableDeclarationStatement(); public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var strValueName = GCode_GetValueName(null, context); if (!context.Method.Statements.Contains(mVarDec)) { mVarDec = new CodeAssignStatement(new CodeSnippetExpression(mValueType.FullName + " " + strValueName), CodeGenerateSystem.Program.GetDefaultValueExpressionFromType(mValueType));//, paramCodeName, CodeGenerateSystem.Program.GetDefaultValueExpressionFromType(ParamType)); context.Method.Statements.Insert(0, mVarDec); } if (mCtrlvalue_VectorIn.HasLink) { if (!mCtrlvalue_VectorIn.GetLinkedObject(0, true).IsOnlyReturnValue) { await mCtrlvalue_VectorIn.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlvalue_VectorIn.GetLinkedPinControl(0, true), context); } if (!codeStatementCollection.Contains(mAssignCode)) { mAssignCode = new CodeAssignStatement(new System.CodeDom.CodeVariableReferenceExpression(strValueName), mCtrlvalue_VectorIn.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlvalue_VectorIn.GetLinkedPinControl(0, true), context)); codeStatementCollection.Add(mAssignCode); } } else { if (!codeStatementCollection.Contains(mAssignCode)) { mAssignCode = new CodeAssignStatement(); mAssignCode.Left = new System.CodeDom.CodeVariableReferenceExpression(strValueName); var paramExp = new System.CodeDom.CodeExpression[mLinkInDic.Count]; var param = CSParam as VectorConstructionParams; if (param != null) { for (int i = 0; i < mLinkInDic.Count; i++) { paramExp[i] = new System.CodeDom.CodePrimitiveExpression(param.Value[i]); } } mAssignCode.Right = new CodeObjectCreateExpression(mValueType, paramExp); codeStatementCollection.Add(mAssignCode); } } foreach (var data in mLinkInDic) { var linkOI = data.Element; if (linkOI.HasLink) { if (!linkOI.GetLinkedObject(0, true).IsOnlyReturnValue) { await linkOI.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, linkOI.GetLinkedPinControl(0, true), context); } var fieldRef = new System.CodeDom.CodeFieldReferenceExpression(); fieldRef.TargetObject = new CodeVariableReferenceExpression(strValueName); fieldRef.FieldName = data.KeyName; var statValAss = new System.CodeDom.CodeAssignStatement(); statValAss.Left = fieldRef; statValAss.Right = new CodeGenerateSystem.CodeDom.CodeCastExpression(typeof(float), linkOI.GetLinkedObject(0, true).GCode_CodeDom_GetValue(linkOI.GetLinkedPinControl(0, true), context)); codeStatementCollection.Add(statValAss); } } }
public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (mInComponentLinks.Contains(element) || mOutComponentLinks.Contains(element)) { return("System.Single"); } return(mValueType.FullName); }
public override CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { if (element == mCtrlValueOutR) { return(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(GCode_GetValueName(null, context)), "Red")); } else if (element == mCtrlValueOutG) { return(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(GCode_GetValueName(null, context)), "Green")); } else if (element == mCtrlValueOutB) { return(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(GCode_GetValueName(null, context)), "Blue")); } else if (element == mCtrlValueOutA) { return(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(GCode_GetValueName(null, context)), "Alpha")); } return(new CodeVariableReferenceExpression(GCode_GetValueName(null, context))); }
public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var param = CSParam as EnumConstructParam; if (element == mCtrlValueLinkHandle) { if (SelectedIndex >= 0) { return(param.EnumType); } } return(null); }
public override void GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, FrameworkElement element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == UpLink || element == null) { foreach (MethodControl mc in mChildNodes) { CodeGenerateSystem.Base.LinkObjInfo info = mc.GetLinkObjInfo(mc.methodEll); if (!info.HasLink) { continue; } info.GetLinkObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, info.GetLinkElement(0, true), context); } } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == mCtrlClassLinkHandle_Out) { if (mCtrlClassLinkHandle_In.HasLink) { if (!mCtrlClassLinkHandle_In.GetLinkedObject(0, true).IsOnlyReturnValue) { await mCtrlClassLinkHandle_In.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlClassLinkHandle_In.GetLinkedPinControl(0, true), context); } } } }
public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == mCtrlClassLinkHandle_Out) { return(TargetTypeName); } return(""); }
public override void GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (mMethodInfo == null) { base.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); return; } // 保存节点Id和节点名字 Editor.Runner.RunnerManager.Instance.LastRunnedNodeInfo = EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + this.NodeName; Editor.Runner.RunnerManager.Instance.CurrentId = this.Id; if (MemberParentNode != null && !MemberParentNode.IsOnlyReturnValue) { var tempContext = context.Copy(); tempContext.GenerateNext = false; MemberParentNode?.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mHostUsefulMemberData.LinkObject?.LinkElement, tempContext); } //if (element == MethodLink_Pre) //{ // if (codeStatementCollection.Contains(mMethodInvokeStatment)) // return; // // 参数 // foreach (var paramNode in mChildNodes) // { // if (paramNode is MethodInvokeParameterControl) // { // var paramCtrl = paramNode as MethodInvokeParameterUnionControl; // paramCtrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, null, context); // } // } //} }
public override CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (mMethodInfo == null) { return(base.GCode_CodeDom_GetValue(element, context)); } return(base.GCode_CodeDom_GetValue(element, context)); }
public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var param = CSParam as ClassCastControlConstructParam; if (element == mCastResultPin) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(param.ResultType)); } else if (element == mTargetPin) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(param.TargetType)); } else { throw new InvalidOperationException(); } }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { return(new System.CodeDom.CodeSnippetExpression("EngineNS.CEngine.Instance.EngineTimeSecond")); }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { if (element == null || element == mCastResultPin) { return(new CodeVariableReferenceExpression(GCode_GetValueName(element, context))); } else if (element == mTargetPin) { return(mTargetPin.GetLinkedObject(0).GCode_CodeDom_GetValue(mTargetPin.GetLinkedPinControl(0), context)); } else { throw new InvalidOperationException(); } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == null || element == mCtrlMethodIn) { var param = CSParam as ClassCastControlConstructParam; var paramName = GCode_GetValueName(mCastResultPin, context); if (!mTargetPin.GetLinkedObject(0).IsOnlyReturnValue) { await mTargetPin.GetLinkedObject(0).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mTargetPin.GetLinkedPinControl(0), context); } if (!context.Method.Statements.Contains(mVariableDeclaration)) { mVariableDeclaration = new CodeVariableDeclarationStatement(param.ResultType, paramName, new CodePrimitiveExpression(null)); context.Method.Statements.Insert(0, mVariableDeclaration); } #region Debug // 收集用于调试的数据的代码 var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, TargetPin.GetLinkPinKeyName(), GCode_CodeDom_GetValue(mTargetPin, context), GCode_GetTypeString(mTargetPin, context), context); var breakCondStatement = CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); #endregion var tryCatchStatement = new CodeTryCatchFinallyStatement(); codeStatementCollection.Add(tryCatchStatement); tryCatchStatement.TryStatements.Add(new CodeAssignStatement( new CodeVariableReferenceExpression(paramName), new CodeGenerateSystem.CodeDom.CodeCastExpression( param.ResultType, mTargetPin.GetLinkedObject(0).GCode_CodeDom_GetValue(mTargetPin.GetLinkedPinControl(0), context)))); var catchClause = new CodeCatchClause("catchException", new CodeTypeReference(typeof(System.Exception)), new CodeAssignStatement( new CodeVariableReferenceExpression(paramName), new CodePrimitiveExpression(null))); tryCatchStatement.CatchClauses.Add(catchClause); #region Debug // 转换之后收集一次数据 var debugCodesAfter = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodesAfter, CastResultPin.GetLinkPinKeyName(), GCode_CodeDom_GetValue(CastResultPin, context), GCode_GetTypeString(CastResultPin, context), context); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodesAfter); #endregion var condStatement = new CodeConditionStatement(); codeStatementCollection.Add(condStatement); condStatement.Condition = new CodeBinaryOperatorExpression( new CodeVariableReferenceExpression(paramName), CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null)); if (mCtrlMethodOut.HasLink) { await mCtrlMethodOut.GetLinkedObject(0).GCode_CodeDom_GenerateCode(codeClass, condStatement.TrueStatements, mCtrlMethodOut.GetLinkedPinControl(0), context); } if (mCastFailedPin.HasLink) { await mCastFailedPin.GetLinkedObject(0).GCode_CodeDom_GenerateCode(codeClass, condStatement.FalseStatements, mCastFailedPin.GetLinkedPinControl(0), context); } } else { throw new InvalidOperationException(); } }
public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == null || element == mCastResultPin) { return("castValue_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id)); } else { throw new InvalidOperationException(); } }
public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { return(typeof(System.Boolean)); }
public override void GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var linkOI = GetLinkObjInfo(mParamsMethod); if (linkOI.HasLink) { int i = 0; for (; i < linkOI.LinkInfos.Count; i++) { var linkInfo = linkOI.LinkInfos[i]; if (linkInfo.m_linkFromObjectInfo == linkOI) { break; } } if (!linkOI.GetLinkObject(i, false).IsOnlyReturnValue) { linkOI.GetLinkObject(i, false).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, linkOI.GetLinkElement(i, false), context); } } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == mCtrlMethodLink_Pre) { // 正常逻辑执行代码 if (mCtrlValueElement.HasLink && mCtrlSetValueElement.HasLink) { var codeAss = new System.CodeDom.CodeAssignStatement(); codeAss.Left = mCtrlValueElement.GetLinkedObject(0, false).GCode_CodeDom_GetValue(mCtrlValueElement.GetLinkedPinControl(0, false), context); if (!mCtrlSetValueElement.GetLinkedObject(0, true).IsOnlyReturnValue) { await mCtrlSetValueElement.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlSetValueElement.GetLinkedPinControl(0, true), context); } string valueTypeStr = mCtrlSetValueElement.GetLinkedObject(0, true).GCode_GetTypeString(mCtrlSetValueElement.GetLinkedPinControl(0, true), context); var valueType = mCtrlSetValueElement.GetLinkedObject(0, true).GCode_GetType(mCtrlSetValueElement.GetLinkedPinControl(0, true), context); var tempValName = "assign_" + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id); if (!context.Method.Statements.Contains(mVariableDeclarationStatement)) { var type = EngineNS.Rtti.RttiHelper.GetTypeFromTypeFullName(valueTypeStr); mVariableDeclarationStatement = new System.CodeDom.CodeVariableDeclarationStatement( valueTypeStr, tempValName, CodeGenerateSystem.Program.GetDefaultValueExpressionFromType(type)); context.Method.Statements.Insert(0, mVariableDeclarationStatement); } var assignStatement = new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeVariableReferenceExpression(tempValName), mCtrlSetValueElement.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlSetValueElement.GetLinkedPinControl(0, true), context)); codeStatementCollection.Add(assignStatement); // 收集用于调试的数据的代码 var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlSetValueElement.GetLinkPinKeyName(), new System.CodeDom.CodeVariableReferenceExpression(tempValName), valueTypeStr, context); // 调试用代码 var breakCondStatement = CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id); // 设置数据代码 CodeDomNode.BreakPoint.GetSetDataValueCodeStatement(breakCondStatement.TrueStatements, mCtrlSetValueElement.GetLinkPinKeyName(), new System.CodeDom.CodeVariableReferenceExpression(tempValName), valueType); if (!mCtrlValueElement.GetLinkedObject(0, false).IsOnlyReturnValue) { await mCtrlValueElement.GetLinkedObject(0, false).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); } codeAss.Right = new CodeGenerateSystem.CodeDom.CodeCastExpression(mCtrlValueElement.GetLinkedObject(0, false).GCode_GetType(mCtrlValueElement.GetLinkedPinControl(0, false), context), new System.CodeDom.CodeVariableReferenceExpression(tempValName)); codeStatementCollection.Add(codeAss); // 收集结果代码 CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlValueElement.GetLinkPinKeyName(), mCtrlValueElement.GetLinkedObject(0, false).GCode_CodeDom_GetValue(mCtrlValueElement.GetLinkedPinControl(0, false), context), mCtrlValueElement.GetLinkedObject(0, false).GCode_GetTypeString(mCtrlValueElement.GetLinkedPinControl(0, false), context), context); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); } if (context.GenerateNext) { if (mCtrlMethodLink_Next.HasLink) { await mCtrlMethodLink_Next.GetLinkedObject(0, false).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlMethodLink_Next.GetLinkedPinControl(0, false), context); } } } }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var linkOI = GetLinkObjInfo(mParamsMethod); if (linkOI.HasLink) { int i = 0; for (; i < linkOI.LinkInfos.Count; i++) { var linkInfo = linkOI.LinkInfos[i]; if (linkInfo.m_linkFromObjectInfo == linkOI) { break; } } return(linkOI.GetLinkObject(i, false).GCode_CodeDom_GetValue(linkOI.GetLinkElement(i, false), context)); } return(null); }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { if (element == mCtrlClassLinkHandle_Out) { if (mCtrlClassLinkHandle_In.HasLink) { return(new CodeGenerateSystem.CodeDom.CodeCastExpression(GCode_GetType(element, context), mCtrlClassLinkHandle_In.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlClassLinkHandle_In.GetLinkedPinControl(0, true), context))); } } return(null); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { MethodInvokeParameterControl retCtrl = null; Dictionary <CodeGenerateSystem.Base.BaseNodeControl, System.CodeDom.CodeExpression> paramCodeExps = new Dictionary <CodeGenerateSystem.Base.BaseNodeControl, System.CodeDom.CodeExpression>(); var rcParam = CSParam as ReturnCustomConstructParam; if (rcParam.MethodInfo.IsAsync) { // 异步不能有out,只能有一个返回值 if (mChildNodes.Count == 1) { retCtrl = mChildNodes[0] as MethodInvokeParameterControl; } } else { foreach (var paramNode in mChildNodes) { if (paramNode is MethodInvokeParameterControl) { var pm = paramNode as MethodInvokeParameterControl; var param = pm.CSParam as MethodInvokeParameterControl.MethodInvokeParameterConstructionParams; if (param.ParamInfo.ParamName == "Return") { retCtrl = pm; continue; } if (pm.HasLink()) { await pm.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, pm.ParamPin, context); var exp = new CodeGenerateSystem.CodeDom.CodeCastExpression(param.ParamInfo.ParameterType, pm.GCode_CodeDom_GetValue(pm.ParamPin, context)); paramCodeExps[paramNode] = exp; codeStatementCollection.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeVariableReferenceExpression(param.ParamInfo.ParamName), exp)); } else if (mTemplateClassInstance != null) { var proInfo = mTemplateClassInstance.GetType().GetProperty(param.ParamInfo.ParamName); object proValue; if (proInfo == null) { proValue = CodeGenerateSystem.Program.GetDefaultValueFromType(param.ParamInfo.ParameterType); } else { proValue = proInfo.GetValue(mTemplateClassInstance); } var valueExp = Program.GetValueCode(codeStatementCollection, param.ParamInfo.ParameterType, proValue); paramCodeExps[paramNode] = valueExp; codeStatementCollection.Add(new System.CodeDom.CodeAssignStatement(new System.CodeDom.CodeVariableReferenceExpression(param.ParamInfo.ParamName), valueExp)); } } else { throw new InvalidOperationException(); } } } if (retCtrl != null) { if (retCtrl.HasLink()) { await retCtrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, retCtrl.ParamPin, context); } System.CodeDom.CodeExpression retExp = null; if (retCtrl.HasLink()) { var retStatement = new System.CodeDom.CodeMethodReturnStatement(); retExp = retCtrl.GCode_CodeDom_GetValue(retCtrl.ParamPin, context); paramCodeExps[retCtrl] = retExp; } else if (mTemplateClassInstance != null) { var param = retCtrl.CSParam as MethodInvokeParameterControl.MethodInvokeParameterConstructionParams; var proInfo = mTemplateClassInstance.GetType().GetProperty(param.ParamInfo.ParamName); object proValue; if (proInfo == null) { proValue = CodeGenerateSystem.Program.GetDefaultValueFromType(param.ParamInfo.ParameterType); } else { proValue = proInfo.GetValue(mTemplateClassInstance); } retExp = Program.GetValueCode(codeStatementCollection, param.ParamInfo.ParameterType, proValue); paramCodeExps[retCtrl] = retExp; } #region Debug var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); foreach (var paramNode in mChildNodes) { if (paramNode is MethodInvokeParameterControl) { var pm = paramNode as MethodInvokeParameterControl; System.CodeDom.CodeExpression exp; if (paramCodeExps.TryGetValue(paramNode, out exp)) { CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, pm.ParamPin.GetLinkPinKeyName(), exp, pm.GCode_GetTypeString(pm.ParamPin, context), context); } } else { throw new InvalidOperationException("未实现"); } } var breakCondStatement = CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); #endregion codeStatementCollection.Add(new System.CodeDom.CodeMethodReturnStatement(retExp)); } else { #region Debug var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); var breakCondStatement = CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); #endregion codeStatementCollection.Add(new System.CodeDom.CodeMethodReturnStatement()); } }
public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (element == mCtrlClassLinkHandle_Out) { return(EngineNS.Rtti.RttiHelper.GetTypeFromTypeFullName(TargetTypeName)); } return(null); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(System.CodeDom.CodeTypeDeclaration codeClass, System.CodeDom.CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (!mCtrlValue1.HasLink) { return; } // 计算结果 if (!context.Method.Statements.Contains(mVariableDeclaration)) { var valueType = GCode_GetTypeString(mCtrlResultLink, context); var type = EngineNS.Rtti.RttiHelper.GetTypeFromTypeFullName(valueType); mVariableDeclaration = new System.CodeDom.CodeVariableDeclarationStatement( valueType, GCode_GetValueName(mCtrlResultLink, context), CodeGenerateSystem.Program.GetDefaultValueExpressionFromType(type)); context.Method.Statements.Insert(0, mVariableDeclaration); } // 参数1 var linkObj1 = mCtrlValue1.GetLinkedObject(0, true); var linkElm1 = mCtrlValue1.GetLinkedPinControl(0, true); if (!linkObj1.IsOnlyReturnValue) { await linkObj1.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, linkElm1, context); } System.CodeDom.CodeExpression valueExp1 = null; var valueType1 = typeof(bool); var valueType1Str = valueType1.FullName; if (linkObj1.Pin_UseOrigionParamName(linkElm1)) { if (linkElm1.GetLinkType(0, true) == CodeGenerateSystem.Base.enLinkType.Bool) { var condition = new System.CodeDom.CodeBinaryOperatorExpression(linkObj1.GCode_CodeDom_GetValue(linkElm1, context), System.CodeDom.CodeBinaryOperatorType.IdentityEquality, new System.CodeDom.CodePrimitiveExpression(false)); valueExp1 = condition; } else if (linkElm1.GetLinkType(0, true) == CodeGenerateSystem.Base.enLinkType.Class) { var condition = new System.CodeDom.CodeBinaryOperatorExpression(linkObj1.GCode_CodeDom_GetValue(linkElm1, context), System.CodeDom.CodeBinaryOperatorType.IdentityEquality, new System.CodeDom.CodePrimitiveExpression(null)); valueExp1 = condition; } } else { var tempValueName1 = "InverterControl_" + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + "_Value1"; if (!context.Method.Statements.Contains(mVariableDeclarationStatement_Value1)) { mVariableDeclarationStatement_Value1 = new System.CodeDom.CodeVariableDeclarationStatement( valueType1Str, tempValueName1, CodeGenerateSystem.Program.GetDefaultValueExpressionFromType(EngineNS.Rtti.RttiHelper.GetTypeFromTypeFullName(valueType1Str))); context.Method.Statements.Insert(0, mVariableDeclarationStatement_Value1); } if (linkElm1.GetLinkType(0, true) == CodeGenerateSystem.Base.enLinkType.Bool) { var condition = new System.CodeDom.CodeBinaryOperatorExpression(linkObj1.GCode_CodeDom_GetValue(linkElm1, context), System.CodeDom.CodeBinaryOperatorType.IdentityEquality, new System.CodeDom.CodePrimitiveExpression(false)); codeStatementCollection.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeTypeReferenceExpression(tempValueName1), condition)); } else if (linkElm1.GetLinkType(0, true) == CodeGenerateSystem.Base.enLinkType.Class) { var condition = new System.CodeDom.CodeBinaryOperatorExpression(linkObj1.GCode_CodeDom_GetValue(linkElm1, context), System.CodeDom.CodeBinaryOperatorType.IdentityEquality, new System.CodeDom.CodePrimitiveExpression(null)); codeStatementCollection.Add(new System.CodeDom.CodeAssignStatement( new System.CodeDom.CodeTypeReferenceExpression(tempValueName1), condition)); } valueExp1 = new System.CodeDom.CodeVariableReferenceExpression(tempValueName1); } //var valueExp1 = linkObj1.GCode_CodeDom_GetValue(linkElm1, context); // 收集用于调试的数据的代码 var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); if (linkObj1.Pin_UseOrigionParamName(linkElm1)) { CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, this.mCtrlValue1.GetLinkPinKeyName(), valueExp1, valueType1Str, context); } else { CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, this.mCtrlValue1.GetLinkPinKeyName(), valueExp1, valueType1Str, context); } // 调试用代码 var breakCondStatement = CodeDomNode.BreakPoint.BreakCodeStatement(codeClass, debugCodes, HostNodesContainer.GUID, Id); // 设置数据代码 if (!linkObj1.Pin_UseOrigionParamName(this.mCtrlValue1)) { CodeDomNode.BreakPoint.GetSetDataValueCodeStatement(breakCondStatement.TrueStatements, this.mCtrlValue1.GetLinkPinKeyName(), valueExp1, valueType1); } CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); if (element == mCtrlResultLink) { // 创建结果并赋值 if (mAssignStatement == null) { mAssignStatement = new System.CodeDom.CodeAssignStatement(); mAssignStatement.Left = new System.CodeDom.CodeVariableReferenceExpression(GCode_GetValueName(null, context)); } mAssignStatement.Right = valueExp1; if (codeStatementCollection.Contains(mAssignStatement)) { //var assign = new System.CodeDom.CodeAssignStatement(GCode_CodeDom_GetValue(null) , InverterControlExp); //codeStatementCollection.Add(assign); } else { codeStatementCollection.Add(mAssignStatement); } debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlResultLink.GetLinkPinKeyName(), GCode_CodeDom_GetValue(mCtrlResultLink, context), GCode_GetTypeString(mCtrlResultLink, context), context); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); } }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { var param = CSParam as EnumConstructParam; var newType = EngineNS.CEngine.Instance.MacrossDataManager.MacrossScripAssembly.GetType(param.EnumType.FullName); string str = ""; if (mFlag) { var enumParam = CSParam as EnumConstructParam; foreach (var val in enumParam.FlagEnumValues) { var name = System.Enum.GetName(newType, val); str += name + "|"; } str = str.TrimEnd('|'); } else { str = SelectedItem.ToString(); } return(new System.CodeDom.CodeFieldReferenceExpression(new System.CodeDom.CodeTypeReferenceExpression(param.EnumType), SelectedItem.ToString())); }
public override System.CodeDom.CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { return(new System.CodeDom.CodeVariableReferenceExpression(GCode_GetValueName(null, context))); }
public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { string strValueName = ""; if (string.IsNullOrEmpty(NodeName) || NodeName == CodeGenerateSystem.Program.NodeDefaultName) { strValueName = "color_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id); } else { strValueName = NodeName; } var name = GetValuePureName(element); if (!string.IsNullOrEmpty(name)) { strValueName += "." + name; } return(strValueName); }
public override string GCode_GetValueName(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var strValueName = "InverterControlResult_" + EngineNS.Editor.Assist.GetValuedGUIDString(Id); return(strValueName); }
public override Type GCode_GetType(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { if (mInComponentLinks.Contains(element) || mOutComponentLinks.Contains(element)) { return(typeof(System.Single)); } return(mValueType); }
public override string GCode_GetTypeString(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { return("System.Boolean"); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context) { var strValueName = GCode_GetValueName(null, context); if (!context.Method.Statements.Contains(mVariableDeclaration)) { mVariableDeclaration.Type = new CodeTypeReference(mValueType); mVariableDeclaration.Name = strValueName; mVariableDeclaration.InitExpression = new CodeObjectCreateExpression(mValueType, new CodePrimitiveExpression(1.0f), new CodePrimitiveExpression(1.0f), new CodePrimitiveExpression(1.0f), new CodePrimitiveExpression(1.0f)); context.Method.Statements.Insert(0, mVariableDeclaration); } if (mCtrlValueIn.HasLink) { if (!mCtrlValueIn.GetLinkedObject(0).IsOnlyReturnValue) { await mCtrlValueIn.GetLinkedObject(0).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, mCtrlValueIn.GetLinkedPinControl(0), context); } var express = mCtrlValueIn.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlValueIn.GetLinkedPinControl(0, true), context); GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, express, strValueName); } else { } if (mCtrlValueIn.HasLink) { //if (!mCtrlvalue_ColorIn.GetLinkedObject(0, true).IsOnlyReturnValue) // await mCtrlvalue_ColorIn.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); //var assignStatement = new System.CodeDom.CodeAssignStatement( // new System.CodeDom.CodeVariableReferenceExpression(strValueName), // mCtrlvalue_ColorIn.GetLinkedObject(0, true).GCode_CodeDom_GetValue(mCtrlvalue_ColorIn.GetLinkedPinControl(0, true), context)); //codeStatementCollection.Add(assignStatement); } // r、g、b、a有链接的情况 //foreach (var link in mInComponentLinks) //{ // if (link.HasLink) // { // if (!link.GetLinkedObject(0, true).IsOnlyReturnValue) // await link.GetLinkedObject(0, true).GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); // var fieldRef = new CodeFieldReferenceExpression(); // fieldRef.TargetObject = new CodeVariableReferenceExpression(strValueName); // fieldRef.FieldName = GetValuePureName(link); // var statValAss = new CodeAssignStatement(); // statValAss.Left = fieldRef; // statValAss.Right = new CodeGenerateSystem.CodeDom.CodeCastExpression(typeof(float), link.GetLinkedObject(0, true).GCode_CodeDom_GetValue(link.GetLinkedPinControl(0, true), context)); // codeStatementCollection.Add(statValAss); // } //} // 收集用于调试的数据的代码 var debugCodes = CodeDomNode.BreakPoint.BeginMacrossDebugCodeStatments(codeStatementCollection); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlvalue_ColorOut.GetLinkPinKeyName(), new CodeVariableReferenceExpression(GCode_GetValueName(mCtrlvalue_ColorOut, context)), GCode_GetTypeString(mCtrlvalue_ColorOut, context), context); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlValueOutR.GetLinkPinKeyName(), new CodeVariableReferenceExpression(GCode_GetValueName(mCtrlValueOutR, context)), GCode_GetTypeString(mCtrlValueOutR, context), context); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlValueOutG.GetLinkPinKeyName(), new CodeVariableReferenceExpression(GCode_GetValueName(mCtrlValueOutG, context)), GCode_GetTypeString(mCtrlValueOutG, context), context); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlValueOutB.GetLinkPinKeyName(), new CodeVariableReferenceExpression(GCode_GetValueName(mCtrlValueOutB, context)), GCode_GetTypeString(mCtrlValueOutB, context), context); CodeDomNode.BreakPoint.GetGatherDataValueCodeStatement(debugCodes, mCtrlValueOutA.GetLinkPinKeyName(), new CodeVariableReferenceExpression(GCode_GetValueName(mCtrlValueOutA, context)), GCode_GetTypeString(mCtrlValueOutA, context), context); CodeDomNode.BreakPoint.EndMacrossDebugCodeStatements(codeStatementCollection, debugCodes); }
public override CodeExpression GCode_CodeDom_GetValue(CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Method context, CodeGenerateSystem.Base.GenerateCodeContext_PreNode preNodeContext = null) { if (element == mCtrlvalue_VectorOut) { return(new System.CodeDom.CodeVariableReferenceExpression(GCode_GetValueName(null, context))); } else { foreach (var data in mLinkOutDic) { if (data.Element == element) { return(new System.CodeDom.CodeVariableReferenceExpression(GCode_GetValueName(null, context) + "." + data.KeyName)); } } } return(base.GCode_CodeDom_GetValue(element, context)); }