/// <summary> /// 得到这个节点,不会创建 /// </summary> /// <returns></returns> public HierarchyTreeNode GetNode(string[] hierarchyPath) { if (hierarchyPath == null || hierarchyPath.Length == 0) { throw new ArgumentException(); } //根节点的第一层里先搜索 HierarchyTreeNode curNode = root; //开始从第一个Node出发开始搜索 for (int i = 0; i < hierarchyPath.Length; i++) { if (!string.IsNullOrEmpty(hierarchyPath[i])) { string nodeName = hierarchyPath[i]; curNode = curNode.FindChild(nodeName); if (curNode == null) { return(null);//无法找到只能中断 } } } return(curNode); }
/// <summary> /// 递归得到所有的子节点 /// </summary> /// <returns></returns> public HierarchyTreeNode[] GetAllChild() { if (children == null) { return(null); } Queue <HierarchyTreeNode> result = new Queue <HierarchyTreeNode>(); Queue <HierarchyTreeNode> queue = new Queue <HierarchyTreeNode>();//BFS队列 for (int i = 0; i < children.Count; i++) { queue.Enqueue(children[i]); } while (queue.Count > 0) { HierarchyTreeNode front = queue.Dequeue(); result.Enqueue(front); if (front.children != null) { for (int i = 0; i < front.children.Count; i++) { queue.Enqueue(front.children[i]); } } } return(result.ToArray()); }
/// <summary> /// 移除一个节点 /// </summary> /// <param name="hierarchyPath"></param> public void RemoveNode(string[] hierarchyPath) { if (hierarchyPath == null || hierarchyPath.Length == 0) { throw new ArgumentException(); } HierarchyTreeNode node = GetNode(hierarchyPath); if (node != null) { node.parent.RemoveChild(node.name); } }
/// <summary> /// 移除一个节点 /// </summary> /// <param name="name"></param> public void RemoveChild(string name) { if (children == null) { return; } for (int i = 0; i < children.Count; i++) { if (children[i].name == name) { HierarchyTreeNode moveChild = children[i]; moveChild.Break(); children.RemoveAt(i); return; } } }
/// <summary> /// 是否是有效的(未断开) /// </summary> /// <returns></returns> public bool IsValid() { HierarchyTreeNode curNode = this; //迭代200层 for (int i = 0; i < 200; i++) { if (curNode == null) { return(false); } if (curNode.isSceneRoot()) { return(true); } curNode = curNode.parent; } return(false); }
/// <summary> /// 选中或添加一个节点 /// </summary> /// <param name="name"></param> /// <returns></returns> public HierarchyTreeNode GetOrCreateChild(string name) { if (children == null) { children = new List <HierarchyTreeNode>(); } for (int i = 0; i < children.Count; i++) { if (children[i].name == name) { return(children[i]); } } HierarchyTreeNode child = new HierarchyTreeNode(name); children.Add(child); child.parent = this; return(child); }
/// <summary> /// 得到这个节点在层级中的最终是否是活动的 /// </summary> /// <param name="node"></param> public void NodeActiveHierarchy(HierarchyTreeNode node) { }
/// <summary> /// 断开这节点 /// </summary> public void Break() { parent = null; children = null; }