Пример #1
0
 // The first layer of the tree must have been manually filled out
 // for this to work.
 private void FillOutTree(List <List <TreeNode <MapTreeItem> > > treeLayers)
 {
     foreach (List <TreeNode <MapTreeItem> > layer in treeLayers)
     {
         foreach (TreeNode <MapTreeItem> parentNode in layer)
         {
             for (int i = 0; i < parentNode.GetNumChildren(); i++)
             {
                 MapTreeItem childItem = parentNode.GetChild(i).mItem;
                 // Create the map node's branch list
                 childItem.mTreeBranches = new List <GameObject>();
                 // Put object into its parent's twig.
                 childItem.mTreeTwig = parentNode.mItem.mChildLayerTreeNode.mObject;
                 childItem.mTreeUIItem.transform.SetParent(childItem.mTreeTwig.transform, false);
                 // Start moving back up the layer tree, assigning the helper objects of the map node.
                 LayerTreeNode layerTreeNodeParent = parentNode.mItem.mChildLayerTreeNode.mParent;
                 while (layerTreeNodeParent.mParent == null)
                 {
                     childItem.mTreeBranches.Add(layerTreeNodeParent.mObject);
                     layerTreeNodeParent = layerTreeNodeParent.mParent;
                 }
                 // The last object in the layer tree (which has no parent)
                 // is the layer object itself.
                 childItem.mTreeLayer = layerTreeNodeParent.mObject;
             }
         }
     }
 }
Пример #2
0
        private TreeNode <MapTreeItem> BuildTree(TreeNode <MapItem> mapItemTreeNode, TreeNode <MapTreeItem> currentParent,
                                                 Dictionary <TreeNode <MapItem>, TreeNode <MapTreeItem> > nodesAlreadyUsed)
        {
            TreeNode <MapTreeItem> rootNode = null;

            if (nodesAlreadyUsed == null || (nodesAlreadyUsed != null && !nodesAlreadyUsed.ContainsKey(mapItemTreeNode)))
            {
                MapTreeItem newMapTreeItem = new MapTreeItem();
                newMapTreeItem.mMapItem = mapItemTreeNode.mItem;
                TreeNode <MapTreeItem> newMapTreeItemNode = null;
                if (currentParent != null)
                {
                    newMapTreeItemNode = currentParent.AddChild(newMapTreeItem);
                }
                else
                {
                    newMapTreeItemNode = new TreeNode <MapTreeItem>(newMapTreeItem);
                }
                rootNode = newMapTreeItemNode;
                newMapTreeItem.mTreeUIItem = CreateMapUIItem(this, MapTreeItemPrefab, newMapTreeItemNode, mapItemTreeNode.mItem.mName);

                if (nodesAlreadyUsed == null)
                {
                    nodesAlreadyUsed = new Dictionary <TreeNode <MapItem>, TreeNode <MapTreeItem> >();
                }
                nodesAlreadyUsed.Add(mapItemTreeNode, newMapTreeItemNode);

                for (int i = 0; i < mapItemTreeNode.GetNumChildren(); i++)
                {
                    BuildTree(mapItemTreeNode.GetChild(i), newMapTreeItemNode, nodesAlreadyUsed);
                }
            }
            else if (nodesAlreadyUsed != null && nodesAlreadyUsed.ContainsKey(mapItemTreeNode))
            {
                Debug.Assert(currentParent != null);
                currentParent.LinkChild(nodesAlreadyUsed[mapItemTreeNode]);
            }
            return(rootNode);
        }