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;
        }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
 public override string GCode_GetTypeString(LinkPinControl element, GenerateCodeContext_Method context)
 {
     if (element == null || element == mCountOutPin)
     {
         return("System.Int32");
     }
     else
     {
         throw new InvalidOperationException();
     }
 }
示例#5
0
        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;
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#11
0
 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);
        }
示例#13
0
        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));
        }
示例#14
0
        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);
        }
示例#15
0
        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;
                }
            }
        }
示例#16
0
        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);
                }
            }
        }
示例#19
0
 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);
             }
         }
     }
 }
示例#20
0
        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);
        }
示例#21
0
        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;
        }
示例#22
0
        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));
        }
示例#23
0
        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));
        }
示例#25
0
        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);
            }
        }
示例#28
0
 public override CodeExpression GCode_CodeDom_GetSelfRefrence(LinkPinControl element, GenerateCodeContext_Method context, GenerateCodeContext_PreNode preNodeContext = null)
 {
     return(new CodeVariableReferenceExpression(ValidName));
 }
示例#29
0
 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;
        }