Пример #1
0
    /// <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);
            }
        }
    }
Пример #2
0
    /// <summary>将序列化元素数据转换为链表式的结构</summary>
    /// <param name=""></param>
    /// <returns></returns>
    public static List <UITreeItemNode> DeSerializeUtemsFromSerializeData(Dictionary <string, UITreeItemSerlizeData> dicItemsSeralizeData)
    {
        if (dicItemsSeralizeData.isNull())
        {
            Log.LogAtUnityEditorWarning("Null");
            return(null);
        }

        //List<string> rootNodesIDList = new List<string>();
        List <UITreeItemNode> rootNodesList = new List <UITreeItemNode>();

        //先依据序列化数据一一生成Node数据//并统计出Root节点
        Dictionary <string, UITreeItemNode> dicNodes = new Dictionary <string, UITreeItemNode>();
        var dicItemsSeralizeDataIE = dicItemsSeralizeData.GetEnumerator();

        while (dicItemsSeralizeDataIE.MoveNext())
        {
            if (dicItemsSeralizeDataIE.Current.Value != null)
            {
                UITreeItemNode tempNode = new UITreeItemNode()
                {
                    m_data = dicItemsSeralizeDataIE.Current.Value.m_data
                };
                dicNodes.Add(dicItemsSeralizeDataIE.Current.Key, tempNode);
                tempNode.m_selfID = dicItemsSeralizeDataIE.Current.Value.m_selfID;


                if (dicItemsSeralizeDataIE.Current.Value.m_data.m_isRoot || string.IsNullOrEmpty(dicItemsSeralizeDataIE.Current.Value.m_parentID))
                {
                    //rootNodesIDList.Add(dicItemsSeralizeDataIE.Current.Key);
                    rootNodesList.Add(tempNode);
                }
            }
        }

        //处理父子节点关系
        var dicNodesIE = dicNodes.GetEnumerator();

        while (dicNodesIE.MoveNext())
        {
            if (dicNodesIE.Current.Value != null)
            {
                UITreeItemNode        tempNode         = dicNodes[dicNodesIE.Current.Key];
                UITreeItemSerlizeData tempSeralizeData = dicItemsSeralizeData[dicNodesIE.Current.Key];
                //绑定父节点
                if (!string.IsNullOrEmpty(tempSeralizeData.m_parentID))
                {
                    //安全容错
                    tempNode.m_parent = dicNodes[tempSeralizeData.m_parentID];
                }

                //绑定子节点
                if (!tempSeralizeData.m_childrenID.isNull())
                {
                    List <UITreeItemNode> tempChildernNodes = new List <UITreeItemNode>();
                    for (int i = 0; i < tempSeralizeData.m_childrenID.Count; i++)
                    {
                        //UITreeItemNode tempNode1 = null;
                        tempChildernNodes.Add(dicNodes[tempSeralizeData.m_childrenID[i]]);
                    }
                    tempNode.m_children = tempChildernNodes;
                }
            }
        }

        return(rootNodesList);
    }