async System.Threading.Tasks.Task OpenGraph()
        {
            var param       = CSParam as ParticleShapeConeControlConstructionParams;
            var assist      = this.HostNodesContainer.HostControl;
            var TitleString = HostNodesContainer.TitleString;

            if (string.IsNullOrEmpty(TitleString))
            {
                TitleString = "MainGraph";
            }
            var  title = TitleString + "/" + NodeName + ":" + this.Id.ToString();
            bool isCreated;
            var  data = new SubNodesContainerData()
            {
                ID    = Id,
                Title = title,
            };

            mLinkedNodesContainer = await assist.ShowSubNodesContainer(data);

            if (data.IsCreated)
            {
                //await InitializeLinkedNodesContainer();
            }
            mLinkedNodesContainer.HostNode = this;
            //mLinkedNodesContainer.OnFilterContextMenu = StateControl_FilterContextMenu;
        }
        async System.Threading.Tasks.Task InitializeLinkedNodesContainer()
        {
            var param  = CSParam as ParticleShapeConeControlConstructionParams;
            var assist = this.HostNodesContainer.HostControl as Macross.NodesControlAssist;

            if (mLinkedNodesContainer == null)
            {
                var TitleString = HostNodesContainer.TitleString;
                if (string.IsNullOrEmpty(HostNodesContainer.TitleString))
                {
                    TitleString = "MainGraph";
                }
                var title = TitleString + "/" + param.NodeName + ":" + this.Id.ToString();

                var data = new SubNodesContainerData()
                {
                    ID    = Id,
                    Title = title,
                };
                mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

                if (!data.IsCreated)
                {
                    return;
                }
            }
            // 读取graph
            var tempFile      = assist.HostControl.GetGraphFileName(assist.LinkedCategoryItemName);
            var linkXndHolder = await EngineNS.IO.XndHolder.LoadXND(tempFile, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);

            bool bLoaded = false;

            if (linkXndHolder != null)
            {
                var linkNode = linkXndHolder.Node.FindNode("SubLinks");
                var idStr    = Id.ToString();
                foreach (var node in linkNode.GetNodes())
                {
                    if (node.GetName() == idStr)
                    {
                        await mLinkedNodesContainer.Load(node);

                        bLoaded = true;
                        break;
                    }
                }
            }
            if (bLoaded)
            {
            }
            else
            {
                for (int i = 0; i < ParticleShapeTemplate.Length; i++)
                {
                    CreateParticleMethodCategory(ParticleShapeTemplate[i], 50, 100 * i + 50);
                }
            }
            mLinkedNodesContainer.HostNode = this;
        }
        async System.Threading.Tasks.Task InitializeLinkedNodesContainer()
        {
            var param  = CSParam as AnimStateTransitionControlConstructionParams;
            var assist = this.HostNodesContainer.HostControl;

            if (mLinkedNodesContainer == null)
            {
                var data = new SubNodesContainerData()
                {
                    ID    = Id,
                    Title = HostNodesContainer.TitleString + "/" + param.NodeName + ":" + this.Id.ToString(),
                };
                mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

                if (!data.IsCreated)
                {
                    return;
                }
            }
            // 读取graph
            var tempFile      = assist.GetGraphFileName(assist.LinkedCategoryItemName);
            var linkXndHolder = await EngineNS.IO.XndHolder.LoadXND(tempFile, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);

            bool bLoaded = false;

            if (linkXndHolder != null)
            {
                var linkNode = linkXndHolder.Node.FindNode("SubLinks");
                var idStr    = Id.ToString();
                foreach (var node in linkNode.GetNodes())
                {
                    if (node.GetName() == idStr)
                    {
                        await mLinkedNodesContainer.Load(node);

                        bLoaded = true;
                        break;
                    }
                }
            }
            if (bLoaded)
            {
            }
            else
            {
                var csParam = new FinalTransitionResultConstructionParams()
                {
                    CSType             = param.CSType,
                    NodeName           = "Result",
                    HostNodesContainer = mLinkedNodesContainer,
                    ConstructParam     = "",
                };
                var node = mLinkedNodesContainer.AddOrigionNode(typeof(FinalTransitionResultControl), csParam, 300, 0) as FinalTransitionResultControl;
                node.IsDeleteable = false;
            }
        }
        public override async System.Threading.Tasks.Task GCode_CodeDom_GenerateCode(CodeTypeDeclaration codeClass, CodeStatementCollection codeStatementCollection, LinkPinControl element, GenerateCodeContext_Method context)
        {
            if (mLinkedNodesContainer == null)
            {
                var assist   = this.HostNodesContainer.HostControl as Macross.NodesControlAssist;
                var tempFile = assist.HostControl.GetGraphFileName(assist.LinkedCategoryItemName);
                await assist.LoadSubLinks(tempFile);

                var data = new SubNodesContainerData()
                {
                    ID    = Id,
                    Title = HostNodesContainer.TitleString + "/" + this.NodeName + "_CustomCondition" + ":" + this.Id.ToString(),
                };
                mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

                if (data.IsCreated)
                {
                    CreateSubContainerDefaultNodes();
                }
            }
            foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList)
            {
                ctrl.ReInitForGenericCode();
            }
            foreach (var ctrl in mLinkedNodesContainer.CtrlNodeList)
            {
                if (ctrl is CodeDomNode.MethodCustom)
                {
                    await ctrl.GCode_CodeDom_GenerateCode(codeClass, null, context.ClassContext);
                }
            }
            Type nodeType = typeof(EngineNS.Bricks.AI.BehaviorTree.Decorator.ConditionFuncDecorator);
            CodeVariableDeclarationStatement stateVarDeclaration = new CodeVariableDeclarationStatement(nodeType, ValidName, new CodeObjectCreateExpression(new CodeTypeReference(nodeType)));

            codeStatementCollection.Add(stateVarDeclaration);

            var flowAssign = new CodeAssignStatement();

            flowAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "FlowControl");
            flowAssign.Right = new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(FlowControlType)), FlowControl.ToString());
            codeStatementCollection.Add(flowAssign);


            var inverseAssign = new CodeAssignStatement();

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

            var actionAssign = new CodeAssignStatement();

            actionAssign.Left  = new CodeFieldReferenceExpression(new CodeVariableReferenceExpression(ValidName), "Func");
            actionAssign.Right = new CodeVariableReferenceExpression("CustomCondition_" + ValidName);
            codeStatementCollection.Add(actionAssign);
        }
        async System.Threading.Tasks.Task OpenGraph()
        {
            var param  = CSParam as AnimStateTransitionControlConstructionParams;
            var assist = this.HostNodesContainer.HostControl;
            var data   = new SubNodesContainerData()
            {
                ID    = Id,
                Title = HostNodesContainer.TitleString + "/" + param.NodeName + ":" + this.Id.ToString(),
            };

            mLinkedNodesContainer = await assist.ShowSubNodesContainer(data);

            if (data.IsCreated)
            {
                await InitializeLinkedNodesContainer();
            }
            mLinkedNodesContainer.OnFilterContextMenu = TransitionGraphNodesControl_FilterContextMenu;
        }
        async System.Threading.Tasks.Task OpenCustomActionGraph()
        {
            var assist = this.HostNodesContainer.HostControl;
            var data   = new SubNodesContainerData()
            {
                ID    = Id,
                Title = HostNodesContainer.TitleString + "/" + this.NodeName + "_CustomCondition" + ":" + this.Id.ToString(),
            };

            mLinkedNodesContainer = await assist.ShowSubNodesContainer(data);

            if (data.IsCreated)
            {
                CreateSubContainerDefaultNodes();
            }
            mLinkedNodesContainer.HostNode            = this;
            mLinkedNodesContainer.OnFilterContextMenu = CustomCondition_FilterContextMenu;
            //mLinkedNodesContainer.OnCheckDropAvailable = CustomLAPoseGraphCheckDropAvailable;
        }
        async System.Threading.Tasks.Task <CodeGenerateSystem.Controls.NodesContainerControl> GetNodesContainer()
        {
            if (mLinkedNodesContainer == null)
            {
                var assist   = this.HostNodesContainer.HostControl as Macross.NodesControlAssist;
                var tempFile = assist.HostControl.GetGraphFileName(assist.LinkedCategoryItemName);
                await assist.LoadSubLinks(tempFile);

                var data = new SubNodesContainerData()
                {
                    ID    = Id,
                    Title = HostNodesContainer.TitleString + "/" + this.NodeName + "_Custom" + ":" + this.Id.ToString(),
                };
                mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

                if (data.IsCreated)
                {
                    CreateSubContainerDefaultNodes();
                }
            }
            return(mLinkedNodesContainer);
        }
Ejemplo n.º 8
0
        async System.Threading.Tasks.Task OpenGraph()
        {
            var param  = CSParam as ParticleSystemControlConstructionParams;
            var assist = this.HostNodesContainer.HostControl;

            if (string.IsNullOrEmpty(HostNodesContainer.TitleString))
            {
                HostNodesContainer.TitleString = "MainGraph";
            }

            var TitleString = HostNodesContainer.TitleString;

            var title = TitleString + "/" + NodeName + ":" + this.Id.ToString();
            var data  = new SubNodesContainerData()
            {
                ID    = Id,
                Title = title,
            };

            mLinkedNodesContainer = await assist.ShowSubNodesContainer(data);

            if (data.IsCreated)
            {
                await InitializeLinkedNodesContainer();
            }
            else
            {
                //加载变量 方法 category items
                foreach (var ctr in mLinkedNodesContainer.CtrlNodeList)
                {
                    //ctr.LinkedNodesContainer
                }
            }
            mLinkedNodesContainer.HostNode = this;
            //mLinkedNodesContainer.OnFilterContextMenu = StateControl_FilterContextMenu;
        }
        async System.Threading.Tasks.Task InitializeLinkedNodesContainer()
        {
            var param  = CSParam as AnimStateMachineConstructionParams;
            var assist = this.HostNodesContainer.HostControl as Macross.NodesControlAssist;

            if (mLinkedNodesContainer == null)
            {
                var data = new SubNodesContainerData()
                {
                    ID    = Id,
                    Title = HostNodesContainer.TitleString + "/" + param.NodeName + ":" + this.Id.ToString(),
                };
                mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

                if (!data.IsCreated)
                {
                    return;
                }
            }
            // 读取graph
            var tempFile      = assist.HostControl.GetGraphFileName(assist.LinkedCategoryItemName);
            var linkXndHolder = await EngineNS.IO.XndHolder.LoadXND(tempFile, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);

            bool bLoaded = false;

            if (linkXndHolder != null)
            {
                var linkNode = linkXndHolder.Node.FindNode("SubLinks");
                var idStr    = Id.ToString();
                foreach (var node in linkNode.GetNodes())
                {
                    if (node.GetName() == idStr)
                    {
                        await mLinkedNodesContainer.Load(node);

                        bLoaded = true;
                        break;
                    }
                }
            }
            if (bLoaded)
            {
            }
            else
            {
                var csParam = new CodeDomNode.Animation.StateEntryControlConstructionParams()
                {
                    CSType             = param.CSType,
                    HostNodesContainer = mLinkedNodesContainer,
                    ConstructParam     = "",
                    NodeName           = "Entry"
                };
                var node = mLinkedNodesContainer.AddOrigionNode(typeof(CodeDomNode.Animation.StateEntryControl), csParam, 0, 0) as CodeDomNode.Animation.StateEntryControl;
                node.IsDeleteable = false;

                //var retCSParam = new CodeDomNode.ReturnCustom.ReturnCustomConstructParam()
                //{
                //    CSType = param.CSType,
                //    HostNodesContainer = mLinkedNodesContainer,
                //    ConstructParam = "",
                //};
                //var retNode = mLinkedNodesContainer.AddOrigionNode(typeof(CodeDomNode.ReturnCustom), retCSParam, 300, 0) as CodeDomNode.ReturnCustom;
                //retNode.IsDeleteable = false;
                //retNode.ShowProperty = false;
            }
        }
        //初始化每个结点类中的元素
        public async System.Threading.Tasks.Task InitGraph()
        {
            if (this.HostNodesContainer == null || mLinkedNodesContainer != null)
            {
                return;
            }

            if (NeedInitGrapth == false)
            {
                return;
            }

            NeedInitGrapth = false;

            var assist = this.HostNodesContainer.HostControl;

            if (string.IsNullOrEmpty(HostNodesContainer.TitleString))
            {
                HostNodesContainer.TitleString = "MainGraph";
            }

            var TitleString = HostNodesContainer.TitleString;

            var title = TitleString + "/" + NodeName + ":" + this.Id.ToString();

            var data = new SubNodesContainerData()
            {
                ID    = Id,
                Title = title,
            };

            mLinkedNodesContainer = await assist.GetSubNodesContainer(data);

            //TODO..
            Macross.NodesControlAssist NodesControlAssist = mLinkedNodesContainer.HostControl as Macross.NodesControlAssist;
            var MacrossOpPanel = NodesControlAssist.HostControl.MacrossOpPanel;

            var names = new string[] { MacrossPanelBase.GraphCategoryName, MacrossPanelBase.FunctionCategoryName, MacrossPanelBase.VariableCategoryName, MacrossPanelBase.AttributeCategoryName };

            var csparam = CSParam as StructNodeControlConstructionParams;

            csparam.CategoryDic = new Dictionary <string, Category>();
            foreach (var name in names)
            {
                var category1 = new Category(MacrossOpPanel);
                category1.CategoryName = name;
                csparam.CategoryDic.Add(name, category1);
                //categoryPanel.Children.Add(category);
            }
            foreach (var category1 in csparam.CategoryDic)
            {
                category1.Value.OnSelectedItemChanged = (categoryName) =>
                {
                    foreach (var cName in names)
                    {
                        if (cName == categoryName)
                        {
                            continue;
                        }

                        Category ctg;
                        if (csparam.CategoryDic.TryGetValue(cName, out ctg))
                        {
                            ctg.UnSelectAllItems();
                        }
                    }
                };
            }

            if (data.IsCreated)
            {
                await InitializeLinkedNodesContainer();
            }
            mLinkedNodesContainer.HostNode = this;

            //ParticleDataSaveLoad.ResetNodeConrol(NeedResetLoadValue, mLinkedNodesContainer, csparam);
            EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, this);
        }