public override async Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { if (!mCtrlValueInputHandle.HasLink) { return; } var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); System.CodeDom.CodeMemberMethod method = new CodeMemberMethod() { Name = "Transition" + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + "_Lambda", Attributes = MemberAttributes.Public | MemberAttributes.Final, ReturnType = new CodeTypeReference(typeof(bool)), }; codeClass.Members.Add(method); var methodContext = new GenerateCodeContext_Method(context.ClassContext, method); methodContext.AnimStateMachineReferenceExpression = context.AnimStateMachineReferenceExpression; methodContext.AminStateReferenceExpression = context.AminStateReferenceExpression; if (!linkObj.IsOnlyReturnValue) { await linkObj.GCode_CodeDom_GenerateCode(codeClass, method.Statements, linkElm, methodContext); } var exp = linkObj.GCode_CodeDom_GetValue(mCtrlValueInputHandle.GetLinkedPinControl(0), methodContext); method.Statements.Add(new CodeMethodReturnStatement(exp)); context.StateTransitionMethodReferenceExpression = method; return; }
async Task GenerateLAPostProcess(CategoryItem item, IMacrossOperationContainer linkCtrl, CodeTypeDeclaration macrossClass, CodeGenerateSystem.Base.GenerateCodeContext_Class codeClassContext, LAStatesBridge lAStatesBridge) { var nodesContainer = await linkCtrl.GetNodesContainer(item, true); foreach (var ctrl in nodesContainer.NodesControl.CtrlNodeList) { ctrl.ReInitForGenericCode(); } var constructLAGraphMethod = lAStatesBridge.ConstructLAGraphMethod; foreach (var ctrl in nodesContainer.NodesControl.CtrlNodeList) { if ((ctrl is CodeDomNode.Animation.LAFinalPoseControl)) { var laFinalPoseCtrl = ctrl as LAFinalPoseControl; var initMethod = new CodeMemberMethod(); initMethod.Name = "InitPostProcess"; initMethod.Attributes = MemberAttributes.Public; var param = new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose)), "inPose"); initMethod.Parameters.Add(param); macrossClass.Members.Add(initMethod); var methodContext = new GenerateCodeContext_Method(codeClassContext, initMethod); await laFinalPoseCtrl.GCode_CodeDom_GenerateCode_GeneratePostProcessBlendTree(macrossClass, initMethod.Statements, null, methodContext); var initLambaAssign = new CodeAssignStatement(); initLambaAssign.Left = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "InitializePostProcessFunc"); initLambaAssign.Right = new CodeVariableReferenceExpression(initMethod.Name); constructLAGraphMethod.Statements.Add(initLambaAssign); } } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Class context) { if (!mCtrlValueInputHandle.HasLink) { return; } System.CodeDom.CodeMemberMethod initMethod = null; foreach (var member in codeClass.Members) { if (member.GetType() == typeof(CodeMemberMethod)) { var method = member as CodeMemberMethod; if (method.Name == "Init") { initMethod = method; } } } if (initMethod == null) { initMethod = new CodeMemberMethod(); initMethod.Name = "Init"; initMethod.Attributes = MemberAttributes.Override | MemberAttributes.Public; codeClass.Members.Add(initMethod); } var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); var methodContext = new GenerateCodeContext_Method(context, initMethod); methodContext.InstanceAnimPoseReferenceExpression = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "AnimationPoseProxy"); methodContext.AnimAssetAnimPoseProxyReferenceExpression = methodContext.InstanceAnimPoseReferenceExpression; methodContext.AnimAssetTickHostReferenceExpression = new CodeThisReferenceExpression(); await linkObj.GCode_CodeDom_GenerateCode(codeClass, initMethod.Statements, linkElm, methodContext); var returnExpression = linkObj.GCode_CodeDom_GetSelfRefrence(mCtrlValueInputHandle, methodContext); CodeMethodInvokeExpression createCachedPose = new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "GetCachedAnimPose"), new CodePrimitiveExpression("CachedPose_" + NodeName)); //CodeVariableDeclarationStatement cachedPoseRef = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Graphics.Mesh.Animation.CGfxAnimationPose)), NodeName); //CodeAssignStatement cachedPoseAssign = new CodeAssignStatement(); //cachedPoseAssign.Left = cachedPoseRef; //cachedPoseAssign.Right = createCachedPose; //initMethod.Statements.Add(cachedPoseAssign); CodeFieldReferenceExpression animPoseField = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(returnExpression, "AnimationPoseProxy"), "Pose"); CodeAssignStatement animPoseAssign = new CodeAssignStatement(); animPoseAssign.Left = animPoseField; animPoseAssign.Right = new CodeFieldReferenceExpression(createCachedPose, "CachedAnimationPose"); initMethod.Statements.Add(animPoseAssign); }
public override string GCode_GetTypeString(LinkPinControl element, GenerateCodeContext_Method context) { if (element == null || element == mCountOutPin) { return("System.Int32"); } else { throw new InvalidOperationException(); } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var baseLinkObj = mBaseLinkHandle.GetLinkedObject(0, true); var baseLinkElm = mBaseLinkHandle.GetLinkedPinControl(0, true); if (baseLinkObj != null) { await baseLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, baseLinkElm, context); } var additiveLinkObj = mAdditiveLinkHandle.GetLinkedObject(0, true); var additiveLinkElm = mAdditiveLinkHandle.GetLinkedPinControl(0, true); if (additiveLinkObj != null) { await additiveLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, additiveLinkElm, context); } Type nodeType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_AdditivePose); CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType))); codeStatementCollection.Add(stateVarDeclaration); if (baseLinkObj != null) { var baseAssign = new CodeAssignStatement(); baseAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "BaseNode"); baseAssign.Right = baseLinkObj.GCode_CodeDom_GetSelfRefrence(null, null); codeStatementCollection.Add(baseAssign); } if (additiveLinkObj != null) { var additiveAssign = new CodeAssignStatement(); additiveAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "AdditiveNode"); additiveAssign.Right = additiveLinkObj.GCode_CodeDom_GetSelfRefrence(null, null); codeStatementCollection.Add(additiveAssign); } var valueEvaluateMethod = new CodeMemberMethod(); valueEvaluateMethod.Name = ValidName + "_AlphaEvaluate"; valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; valueEvaluateMethod.ReturnType = new CodeTypeReference(typeof(float)); var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod); CodeExpression alphaValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mAlphaValueLinkHandle, Alpha); valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(alphaValue)); codeClass.Members.Add(valueEvaluateMethod); var alphaAssign = new CodeAssignStatement(); alphaAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateAlpha"); alphaAssign.Right = new CodeVariableReferenceExpression(valueEvaluateMethod.Name); codeStatementCollection.Add(alphaAssign); return; }
public static async System.Threading.Tasks.Task <CodeMemberMethod> CreateEvaluateMethod(CodeTypeDeclaration codeClass, string methodName, Type returnType, object defaultValue, LinkPinControl linkHandle, GenerateCodeContext_Method context) { var valueEvaluateMethod = new CodeMemberMethod(); valueEvaluateMethod.Name = methodName; valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod); var value = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, linkHandle, defaultValue); valueEvaluateMethod.ReturnType = new CodeTypeReference(returnType); valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(value)); codeClass.Members.Add(valueEvaluateMethod); return(valueEvaluateMethod); }
public void GCode_GenerateCode_PS(ref string strDefinitionSegment, ref string strSegment, int nLayer, CodeGenerateSystem.Base.LinkPinControl element) { string strTab = GCode_GetTabString(nLayer); foreach (var link in mInLinks_PS) { if (!link.HasLink) { continue; } var context = new GenerateCodeContext_Method(null, null); link.GetLinkedObject(0, true).GCode_GenerateCode(ref strDefinitionSegment, ref strSegment, nLayer, link.GetLinkedPinControl(0, true), context); strSegment += strTab + "mtl." + mMaterialDataDic[link].mStrName + " = " + link.GetLinkedObject(0, true).GCode_GetValueName(link.GetLinkedPinControl(0, true), context) + ";\r\n"; } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Class context) { if (!mCtrlValueInputHandle.HasLink) return; System.CodeDom.CodeMemberMethod initMethod = null; foreach (var member in codeClass.Members) { if (member is CodeGenerateSystem.CodeDom.CodeMemberMethod) { var method = member as CodeGenerateSystem.CodeDom.CodeMemberMethod; if (method.Name == "Init") initMethod = method; } } if (initMethod == null) { initMethod = new CodeGenerateSystem.CodeDom.CodeMemberMethod(); initMethod.Name = "Init"; initMethod.Attributes = MemberAttributes.Override | MemberAttributes.Public; codeClass.Members.Add(initMethod); } var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); var methodContext = new GenerateCodeContext_Method(context, initMethod); await GenerateCachedPose(codeClass, initMethod.Statements, linkElm, methodContext); methodContext.InstanceAnimPoseReferenceExpression = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "AnimationPoseProxy"); methodContext.AnimAssetAnimPoseProxyReferenceExpression = methodContext.InstanceAnimPoseReferenceExpression; methodContext.AnimAssetTickHostReferenceExpression = new CodeThisReferenceExpression(); await linkObj.GCode_CodeDom_GenerateCode(codeClass, initMethod.Statements, linkElm, methodContext); var returnExp = linkObj.GCode_CodeDom_GetSelfRefrence(mCtrlValueInputHandle, methodContext); if (returnExp != null) { CodeFieldReferenceExpression animPoseField = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(returnExp, "AnimationPoseProxy"),"Pose"); CodeAssignStatement animPoseAssign = new CodeAssignStatement(); animPoseAssign.Left = animPoseField; animPoseAssign.Right = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "AnimationPoseProxy"),"Pose"); initMethod.Statements.Add(animPoseAssign); } }
async System.Threading.Tasks.Task GenerateValueEvaluateCode(CodeTypeDeclaration codeClass, LinkPinControl linkHandle, string methodName, string assignFuncName, CodeStatementCollection codeStatementCollection, GenerateCodeContext_Method context) { var valueEvaluateMethod = new CodeMemberMethod(); valueEvaluateMethod.Name = methodName; valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; valueEvaluateMethod.ReturnType = new CodeTypeReference(typeof(float)); var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod); CodeExpression valueExpression = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, linkHandle, Weight); valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(valueExpression)); codeClass.Members.Add(valueEvaluateMethod); var weightAssign = new CodeAssignStatement(); weightAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), assignFuncName); weightAssign.Right = new CodeVariableReferenceExpression(valueEvaluateMethod.Name); codeStatementCollection.Add(weightAssign); }
public async Task <CodeMemberMethod> GCode_CodeDom_GenerateTransitionLambdaMethod(CodeTypeDeclaration codeClass, LinkPinControl element, GenerateCodeContext_Method context) { var name = StringRegex.GetValidName("Transition" + HostNodesContainer.TitleString + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + "_Lambda"); foreach (var member in codeClass.Members) { if (member is CodeGenerateSystem.CodeDom.CodeMemberMethod) { var existMethod = member as CodeGenerateSystem.CodeDom.CodeMemberMethod; if (existMethod.Name == name) { return(existMethod); } } } CodeGenerateSystem.CodeDom.CodeMemberMethod method = new CodeGenerateSystem.CodeDom.CodeMemberMethod() { Name = name, Attributes = MemberAttributes.Public | MemberAttributes.Final, ReturnType = new CodeTypeReference(typeof(bool)), }; codeClass.Members.Add(method); if (!mCtrlValueInputHandle.HasLink) { method.Statements.Add(new CodeMethodReturnStatement(new CodePrimitiveExpression(true))); } else { var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); var methodContext = new GenerateCodeContext_Method(context.ClassContext, method); if (!linkObj.IsOnlyReturnValue) { await linkObj.GCode_CodeDom_GenerateCode(codeClass, method.Statements, linkElm, methodContext); } var exp = linkObj.GCode_CodeDom_GetValue(mCtrlValueInputHandle.GetLinkedPinControl(0), methodContext); method.Statements.Add(new CodeMethodReturnStatement(exp)); } return(method); }
public override Type GCode_GetType(LinkPinControl element, GenerateCodeContext_Method context) { if (element == mCtrlArrayElement) { return(ElementType); } else if (element == mCtrlArrayIndex) { return(typeof(int)); } else if (element == mCtrlDicKey) { return(KeyType); } else if (element == mCtrlDicValue) { return(ElementType); } return(base.GCode_GetType(element, context)); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeGenerateSystem.Base.LinkPinControl element, CodeGenerateSystem.Base.GenerateCodeContext_Class context) { if (!mCtrlValueInputHandle.HasLink) { return; } var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); System.CodeDom.CodeMemberMethod method = new CodeMemberMethod(); method.Name = "Init"; method.Attributes = MemberAttributes.Public | MemberAttributes.Override; codeClass.Members.Add(method); var methodContext = new GenerateCodeContext_Method(context, method); methodContext.InstanceAnimPoseReferenceExpression = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "AnimationPoseProxy"); methodContext.AnimAssetAnimPoseProxyReferenceExpression = methodContext.InstanceAnimPoseReferenceExpression; methodContext.AnimAssetTickHostReferenceExpression = new CodeThisReferenceExpression(); await linkObj.GCode_CodeDom_GenerateCode(codeClass, method.Statements, linkElm, methodContext); }
public override string GCode_GetTypeString(LinkPinControl element, GenerateCodeContext_Method context) { if (element == mCtrlArrayElement) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(ElementType)); } else if (element == mCtrlArrayIndex) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(typeof(int))); } else if (element == mCtrlDicKey) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(KeyType)); } else if (element == mCtrlDicValue) { return(EngineNS.Rtti.RttiHelper.GetAppTypeString(ElementType)); } return(base.GCode_GetTypeString(element, context)); }
public async System.Threading.Tasks.Task <CodeMemberMethod> CreateSelectedMethod(CodeTypeDeclaration codeClass, string methodName, Type returnType, object defaultValue, LinkPinControl linkHandle, GenerateCodeContext_Method context) { var valueEvaluateMethod = new CodeMemberMethod(); valueEvaluateMethod.Name = methodName; valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; valueEvaluateMethod.ReturnType = new CodeTypeReference(returnType); var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod); var value = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, linkHandle, defaultValue); var vBoolCast = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(typeof(EngineNS.vBOOL)), "FromBoolean"), new CodeExpression[] { value }); var vbool = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.vBOOL)), "vBoolValue", vBoolCast); valueEvaluateMethod.Statements.Add(vbool); var valueField = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression("vBoolValue"), "Value"); valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(valueField)); codeClass.Members.Add(valueEvaluateMethod); return(valueEvaluateMethod); }
async Task GenerateBehaviorTree(CategoryItem item, IMacrossOperationContainer linkCtrl, CodeTypeDeclaration macrossClass, CodeGenerateSystem.Base.GenerateCodeContext_Class codeClassContext, BehaviorTreeBridge behaviorTreeBridge) { var btLinkCtrl = linkCtrl as McBTMacrossLinkControl; var nodesContainer = await linkCtrl.GetNodesContainer(item, true, true); foreach (var ctrl in nodesContainer.NodesControl.CtrlNodeList) { ctrl.ReInitForGenericCode(); if (ctrl is BehaviorTree_BTCenterDataControl) { var cc = ctrl as BehaviorTree_BTCenterDataControl; cc.BTCenterDataWarpper.CenterDataName = btLinkCtrl.BTCenterDataWarpper.CenterDataName; } } var constructBTGraphMethod = behaviorTreeBridge.ConstructBTGraphMethod; foreach (var ctrl in nodesContainer.NodesControl.CtrlNodeList) { if ((ctrl is BehaviorTree_RootControl)) { var btRootCtrl = ctrl as BehaviorTree_RootControl; var initMethod = new CodeMemberMethod(); initMethod.Name = "InitBehaviorTree"; initMethod.Attributes = MemberAttributes.Public; //var param = new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose)), "inPose"); //initMethod.Parameters.Add(param); macrossClass.Members.Add(initMethod); var methodContext = new GenerateCodeContext_Method(codeClassContext, initMethod); await btRootCtrl.GCode_CodeDom_GenerateCode_GenerateBehaviorTree(macrossClass, initMethod.Statements, null, methodContext); var initLambaAssign = new CodeAssignStatement(); initLambaAssign.Left = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "InitBehaviorTreeFunc"); initLambaAssign.Right = new CodeVariableReferenceExpression(initMethod.Name); constructBTGraphMethod.Statements.Add(initLambaAssign); break; } } }
public override CodeExpression GCode_CodeDom_GetValue(LinkPinControl element, GenerateCodeContext_Method context, GenerateCodeContext_PreNode preNodeContext = null) { var param = CSParam as MethodInvoke_DelegateControlConstructionParams; var lambdaExp = new CodeGenerateSystem.CodeDom.CodeLambdaExpression(); lambdaExp.LambdaFieldName = "lambda_" + MethodName; var method = param.ParamInfo.ParameterType.GetMethod("Invoke"); var methodInvokeExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(); methodInvokeExp.Method = new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), MethodName); foreach (var methodParam in method.GetParameters()) { var lambdaParam = new CodeGenerateSystem.CodeDom.CodeLambdaExpression.LambdaParam(); if (methodParam.IsOut) { lambdaParam.Dir = FieldDirection.Out; lambdaParam.Name = "__" + methodParam.Name; lambdaExp.LambdaParams.Add(lambdaParam); } else if (methodParam.ParameterType.IsByRef) { lambdaParam.Dir = FieldDirection.Ref; lambdaParam.Name = "__" + methodParam.Name; lambdaExp.LambdaParams.Add(lambdaParam); } else { lambdaParam.Dir = FieldDirection.In; lambdaParam.Name = "__" + methodParam.Name; lambdaExp.LambdaParams.Add(lambdaParam); } methodInvokeExp.Parameters.Add(new CodeDirectionExpression(lambdaParam.Dir, new CodeVariableReferenceExpression(lambdaParam.Name))); } foreach (var child in mChildNodes) { // 获取连线参数的数值 var paramNode = child as MethodInvokeParameterControl; var linkOI = paramNode.ParamPin; var fromNode = linkOI.GetLinkedObject(0, true); var exp = fromNode.GCode_CodeDom_GetValue(linkOI.GetLinkedPinControl(0, true), context); methodInvokeExp.Parameters.Add(exp); } lambdaExp.MethodInvoke = methodInvokeExp; if (method.ReturnType != typeof(void)) { lambdaExp.NeedReturn = true; } return(lambdaExp); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { DataGradient.SetDataCollect(); var InitArray = new CodeGenerateSystem.CodeDom.CodeMemberMethod(); InitArray.Name = "InitArray"; InitArray.ReturnType = new CodeTypeReference(typeof(void)); InitArray.Attributes = MemberAttributes.Public | MemberAttributes.Override; codeClass.Members.Add(InitArray); CodeStatementCollection initcollection = new CodeStatementCollection(); DataGradient.GCode_CodeDom_GenerateCode_For(codeClass, initcollection, "DataArray"); InitArray.Statements.AddRange(initcollection); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); /* * EngineNS.GamePlay.StateMachine.AnimationStateMachine StateMachine = new EngineNS.GamePlay.StateMachine.AnimationStateMachine("StateMachine"); * StateMachine.AnimationPose = this.AnimationPose; * this.AddStateMachine(StateMachine); */ var validName = StringRegex.GetValidName(NodeName); //System.CodeDom.CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.GamePlay.StateMachine.AnimationStateMachine)), validName, new CodeObjectCreateExpression(new CodeTypeReference(typeof(EngineNS.GamePlay.StateMachine.AnimationStateMachine)),new CodePrimitiveExpression(validName))); System.CodeDom.CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.AnimStateMachine.LogicAnimationStateMachine)), validName); codeStatementCollection.Add(st); var createStateMachine = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "CreateStateMachine"), new CodePrimitiveExpression(validName)); CodeVariableReferenceExpression stateMachineRef = new CodeVariableReferenceExpression(validName); CodeAssignStatement stateMachineAssign = new CodeAssignStatement(); stateMachineAssign.Left = stateMachineRef; stateMachineAssign.Right = createStateMachine; codeStatementCollection.Add(stateMachineAssign); CodeFieldReferenceExpression animPoseField = new CodeFieldReferenceExpression(stateMachineRef, "AnimationPoseProxy"); //CodeAssignStatement animPoseAssign = new CodeAssignStatement(); //animPoseAssign.Left = animPoseField; //animPoseAssign.Right = context.InstanceAnimPoseReferenceExpression; //codeStatementCollection.Add(animPoseAssign); //CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "AddTickComponent"); //var methodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(methodRef, new CodeExpression[] { stateMachineRef }); //codeStatementCollection.Add(methodInvoke); if (mLinkedNodesContainer == null) { return; } context.AnimStateMachineReferenceExpression = stateMachineRef; context.StateMachineAnimPoseReferenceExpression = animPoseField; foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList) { if ((ctrl is CodeDomNode.MethodOverride) || (ctrl is CodeDomNode.MethodCustom) || ctrl is FinalAnimPoseControl || ctrl is StateEntryControl) { await ctrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); } } }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { //subMacross if (mLinkedNodesContainer != null) { foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList) { if (ctrl is CodeGenerateSystem.Controls.FinalTransitionResultControl) { await ctrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); } } } }
public static async System.Threading.Tasks.Task <CodeExpression> GetEvaluateValueExpression(CodeTypeDeclaration codeClass, GenerateCodeContext_Method valueEvaluateMethodContex, CodeMemberMethod valueEvaluateMethod, LinkPinControl linkHandle, object defaultValue) { CodeExpression valueExpression = null; var valueLinkObj = linkHandle.GetLinkedObject(0, true); if (valueLinkObj == null) { valueExpression = new CodePrimitiveExpression(defaultValue); } else { var valueLinkElm = linkHandle.GetLinkedPinControl(0, true); if (!valueLinkObj.IsOnlyReturnValue) { await valueLinkObj.GCode_CodeDom_GenerateCode(codeClass, valueEvaluateMethod.Statements, valueLinkElm, valueEvaluateMethodContex); } valueExpression = valueLinkObj.GCode_CodeDom_GetValue(valueLinkElm, valueEvaluateMethodContex); } return(valueExpression); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var trueLinkObj = mTrueLinkHandle.GetLinkedObject(0, true); var trueLinkElm = mTrueLinkHandle.GetLinkedPinControl(0, true); if (trueLinkObj != null) { await trueLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, trueLinkElm, context); } var falseLinkObj = mFalseLinkHandle.GetLinkedObject(0, true); var falseLinkElm = mFalseLinkHandle.GetLinkedPinControl(0, true); if (falseLinkObj != null) { await falseLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, falseLinkElm, context); } Type nodeType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_SelectPoseByInt); CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType))); codeStatementCollection.Add(stateVarDeclaration); if (trueLinkObj != null) { var trueItem = await CreateBlendTree_PoseItemForBlend(codeClass, codeStatementCollection, mTrueLinkHandle, ValidName + "_TruePoseItem", mTrueBlendValueLinkHandle, TrueBlendValue, context); var addTrueInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Add"), new CodeExpression[] { new CodePrimitiveExpression(1), trueItem }); codeStatementCollection.Add(addTrueInvoke); } if (falseLinkObj != null) { var falseItme = await CreateBlendTree_PoseItemForBlend(codeClass, codeStatementCollection, mFalseLinkHandle, ValidName + "_FalsePoseItem", mFalseBlendValueLinkHandle, FalseBlendValue, context); var addFalseInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Add"), new CodeExpression[] { new CodePrimitiveExpression(0), falseItme }); codeStatementCollection.Add(addFalseInvoke); } var selectMethod = await CreateSelectedMethod(codeClass, ValidName + "_ActiveSelectValue", typeof(int), BoolValue, mActiveLinkHandle, context); var selectMethodAssign = new CodeAssignStatement(); selectMethodAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateSelectedFunc"); selectMethodAssign.Right = new CodeVariableReferenceExpression(selectMethod.Name); codeStatementCollection.Add(selectMethodAssign); return; }
public override async System.Threading.Tasks.Task <CodeExpression> GCode_CodeDom_GenerateBehavior(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); Type nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Leaf.Action.DelayBehavior); CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType))); codeStatementCollection.Add(stateVarDeclaration); var actionAssign = new CodeAssignStatement(); actionAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "WaitTime"); actionAssign.Right = new CodePrimitiveExpression(Time); codeStatementCollection.Add(actionAssign); return(new CodeVariableReferenceExpression(ValidName)); }
public async System.Threading.Tasks.Task <CodeVariableReferenceExpression> CreateBlendTree_PoseItemForBlend(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl poseLinkHandle, string itemName, LinkPinControl blendTimeLinkHandle, object defaultValue, GenerateCodeContext_Method context) { var poseLinkObj = poseLinkHandle.GetLinkedObject(0, true); var truePoseItemForBlend = new CodeVariableDeclarationStatement(typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_PoseItemForBlend), itemName, new CodeObjectCreateExpression(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_PoseItemForBlend)))); codeStatementCollection.Add(truePoseItemForBlend); var truePoseNodeAssign = new CodeAssignStatement(); truePoseNodeAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(itemName), "PoseNode"); truePoseNodeAssign.Right = poseLinkObj.GCode_CodeDom_GetSelfRefrence(null, null); codeStatementCollection.Add(truePoseNodeAssign); var blendTimeEvaluateMethod = await Helper.CreateEvaluateMethod(codeClass, itemName + "_BlendTimeEvaluateMethod", typeof(float), defaultValue, blendTimeLinkHandle, context); var blendTimeAssign = new CodeAssignStatement(); blendTimeAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(itemName), "EvaluateBlendTimeFunc"); blendTimeAssign.Right = new CodeVariableReferenceExpression(blendTimeEvaluateMethod.Name); codeStatementCollection.Add(blendTimeAssign); return(new CodeVariableReferenceExpression(itemName)); }
public override async System.Threading.Tasks.Task <CodeExpression> GCode_CodeDom_GenerateBehavior(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); return(new CodeVariableReferenceExpression(ValidName)); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var inPoseLinkObj = mInPoseLinkHandle.GetLinkedObject(0, true); var inPoseLinkElm = mInPoseLinkHandle.GetLinkedPinControl(0, true); await inPoseLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, inPoseLinkElm, context); Type nodeType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_CCDIK); CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType))); codeStatementCollection.Add(stateVarDeclaration); if (inPoseLinkObj != null) { var srcAssign = new CodeAssignStatement(); srcAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "InPoseNode"); srcAssign.Right = inPoseLinkObj.GCode_CodeDom_GetSelfRefrence(null, null); codeStatementCollection.Add(srcAssign); } var fieldAssign = new CodeAssignStatement(); fieldAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Iteration"); fieldAssign.Right = new CodePrimitiveExpression(Iteration); codeStatementCollection.Add(fieldAssign); fieldAssign = new CodeAssignStatement(); fieldAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "LimitAngle"); fieldAssign.Right = new CodePrimitiveExpression(LimitAngle); codeStatementCollection.Add(fieldAssign); fieldAssign = new CodeAssignStatement(); fieldAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EndEffecterBoneName"); fieldAssign.Right = new CodePrimitiveExpression(EndEffecterBoneName); codeStatementCollection.Add(fieldAssign); fieldAssign = new CodeAssignStatement(); fieldAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "RootBoneName"); fieldAssign.Right = new CodePrimitiveExpression(RootBoneName); codeStatementCollection.Add(fieldAssign); fieldAssign = new CodeAssignStatement(); fieldAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "TargetBoneName"); fieldAssign.Right = new CodePrimitiveExpression(TargetBoneName); codeStatementCollection.Add(fieldAssign); var targetPositionEvaluateMethod = new CodeMemberMethod(); targetPositionEvaluateMethod.Name = ValidName + "_TargetPositionEvaluateMethod"; targetPositionEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, targetPositionEvaluateMethod); CodeExpression valueExpression = null; var valueLinkObj = mActiveValueLinkHandle.GetLinkedObject(0, true); if (valueLinkObj == null) { valueExpression = new CodeObjectCreateExpression(new CodeTypeReference(typeof(EngineNS.Vector3)), new CodeExpression[] { new CodePrimitiveExpression(0), new CodePrimitiveExpression(0), new CodePrimitiveExpression(0) }); } else { var valueLinkElm = mActiveValueLinkHandle.GetLinkedPinControl(0, true); if (!valueLinkObj.IsOnlyReturnValue) { await valueLinkObj.GCode_CodeDom_GenerateCode(codeClass, targetPositionEvaluateMethod.Statements, valueLinkElm, valueEvaluateMethodContex); } valueExpression = valueLinkObj.GCode_CodeDom_GetValue(valueLinkElm, valueEvaluateMethodContex); } targetPositionEvaluateMethod.ReturnType = new CodeTypeReference(typeof(EngineNS.Vector3)); targetPositionEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(valueExpression)); codeClass.Members.Add(targetPositionEvaluateMethod); var targetPositionAssign = new CodeAssignStatement(); targetPositionAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateTargetPositionFunc"); targetPositionAssign.Right = new CodeVariableReferenceExpression(targetPositionEvaluateMethod.Name); codeStatementCollection.Add(targetPositionAssign); var alphaEvaluateMethod = await Helper.CreateEvaluateMethod(codeClass, ValidName + "AlphaEvaluateMethod", typeof(float), Alpha, mAlphaValueLinkHandle, context); var alphaAssign = new CodeAssignStatement(); alphaAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateAlphaFunc"); alphaAssign.Right = new CodeVariableReferenceExpression(alphaEvaluateMethod.Name); codeStatementCollection.Add(alphaAssign); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { //if (!mCtrlValueLinkHandle.RecursionReached) //{ // mCtrlValueLinkHandle.RecursionReached = true; // /* // EngineNS.GamePlay.StateMachine.AnimationState State = new EngineNS.GamePlay.StateMachine.AnimationState("State", StateMachine); // State.AnimationPose = StateMachine.AnimationPose; // */ // var stateMachineRef = context.AnimStateMachineReferenceExpression; // var validName = StringRegex.GetValidName(NodeName); // System.CodeDom.CodeVariableDeclarationStatement stateStateMent = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.AnimStateMachine.LogicAnimationState)), // validName, new CodeObjectCreateExpression(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.AnimStateMachine.LogicAnimationState)), new CodeExpression[] { new CodePrimitiveExpression(validName), stateMachineRef })); // codeStatementCollection.Add(stateStateMent); // stateRef = new CodeVariableReferenceExpression(validName); // CodeFieldReferenceExpression animPoseField = new CodeFieldReferenceExpression(stateRef, "AnimationPoseProxy"); // CodeAssignStatement animPoseAssign = new CodeAssignStatement(); // animPoseAssign.Left = animPoseField; // animPoseAssign.Right = context.StateMachineAnimPoseReferenceExpression; // codeStatementCollection.Add(animPoseAssign); // context.StateAnimPoseReferenceExpression = animPoseField; // //子图 // context.AminStateReferenceExpression = stateRef; // if (mLinkedNodesContainer != null) // { // foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList) // { // if ((ctrl is CodeDomNode.MethodOverride) || // (ctrl is CodeDomNode.MethodCustom) || ctrl is FinalAnimPoseControl || ctrl is CodeDomNode.Animation.StateEntryControl) // { // await ctrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); // } // } // } // //指向的节点 // for (int i = 0; i < mCtrlValueLinkHandle.GetLinkInfosCount(); ++i) // { // var linkInfo = mCtrlValueLinkHandle.GetLinkInfo(i); // if (linkInfo.m_linkFromObjectInfo == mCtrlValueLinkHandle) // { // //需要返回state,来添加两者之间 的转换关系 // await linkInfo.m_linkToObjectInfo.HostNodeControl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); // if (mCtrlValueLinkHandle.LinkCurveType == enLinkCurveType.Line) // { // var linkCurve = linkInfo.LinkPath as CodeGenerateSystem.Base.AnimStateTransitionCurve; // foreach (var transitionCtrl in linkCurve.TransitionControlList) // { // //构建状态转换宏图 // await transitionCtrl.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context); // } // var desState = context.ReturnedAminStateReferenceExpression; // var stateTransitionMethod = context.StateTransitionMethodReferenceExpression; // if (stateTransitionMethod != null) // { // //生成转换代码 // CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(stateRef, "AddStateTransition"); // CodeMethodInvokeExpression methodInvoke = new CodeMethodInvokeExpression(methodRef, new CodeExpression[] { desState, new CodeMethodReferenceExpression(null, stateTransitionMethod.Name) }); // codeStatementCollection.Add(methodInvoke); // } // } // } // } //} ////将自己的state返回给上层递归 //context.ReturnedAminStateReferenceExpression = stateRef; ////返回currentState //foreach (var node in mCtrlValueLinkHandle.GetLinkedObjects()) //{ // if (node is CodeDomNode.Animation.StateEntryControl) // { // context.FirstStateReferenceExpression = stateRef; // } //} }
public async System.Threading.Tasks.Task GenerateCachedPose(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); List <string> cachedPoseNames = new List <string>(); foreach (var ctrl in HostNodesContainer.CtrlNodeList) { if (ctrl is CachedAnimPoseControl) { if (!cachedPoseNames.Contains(ctrl.NodeName)) { cachedPoseNames.Add(ctrl.NodeName); } } } foreach (var sub in HostNodesContainer.HostControl.SubNodesContainers) { foreach (var ctrl in sub.Value.CtrlNodeList) { if (ctrl is CachedAnimPoseControl) { if (!cachedPoseNames.Contains(ctrl.NodeName)) { cachedPoseNames.Add(ctrl.NodeName); } } } } foreach (var cachedPoseName in cachedPoseNames) { CodeMethodInvokeExpression createCachedPose = new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "CreateCachedAnimPose"), new CodePrimitiveExpression("CachedPose_" + cachedPoseName)); codeStatementCollection.Add(createCachedPose); } }
public override CodeExpression GCode_CodeDom_GetSelfRefrence(LinkPinControl element, GenerateCodeContext_Method context, GenerateCodeContext_PreNode preNodeContext = null) { return(new CodeVariableReferenceExpression(ValidName)); }
public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { var inPoseLinkObj = mInPoseLinkHandle.GetLinkedObject(0, true); var inPoseLinkElm = mInPoseLinkHandle.GetLinkedPinControl(0, true); await inPoseLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, inPoseLinkElm, context); }
public override async Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context) { if (!mCtrlValueInputHandle.HasLink) { return; } var linkObj = mCtrlValueInputHandle.GetLinkedObject(0, true); var linkElm = mCtrlValueInputHandle.GetLinkedPinControl(0, true); var stateRef = context.AminStateReferenceExpression; System.CodeDom.CodeMemberMethod method = new CodeMemberMethod() { Name = stateRef.VariableName + EngineNS.Editor.Assist.GetValuedGUIDString(this.Id) + "_Lambda", Parameters = { new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(EngineNS.Graphics.Mesh.Animation.CGfxAnimationPoseProxy)), "animPoseProxy") , new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(EngineNS.GamePlay.StateMachine.AnimationState)), "state") }, Attributes = MemberAttributes.Public | MemberAttributes.Final, ReturnType = new CodeTypeReference(typeof(bool)), }; codeClass.Members.Add(method); context.AnimAssetAnimPoseProxyReferenceExpression = new CodeVariableReferenceExpression("animPoseProxy"); context.AnimAssetTickHostReferenceExpression = new CodeVariableReferenceExpression("state"); await linkObj.GCode_CodeDom_GenerateCode(codeClass, method.Statements, linkElm, context); var codeReturn = new CodeMethodReturnStatement(new CodePrimitiveExpression(true)); method.Statements.Add(codeReturn); CodeFieldReferenceExpression stateBeginFunctionField = new CodeFieldReferenceExpression(stateRef, "AnimStateInitializeFunction"); CodeAssignStatement stateBeginFunctionFieldAssign = new CodeAssignStatement(); stateBeginFunctionFieldAssign.Left = stateBeginFunctionField; stateBeginFunctionFieldAssign.Right = new CodeMethodReferenceExpression(null, method.Name); codeStatementCollection.Add(stateBeginFunctionFieldAssign); return; }