/// <summary>将该节点及以下所有子节点数据转换为一维的序列化数据并缓存进指定的Dictionary</summary> /// <param name="self"></param> /// <param name="parentID"></param> /// <param name="dicSerializeData"></param> public static void StatisticsItemsSerializeDataAtNodesData(this UITreeItemNode self, string parentID, ref Dictionary <string, UITreeItemSerlizeData> dicSerializeData) { if (self == null) { return; } if (dicSerializeData == null) { dicSerializeData = new Dictionary <string, UITreeItemSerlizeData>(); } StringBuilder sbTemp = CreateNodeID(self, parentID); self.m_selfID = sbTemp.ToString(); //生成自身节点并缓存 if (!dicSerializeData.ContainsKey(self.m_selfID)) { UITreeItemSerlizeData data = new UITreeItemSerlizeData(self); dicSerializeData.Add(sbTemp.ToString(), data); } //递归处理子节点 if (self.HavChild()) { for (int i = 0; i < self.m_children.Count; i++) { StatisticsItemsSerializeDataAtNodesData(self.m_children[i], sbTemp.ToString(), ref dicSerializeData); } } }
public UITreeItemSerlizeData(UITreeItemNode node) { if (node != null) { m_data = node.m_data; //处理ID m_selfID = node.m_selfID; if (node.m_parent != null) { m_parentID = node.m_parent.m_selfID; } if (node.HavChild()) { m_childrenID = new List <string>(); for (int i = 0; i < node.m_children.Count; i++) { if (node.m_children[i] != null) { //如果子节点的ID尚未生成,提前生成 if (string.IsNullOrEmpty(node.m_children[i].m_selfID)) { node.m_children[i].m_selfID = node.m_children[i].CreateNodeID(m_selfID).ToString(); //CreateNodeID(node.m_children[i], m_selfID); } m_childrenID.Add(node.m_children[i].m_selfID); } } } } }
/// <summary>将节点下的子节点的Index初始化,这样在编辑器就不用在输入节点的Index了</summary> /// <param name="self"></param> public static void InitNodeChildrenIndexAndSetParent(this UITreeItemNode self) { if (self == null || !self.HavChild()) { return; } for (int i = 0; i < self.m_children.Count; i++) { self.m_children[i].m_data.m_index = i; InitNodeChildrenIndexAndSetParent(self.m_children[i]); self.m_children[i].m_parent = self; } }
//随机出一个节点 UITreeItemNode RandOneNode(List <UITreeItemNode> nodes, int randChildPower) { if (nodes == null || nodes.Count <= 0) { return(null); } UITreeItemNode rootNode = nodes[Random.Range(0, nodes.Count)]; UITreeItemNode tempNode = rootNode; while (tempNode.HavChild()) { if (Random.Range(0, 100) < randChildPower) { tempNode = tempNode.m_children[Random.Range(0, tempNode.m_children.Count)]; break; } } return(tempNode); }
public static void InitNodeIndex(this UITreeItemNode self, ref int indexHor, ref int indexVer, bool bInitChildrenAlso = true) { if (self == null) { //TODO return; } self.m_indexHor = indexHor; self.m_indexVer = indexVer; indexVer++; //递归处理子节点 if (!bInitChildrenAlso || !self.HavChild() || self.m_data.m_openState != UITreeCellOpenState.Open) { return; } indexHor++; for (int i = 0; i < self.m_children.Count; i++) { self.m_children[i].InitNodeIndex(ref indexHor, ref indexVer); } }
public static void InitNode(this UITreeItemNode self, UITreeRootCtrl rootCtrl, bool bInitChildrenAlso = true) { if (self == null || rootCtrl == null) { //ERROR NZQLA.Log.LogAtUnityEditorError("NULL"); return; } self.ReadyItemCtrl(); //TEMP self.m_ctrl.OnNodesFoldOrUnFoldHandler -= rootCtrl.OnNodesFoldOrUnFold; self.m_ctrl.OnNodesFoldOrUnFoldHandler += rootCtrl.OnNodesFoldOrUnFold; self.m_ctrl.Init(rootCtrl); //处理子节点(隐藏节点不考虑) if (self.HavChild() && bInitChildrenAlso && self.m_data.m_openState == UITreeCellOpenState.Open) { for (int i = 0; i < self.m_children.Count; i++) { self.m_children[i].InitNode(rootCtrl, bInitChildrenAlso); } } }