Beispiel #1
0
        private void Replace(BeTreeNode arg1, Type arg2)
        {
            RunTimeNodeData data = _datas[arg1.SrcTreeID];

            data.Replace(arg1.NodeID, arg2);
            SetNodeShowValue(data.ID);
        }
Beispiel #2
0
        private void CutAndCopy(BeTreeNode arg1, BeTreeNode arg2)
        {
            RunTimeNodeData data1 = _datas[arg1.SrcTreeID];
            RunTimeNodeData data2 = _datas[arg2.SrcTreeID];

            NodeParam root = data1.GetNodeParam(arg1.NodeID);
            NodeParam copy = data2.GetNodeParam(arg2.NodeID);

            if (!data1.CopyChild(root, copy))
            {
                return;
            }
            data2.DeleteNode(copy.NodeID);

            if (data1 == data2)
            {
                _id2Windows[data1.ID].Canvas.RefreshNodeParam(data1.Root);
                SetNodeShowValue(data1.ID);
            }
            else
            {
                _id2Windows[data1.ID].Canvas.RefreshNodeParam(data1.Root);
                _id2Windows[data2.ID].Canvas.RefreshNodeParam(data2.Root);
                SetNodeShowValue(data1.ID);
                SetNodeShowValue(data2.ID);
            }
        }
Beispiel #3
0
        private void RemoveNode(BeTreeNode node)
        {
            RunTimeNodeData data = _datas[node.SrcTreeID];

            data.DeleteNode(node.NodeID);
            _id2Windows[data.ID].Canvas.RefreshNodeParam(data.Root);
            SetNodeShowValue(data.ID);
        }
Beispiel #4
0
        private void AddChild(BeTreeNode rootNode, Type childType)
        {
            RunTimeNodeData data = _datas[rootNode.SrcTreeID];

            data.AddChild(rootNode.NodeID, childType);
            _id2Windows[data.ID].Canvas.RefreshNodeParam(data.Root);
            SetNodeShowValue(data.ID);
        }
Beispiel #5
0
        private void OnNodeClick(BeTreeNode node)
        {
            int             index = node.SrcTreeID;
            RunTimeNodeData data  = _datas[index];
            NodeParam       param = data.GetNodeParam(node.NodeID);

            _curOpenningCtrl.Canvas.ShowDetialPanel(param, data.GetParamOutput(param));
        }
Beispiel #6
0
 public void SetNodeShowValue(int id)
 {
     _id2Windows[id].Canvas.ForeachNode(node =>
     {
         int index            = node.SrcTreeID;
         RunTimeNodeData data = _datas[index];
         NodeParam param      = data[node.NodeID];
         node.NodeTypeSet(param);
     });
 }
Beispiel #7
0
        private void Insert(BeTreeNode src, BeTreeNode insert)
        {
            if (insert.SrcTreeID != src.SrcTreeID)
            {
                return;
            }
            RunTimeNodeData data = _datas[src.SrcTreeID];

            data.Insert(data.GetNodeParam(src.NodeID), data.GetNodeParam(insert.NodeID));
            _curOpenningCtrl.Canvas.RefreshNodeParam(data.Root);
            SetNodeShowValue(data.ID);
        }
Beispiel #8
0
        private void Save()
        {
            foreach (var pair in _datas)
            {
                string          path     = _paramsPath[pair.Value];
                bool            isClient = !path.Contains(".txt");
                RunTimeNodeData data     = pair.Value;

                GameObject go;
                GameObject repGo    = null;
                bool       saveType = data.Save(out go);
                if (!saveType)
                {
                    continue;
                }

                GameObject src = new GameObject(pair.Value.Root.NodeDesc);

                if (isClient)
                {
                    repGo = AssetDatabase.LoadAssetAtPath <GameObject>(path);
                    src   = PrefabUtility.ConnectGameObjectToPrefab(src, repGo);
                    UnityEngine.Object.DestroyImmediate(src.transform.GetChild(0).gameObject, true);
                }
                go.transform.SetParent(src.transform);

                var tree = src.GetComponent <BehaviorTreeConfig>() ?? src.AddComponent <BehaviorTreeConfig>();
                tree.RootNodeConfig = go.GetComponent <BehaviorNodeConfig>();

                if (path.Contains(".txt"))
                {
                    BehaviourTreeJsonHelper.WriteToJson(tree, path);
                }
                else
                {
                    //src = PrefabUtility.ConnectGameObjectToPrefab(src, repGo);
                    PrefabUtility.ReplacePrefab(src, repGo, ReplacePrefabOptions.ConnectToPrefab);
                    EditorUtility.SetDirty(repGo);
                    //AssetDatabase.SaveAssets();
                }
                UnityEngine.Object.DestroyImmediate(src);
                BehaviourTreeDebugPanel.Log(_curOpenningCtrl, "保存成功");
            }
        }
Beispiel #9
0
        public void InitBeTree(NodeProto nodeProto, string path, int flag)
        {
            if (string.IsNullOrEmpty(_curOpenningCtrl.name))
            {
                _curOpenningCtrl.name = path;
            }
            bool isClient = path.EndsWith("prefab");

            int             id   = flag;
            RunTimeNodeData data = new RunTimeNodeData();

            data.Init(nodeProto, id, isClient, flag);
            _curOpenningCtrl.Canvas.InitBehaviourTree(data.Root);
            _curOpenningCtrl.IncludeIds.Add(id);
            _id2Windows.Add(id, _curOpenningCtrl);
            _datas.Add(id, data);
            _paramsPath.Add(data, path);

            SetNodeShowValue(flag);
        }
Beispiel #10
0
        private void SaveToJson()
        {
            foreach (var pair in _datas)
            {
                string path = _paramsPath[pair.Value];

                RunTimeNodeData data = pair.Value;
                GameObject      go;
                if (!data.Save(out go))
                {
                    continue;
                }

                GameObject src = new GameObject(pair.Value.Root.NodeDesc);
                go.transform.SetParent(src.transform);

                var tree = src.AddComponent <BehaviorTreeConfig>();
                tree.RootNodeConfig = go.GetComponent <BehaviorNodeConfig>();
                BehaviourTreeJsonHelper.WriteToJson(tree, path);

                UnityEngine.Object.DestroyImmediate(src);
            }
        }
Beispiel #11
0
        private void CanvasRightClick(BeTreeNode e, bool isAdd)
        {
            RunTimeNodeData  data         = _datas[e.SrcTreeID];
            List <NodeParam> allParam     = NodeInfoManager.GetAllParam(data.IsClient);
            NodeParam        srcNodeParam = data[e.NodeID];
            NodeClassifyType classfiy     = srcNodeParam.NodeClassType;
            List <NodeParam> ps           = new List <NodeParam>();

            foreach (NodeParam param in allParam)
            {
                switch (classfiy)
                {
                case NodeClassifyType.Action:
                case NodeClassifyType.Condition:
                case NodeClassifyType.DataTransform:
                case NodeClassifyType.Error:
                    if (!isAdd)
                    {
                        if (param.NodeClassType != NodeClassifyType.Root)
                        {
                            ps.Add(param);
                        }
                    }
                    break;

                case NodeClassifyType.Composite:
                case NodeClassifyType.Decorator:
                    if (!isAdd)
                    {
                        if (param.NodeClassType == NodeClassifyType.Decorator || param.NodeClassType == NodeClassifyType.Composite)
                        {
                            ps.Add(param);
                        }
                    }
                    else
                    {
                        if (param.NodeClassType != NodeClassifyType.Root)
                        {
                            ps.Add(param);
                        }
                    }
                    break;

                case NodeClassifyType.Root:
                    if (isAdd)
                    {
                        if (param.NodeClassType != NodeClassifyType.Root)
                        {
                            ps.Add(param);
                        }
                    }
                    else
                    {
                        if (param.NodeClassType == NodeClassifyType.Root)
                        {
                            ps.Add(param);
                        }
                    }
                    break;
                }
            }

            _curOpenningCtrl.Canvas.ShowAddNodePanel(e, ps.ToArray(), isAdd);
        }
Beispiel #12
0
        private void RecaluOutput(int treeID)
        {
            RunTimeNodeData data = _datas[treeID];

            data.InitNodeOutputAvailable();
        }
Beispiel #13
0
 public bool GetTreeWidthFlag(int flag, out RunTimeNodeData data)
 {
     return(_datas.TryGetValue(flag, out data));
 }