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)
     {
         var createCachedPose = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "CreateCachedAnimPose"), new CodePrimitiveExpression("CachedPose_" + cachedPoseName));
         codeStatementCollection.Add(createCachedPose);
     }
   
 }
示例#2
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            Type clipType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_AnimationClip);
            var  createLAClipMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(clipType), "CreateSync"), new CodeExpression[] { new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(EngineNS.RName)), "GetRName", new CodeExpression[] { new CodePrimitiveExpression(FileName.Name) }) });
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(clipType, ValidName, createLAClipMethodInvoke);

            codeStatementCollection.Add(stateVarDeclaration);

            var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(FileName.Address + ".rinfo", null);

            var animationInfo = info as EditorCommon.ResourceInfos.AnimationClipResourceInfo;

            Notifies.Clear();
            foreach (var pair in animationInfo.NotifyTrackMap)
            {
                Notifies.Add(pair.NotifyName);
            }
            for (int i = 0; i < Notifies.Count; ++i)
            {
                var notify          = Notifies[i];
                var validNotifyName = StringRegex.GetValidName(notify);
                validNotifyName = "Anim_Notify_" + validNotifyName;
                if (hasTheNotifyMethod(codeClass, validNotifyName))
                {
                    var attachNotifyEventExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "AttachNotifyEvent"), new CodeExpression[] { new CodePrimitiveExpression(i), new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName) });
                    //CodeArrayIndexerExpression arrayIndex = new CodeArrayIndexerExpression(new CodeFieldReferenceExpression(animRef, "Notifies"), new CodePrimitiveExpression(i));
                    //CodeAttachEventStatement attachEvent = new CodeAttachEventStatement(arrayIndex, "OnNotify", new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName));
                    codeStatementCollection.Add(attachNotifyEventExp);
                }
            }
        }
示例#3
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            if (!mCtrlValueLinkHandle.HasLink)
            {
                return;
            }
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var getCachedPose = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "GetCachedAnimPose"), new CodePrimitiveExpression(NodeName));
            CodeFieldReferenceExpression poseRef = null;

            if (context.AnimAssetTickHostReferenceExpression is CodeThisReferenceExpression)
            {
                poseRef = new CodeFieldReferenceExpression(new CodeFieldReferenceExpression(context.AnimAssetTickHostReferenceExpression, "AnimationPoseProxy"), "Pose");
            }
            else
            {
                poseRef = new CodeFieldReferenceExpression(context.AnimAssetTickHostReferenceExpression, "CachedPose");
            }
            CodeAssignStatement animPoseAssign = new CodeAssignStatement();

            animPoseAssign.Left  = poseRef;
            animPoseAssign.Right = new CodeFieldReferenceExpression(getCachedPose, "AnimationPose");
            codeStatementCollection.Add(animPoseAssign);
        }
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            var defaultLinkObj = mDefaultCtrl.ValueIn.GetLinkedObject(0, true);
            var defaultLinkElm = mDefaultCtrl.ValueIn.GetLinkedPinControl(0, true);
            CodeVariableReferenceExpression defaultItem = null;

            if (defaultLinkObj != null)
            {
                await defaultLinkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, defaultLinkElm, context);

                defaultItem = await CreateBlendTree_PoseItemForBlend(codeClass, codeStatementCollection, mDefaultCtrl.ValueIn, ValidName + "_" + mDefaultCtrl.IndexValue + "PoseItem", mDefaultBlendTimeCtrl.ValueIn, mDefaultBlendTimeCtrl.BlendTimeValue, context);
            }
            List <CodeVariableReferenceExpression> mPoseItemList = new List <CodeVariableReferenceExpression>();

            for (int i = 0; i < mPins.Count; ++i)
            {
                if (mPins[i] == mDefaultCtrl)
                {
                    continue;
                }
                var linkObj = mPins[i].ValueIn.GetLinkedObject(0, true);
                var linkElm = mPins[i].ValueIn.GetLinkedPinControl(0, true);
                if (linkObj == null)
                {
                    continue;
                }
                await linkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, linkElm, context);

                var item = await CreateBlendTree_PoseItemForBlend(codeClass, codeStatementCollection, mPins[i].ValueIn, ValidName + "_" + mPins[i].IndexValue + "PoseItem", mBlendTimePins[i].ValueIn, mBlendTimePins[i].BlendTimeValue, context);

                mPoseItemList.Add(item);
            }
            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 (defaultItem != null)
            {
                var addDefaultInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Add"), new CodeExpression[] { new CodePrimitiveExpression(-1), defaultItem });
                codeStatementCollection.Add(addDefaultInvoke);
            }
            for (int i = 0; i < mPoseItemList.Count; ++i)
            {
                int index     = (int)Enum.Parse(mEnumType, mPins[i].IndexValue);
                var addInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Add"), new CodeExpression[] { new CodePrimitiveExpression(index), mPoseItemList[i] });
                codeStatementCollection.Add(addInvoke);
            }
            var selectMethod = await CreateSelectedMethod(codeClass, ValidName + ValidName + "_ActiveSelectValue", typeof(int), ActiveEnum, mActiveLinkHandle, context);

            var selectMethodAssign = new CodeAssignStatement();

            selectMethodAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateSelectedFunc");
            selectMethodAssign.Right = new CodeVariableReferenceExpression(selectMethod.Name);
            codeStatementCollection.Add(selectMethodAssign);
            return;
        }
示例#5
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);
        }
示例#6
0
        async Task GenerateLAStateMachine(IMacrossOperationContainer linkCtrl, CodeTypeDeclaration macrossClass, CodeGenerateSystem.Base.GenerateCodeContext_Class codeClassContext, LFSMStatesBridge lFSMStatesBridge)
        {
            var constructLAGraphMethod = lFSMStatesBridge.ConstructLFSMGraphMethod;
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            lFSMStatesBridge.LFSMStateMachineName = "LFSM_StateMachine";
            var createStateMachineMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "CrteateStateMachine"), new CodeExpression[] { new CodePrimitiveExpression(lFSMStatesBridge.LFSMStateMachineName) });
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(typeof(EngineNS.Bricks.FSM.SFSM.StackBasedFiniteStateMachine), lFSMStatesBridge.LFSMStateMachineName, createStateMachineMethodInvoke);

            constructLAGraphMethod.Statements.Add(stateVarDeclaration);
        }
示例#7
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 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);

            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);


            var createCachedPose = new CodeGenerateSystem.CodeDom.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 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);
                }
            }
        }
示例#9
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            var stateMachineRef = context.AnimStateMachineReferenceExpression;

            var linkObj = mCtrlValueLinkHandle.GetLinkedObject(0);
            await linkObj.GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, element, context);

            var state = context.FirstStateReferenceExpression;
            CodeMethodReferenceExpression methodRef = new CodeMethodReferenceExpression(stateMachineRef, "SetCurrentState");
            var methodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(methodRef, new CodeExpression[] { state });

            codeStatementCollection.Add(methodInvoke);

            var stateNode = linkObj as AnimStateControl;

            stateNode.ResetRecursionReachedFlag();
        }
示例#10
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;
        }
示例#11
0
        async Task GenerateLAStateMachine(CategoryItem item, IMacrossOperationContainer linkCtrl, CodeTypeDeclaration macrossClass, CodeGenerateSystem.Base.GenerateCodeContext_Class codeClassContext, LAStatesBridge lAStatesBridge)
        {
            var constructLAGraphMethod = lAStatesBridge.ConstructLAGraphMethod;
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            lAStatesBridge.LAStateMachineName = item.Name;
            var createLAStateMachineMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), "CreateLAStateMachine"), new CodeExpression[] { new CodePrimitiveExpression(lAStatesBridge.LAStateMachineName) });
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(typeof(EngineNS.Bricks.Animation.AnimStateMachine.LogicAnimationStateMachine), lAStatesBridge.LAStateMachineName, createLAStateMachineMethodInvoke);
            var layerTypeAssign = new CodeAssignStatement();

            layerTypeAssign.Left = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(item.Name), "LayerType");
            var layerProp = item.PropertyShowItem as LAAnimLayerCategoryItemPropertys;

            layerTypeAssign.Right         = new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(EngineNS.Bricks.Animation.AnimStateMachine.AnimLayerType)), layerProp.LayerType.ToString());
            lAStatesBridge.LAStateMachine = new CodeVariableReferenceExpression(item.Name);
            constructLAGraphMethod.Statements.Add(stateVarDeclaration);
            constructLAGraphMethod.Statements.Add(layerTypeAssign);
        }
示例#12
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);
        }
示例#13
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            var valueEvaluateMethod = new CodeMemberMethod();

            valueEvaluateMethod.Name       = ValidName + "_InputEvaluate";
            valueEvaluateMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;
            valueEvaluateMethod.ReturnType = new CodeTypeReference(typeof(EngineNS.Vector3));
            var valueEvaluateMethodContex = new GenerateCodeContext_Method(context.ClassContext, valueEvaluateMethod);
            var tempInputName             = "tempInput";
            CodeVariableDeclarationStatement tempInput = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Vector3)), tempInputName, new CodeObjectCreateExpression(typeof(EngineNS.Vector3), new CodeExpression[] { new CodePrimitiveExpression(0), new CodePrimitiveExpression(0), new CodePrimitiveExpression(0) }));

            valueEvaluateMethod.Statements.Add(tempInput);
            CodeExpression xValue = null;
            CodeExpression yValue = null;

            xValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mXLinkHandle, 0);

            if (!Is1D)
            {
                yValue = await Helper.GetEvaluateValueExpression(codeClass, valueEvaluateMethodContex, valueEvaluateMethod, mYLinkHandle, 0);
            }

            CodeAssignStatement xValueAssign = new CodeAssignStatement();

            xValueAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "X");
            xValueAssign.Right = xValue;
            valueEvaluateMethod.Statements.Add(xValueAssign);
            if (!Is1D)
            {
                CodeAssignStatement yValueAssign = new CodeAssignStatement();
                yValueAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(tempInputName), "Y");
                yValueAssign.Right = yValue;
                valueEvaluateMethod.Statements.Add(yValueAssign);
            }
            valueEvaluateMethod.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(tempInputName)));
            codeClass.Members.Add(valueEvaluateMethod);


            Type bsType;

            if (Is1D)
            {
                bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace1D);
            }
            else
            {
                bsType = typeof(EngineNS.Bricks.Animation.BlendTree.Node.BlendTree_BlendSpace2D);
            }
            var createLABSMethodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeTypeReferenceExpression(bsType), "CreateSync"), new CodeExpression[] { new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(EngineNS.RName)), "GetRName", new CodeExpression[] { new CodePrimitiveExpression(FileName.Name) }) });
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(bsType, ValidName, createLABSMethodInvoke);

            codeStatementCollection.Add(stateVarDeclaration);


            var syncPlayPercentGropAssign = new CodeAssignStatement();

            syncPlayPercentGropAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "SyncPlayPercentGrop");
            syncPlayPercentGropAssign.Right = new CodePrimitiveExpression(SyncPlayPercentGrop);
            codeStatementCollection.Add(syncPlayPercentGropAssign);

            CodeAssignStatement inputFuncAssign = new CodeAssignStatement();

            inputFuncAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "EvaluateInput");
            inputFuncAssign.Right = new CodeVariableReferenceExpression(valueEvaluateMethod.Name);
            codeStatementCollection.Add(inputFuncAssign);
            List <string> nofifies = new List <string>();
            var           info     = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(FileName.Address + ".rinfo", null);

            EngineNS.Bricks.Animation.AnimNode.BlendSpace bs = null;
            if (Is1D)
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace1D.CreateSync(FileName);
            }
            else
            {
                bs = EngineNS.Bricks.Animation.AnimNode.BlendSpace2D.CreateSync(FileName);
            }
            if (info != null)
            {
                for (int j = 0; j < bs.Samples.Count; ++j)
                {
                    var clip = bs.GetAnimationSample(j);

                    var refInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(clip.AnimationName.Address + ".rinfo", null);

                    var animationInfo = refInfo as EditorCommon.ResourceInfos.AnimationClipResourceInfo;
                    nofifies.Clear();
                    foreach (var pair in animationInfo.NotifyTrackMap)
                    {
                        nofifies.Add(pair.NotifyName);
                    }
                    for (int i = 0; i < nofifies.Count; ++i)
                    {
                        var notify          = nofifies[i];
                        var validNotifyName = StringRegex.GetValidName(notify);
                        validNotifyName = "Anim_Notify_" + validNotifyName;
                        if (hasTheNotifyMethod(codeClass, validNotifyName))
                        {
                            var attachNotifyEventExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "BlendSpace"), "AttachNotifyEvent"), new CodeExpression[] { new CodePrimitiveExpression(j), new CodePrimitiveExpression(i), new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName) });
                            //CodeArrayIndexerExpression arrayIndex = new CodeArrayIndexerExpression(new CodeFieldReferenceExpression(animRef, "Notifies"), new CodePrimitiveExpression(i));
                            //CodeAttachEventStatement attachEvent = new CodeAttachEventStatement(arrayIndex, "OnNotify", new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName));
                            codeStatementCollection.Add(attachNotifyEventExp);
                        }
                    }
                }
            }
            return;
        }
示例#14
0
        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.ArrowLine;
                            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");
                                var methodInvoke = new CodeGenerateSystem.CodeDom.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;
                }
            }
        }
示例#15
0
        public override async System.Threading.Tasks.Task <CodeExpression> GCode_CodeDom_GenerateBehavior(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            var linkObjs = mOutLinkHandle.GetLinkedObjects();

            for (int i = 0; i < linkObjs.Length; ++i)
            {
                for (int j = i; j < linkObjs.Length; ++j)
                {
                    if (linkObjs[i].GetLeftInCanvas(false) > linkObjs[j].GetLeftInCanvas(false))
                    {
                        var temp = linkObjs[i];
                        linkObjs[i] = linkObjs[j];
                        linkObjs[j] = temp;
                    }
                }
            }
            List <CodeExpression> childrenNode = new List <CodeExpression>();

            for (int i = 0; i < linkObjs.Length; ++i)
            {
                var   linkElm = mOutLinkHandle.GetLinkedPinControl(i, true);
                await linkObjs[i].GCode_CodeDom_GenerateCode(codeClass, codeStatementCollection, linkElm, context);
                childrenNode.Add(linkObjs[i].GCode_CodeDom_GetSelfRefrence(null, null));
            }
            Type nodeType = null;

            switch (CompositeNodeType)
            {
            case CompositeNodeType.Select:
            {
                nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Composite.SelectBehavior);
            }
            break;

            case CompositeNodeType.RandomSelect:
            {
                nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Composite.SelectBehavior);
            }
            break;

            case CompositeNodeType.Sequence:
            {
                nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Composite.SequenceBehavior);
            }
            break;

            case CompositeNodeType.Parallel:
            {
                nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Composite.ParallelBehavior);
            }
            break;
            }
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType)));

            codeStatementCollection.Add(stateVarDeclaration);

            for (int i = 0; i < linkObjs.Length; ++i)
            {
                var addChild = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodeVariableReferenceExpression(ValidName), "AddChild"), new CodeExpression[] { childrenNode[i] });
                codeStatementCollection.Add(addChild);
            }
            return(new CodeVariableReferenceExpression(ValidName));
        }
        public void GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, CodeExpression expression, string strValueName)
        {
            GetGradientDatas();
            if (GradientDatas.Count > 1)
            {
                for (int i = 1; i < GradientDatas.Count; i++)
                {
                    var value   = expression;
                    var offset1 = GradientDatas[i - 1].Offset;
                    var color1  = GradientDatas[i - 1].GradientColor;
                    var offset2 = GradientDatas[i].Offset;
                    var color2  = GradientDatas[i].GradientColor;

                    CodeObjectCreateExpression color1obj = new CodeObjectCreateExpression("EngineNS.Color4", new CodeExpression[] { });
                    color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Alpha));
                    color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Red));
                    color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Green));
                    color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Blue));

                    CodeObjectCreateExpression color2obj = new CodeObjectCreateExpression("EngineNS.Color4", new CodeExpression[] { });
                    color2obj.Parameters.Add(new CodePrimitiveExpression(color2.Alpha));
                    color2obj.Parameters.Add(new CodePrimitiveExpression(color2.Red));
                    color2obj.Parameters.Add(new CodePrimitiveExpression(color2.Green));
                    color2obj.Parameters.Add(new CodePrimitiveExpression(color2.Blue));

                    //"t = (value - offset1) / (offset2 - offset1) "
                    CodeBinaryOperatorExpression v1 = new CodeBinaryOperatorExpression(
                        value,
                        CodeBinaryOperatorType.Subtract,
                        new CodePrimitiveExpression(offset2));

                    CodeBinaryOperatorExpression v2 = new CodeBinaryOperatorExpression(
                        new CodePrimitiveExpression(offset1),
                        CodeBinaryOperatorType.Subtract,
                        new CodePrimitiveExpression(offset2));

                    CodeBinaryOperatorExpression v3 = new CodeBinaryOperatorExpression(
                        v1,
                        CodeBinaryOperatorType.Divide,
                        v2);

                    var typeref = new System.CodeDom.CodeTypeReferenceExpression("EngineNS.Color4");
                    //Lerp( Color4 color1, Color4 color2, float amount )
                    var methodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(
                        // targetObject that contains the method to invoke.
                        typeref,
                        // methodName indicates the method to invoke.
                        "Lerp",
                        // parameters array contains the parameters for the method.
                        new CodeExpression[] { color2obj, color1obj, v3 });

                    CodeAssignStatement result = new CodeAssignStatement(new CodeVariableReferenceExpression(strValueName), methodInvoke);
                    //  CodeBinaryOperatorExpression result = new CodeBinaryOperatorExpression(
                    //new CodeVariableReferenceExpression(strValueName),
                    // CodeBinaryOperatorType.Assign,
                    // methodInvoke);

                    var greaterthan = new CodeBinaryOperatorExpression(
                        value,
                        CodeBinaryOperatorType.GreaterThan,
                        new CodePrimitiveExpression(offset2));

                    var lessthan = new CodeBinaryOperatorExpression(
                        value,
                        CodeBinaryOperatorType.LessThan,
                        new CodePrimitiveExpression(offset1));

                    if (i == GradientDatas.Count - 1)
                    {
                        var first = new CodeBinaryOperatorExpression(
                            value,
                            CodeBinaryOperatorType.LessThanOrEqual,
                            new CodePrimitiveExpression(offset2));

                        codeStatementCollection.Add(new CodeConditionStatement(
                                                        first,
                                                        new CodeAssignStatement(new CodeVariableReferenceExpression(strValueName), color2obj)));
                    }

                    if (i == 1)
                    {
                        var last = new CodeBinaryOperatorExpression(
                            value,
                            CodeBinaryOperatorType.GreaterThanOrEqual,
                            new CodePrimitiveExpression(offset1));

                        codeStatementCollection.Add(new CodeConditionStatement(
                                                        last,
                                                        new CodeAssignStatement(new CodeVariableReferenceExpression(strValueName), color1obj)));
                    }
                    codeStatementCollection.Add(new CodeConditionStatement(
                                                    new CodeBinaryOperatorExpression(greaterthan, CodeBinaryOperatorType.BooleanAnd, lessthan),
                                                    result));
                }
            }
            else if (GradientDatas.Count == 1)
            {
                var color1 = GradientDatas[0].GradientColor;

                CodeObjectCreateExpression color1obj = new CodeObjectCreateExpression("EngineNS.Color4", new CodeExpression[] { });
                color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Alpha));
                color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Red));
                color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Green));
                color1obj.Parameters.Add(new CodePrimitiveExpression(color1.Blue));

                codeStatementCollection.Add(new CodeAssignStatement(new CodeVariableReferenceExpression(strValueName), color1obj));
            }
        }
示例#17
0
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            /*生成代码
             * EngineNS.Graphics.Mesh.Animation.CGfxAnimationSequence batmanidle = new EngineNS.Graphics.Mesh.Animation.CGfxAnimationSequence();
             * EngineNS.RName animName;
             * animName = EngineNS.RName.GetRName("titandemo/character/batman/animation/[email protected]");
             * batmanidle.Init(animName);
             * batmanidle.AnimationPose = animPose;
             * state.AddTickComponent(batmanidle);
             * batmanidle.Notifies[0].OnNotify += this.Anim_Notify_Walk;
             * return true;
             */
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var validName = StringRegex.GetValidName(NodeName);

            System.CodeDom.CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.AnimNode.AnimationClip)), validName, new CodeObjectCreateExpression(new CodeTypeReference(typeof(EngineNS.Bricks.Animation.AnimNode.AnimationClip))));
            codeStatementCollection.Add(st);

            var calcMethod = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeSnippetExpression("EngineNS.RName"), "GetRName", new CodePrimitiveExpression(RNameNodeName.Name));
            CodeAssignStatement nodeNameAssign = new CodeAssignStatement();

            CodeVariableDeclarationStatement rNameSt = new CodeVariableDeclarationStatement(new CodeTypeReference(typeof(EngineNS.RName)), "animName");

            nodeNameAssign.Left  = new CodeVariableReferenceExpression("animName");
            nodeNameAssign.Right = calcMethod;

            codeStatementCollection.Add(rNameSt);
            codeStatementCollection.Add(nodeNameAssign);

            CodeVariableReferenceExpression animRef   = new CodeVariableReferenceExpression(validName);
            CodeMethodReferenceExpression   methodRef = new CodeMethodReferenceExpression(animRef, "Init");
            var methodInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(methodRef, new CodeExpression[] { new CodeVariableReferenceExpression("animName") });

            codeStatementCollection.Add(methodInvoke);
            var animCP = CSParam as AnimationAssetConstructionParams;
            CodeFieldReferenceExpression isLoopField = new CodeFieldReferenceExpression();

            isLoopField.FieldName    = "IsLoop";
            isLoopField.TargetObject = animRef;
            CodeAssignStatement isLoopAssign = new CodeAssignStatement();

            isLoopAssign.Left  = isLoopField;
            isLoopAssign.Right = new CodePrimitiveExpression((bool)mTemplateClassInstance.GetType().GetProperty("IsLoop").GetValue(mTemplateClassInstance));
            codeStatementCollection.Add(isLoopAssign);


            CodeFieldReferenceExpression animPoseField = new CodeFieldReferenceExpression();

            animPoseField.FieldName    = "AnimationPoseProxy";
            animPoseField.TargetObject = animRef;

            CodeAssignStatement animPoseAssign = new CodeAssignStatement();

            animPoseAssign.Left  = animPoseField;
            animPoseAssign.Right = context.AnimAssetAnimPoseProxyReferenceExpression;
            codeStatementCollection.Add(animPoseAssign);

            CodeMethodReferenceExpression addAnimTickComponentRef = new CodeMethodReferenceExpression(context.AnimAssetTickHostReferenceExpression, "AddTickComponent");
            var addAnimTickComponentInvoke = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(addAnimTickComponentRef, new CodeExpression[] { animRef });

            codeStatementCollection.Add(addAnimTickComponentInvoke);

            var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(RNameNodeName.Address + ".rinfo", null);

            var animationInfo = info as EditorCommon.ResourceInfos.AnimationClipResourceInfo;

            animCP.Notifies.Clear();
            foreach (var pair in animationInfo.NotifyTrackMap)
            {
                animCP.Notifies.Add(pair.NotifyName);
            }
            for (int i = 0; i < Notifies.Count; ++i)
            {
                var notify          = Notifies[i];
                var validNotifyName = StringRegex.GetValidName(notify);
                validNotifyName = "Anim_Notify_" + validNotifyName;
                if (hasTheNotifyMethod(codeClass, validNotifyName))
                {
                    var attachNotifyEventExp = new CodeGenerateSystem.CodeDom.CodeMethodInvokeExpression(new CodeMethodReferenceExpression(animRef, "AttachNotifyEvent"), new CodeExpression[] { new CodePrimitiveExpression(i), new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName) });
                    //CodeArrayIndexerExpression arrayIndex = new CodeArrayIndexerExpression(new CodeFieldReferenceExpression(animRef, "Notifies"), new CodePrimitiveExpression(i));
                    //CodeAttachEventStatement attachEvent = new CodeAttachEventStatement(arrayIndex, "OnNotify", new CodeMethodReferenceExpression(new CodeThisReferenceExpression(), validNotifyName));
                    codeStatementCollection.Add(attachNotifyEventExp);
                }
            }
        }