private void Replace(BeTreeNode arg1, Type arg2) { RunTimeNodeData data = _datas[arg1.SrcTreeID]; data.Replace(arg1.NodeID, arg2); SetNodeShowValue(data.ID); }
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); } }
private void RemoveNode(BeTreeNode node) { RunTimeNodeData data = _datas[node.SrcTreeID]; data.DeleteNode(node.NodeID); _id2Windows[data.ID].Canvas.RefreshNodeParam(data.Root); SetNodeShowValue(data.ID); }
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); }
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)); }
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); }); }
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); }
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, "保存成功"); } }
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); }
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); } }
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); }
private void RecaluOutput(int treeID) { RunTimeNodeData data = _datas[treeID]; data.InitNodeOutputAvailable(); }
public bool GetTreeWidthFlag(int flag, out RunTimeNodeData data) { return(_datas.TryGetValue(flag, out data)); }