MyTreeElement FindAndAddToParent(MyTreeElement _root, string[] _subContents, int _index, string _nodeID)
        {
            if (_root.children == null)
            {
                _root.AddChild(new MyTreeElement(_subContents[_index], _root.depth + 1, ++IDCounter, _nodeID));
            }

            foreach (var x in _root.children)
            {
                if (x.name == _subContents[_index])
                {
                    if (_index == _subContents.Length - 1)
                    {
                        return(x as MyTreeElement);
                    }

                    return(FindAndAddToParent(x as MyTreeElement, _subContents, _index + 1, _nodeID));
                }
            }
            var folder = new MyTreeElement(_subContents[_index], _root.depth + 1, ++IDCounter, _nodeID);

            _root.AddChild(folder);
            if (_index == _subContents.Length - 1)
            {
                return(null);
            }
            return(FindAndAddToParent(folder, _subContents, _index + 1, _nodeID));
        }
    static void AddChildrenRecursive(TreeElement element, int numChildren, bool force, int numTotalElements,
                                     ref int allowedDepth, List <MyTreeElement> treeElements)
    {
        if (element.depth >= allowedDepth)
        {
            allowedDepth = 0;
            return;
        }

        for (int i = 0; i < numChildren; ++i)
        {
            if (IDCounter > numTotalElements)
            {
                return;
            }

            var child = new MyTreeElement("Element " + IDCounter, element.depth + 1, ++IDCounter);
            treeElements.Add(child);

            if (!force && Random.value < probabilityOfBeingLeaf)
            {
                continue;
            }

            AddChildrenRecursive(child, Random.Range(minNumChildren, maxNumChildren), false, numTotalElements,
                                 ref allowedDepth, treeElements);
        }
    }
Example #3
0
    public void GetDependenciesForObject(MyTreeElement element, string assetPath, List <MyTreeElement> treeElements)
    {
        if (assetPath.Equals(""))
        {
            throw new System.Exception(assetPath + "\t不是可获取依赖资源");
        }

        var assetOb = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(assetPath);

        if (assetOb == null)
        {
            Debug.LogErrorFormat("Error  Path {0}", assetPath);
            return;
        }

        if (assetOb.GetType() == typeof(MonoScript))
        {
            return;
        }

        var guid = AssetDatabase.AssetPathToGUID(assetPath);


        var           extenName = Path.GetExtension(assetPath);
        MyTreeElement child     = new MyTreeElement(assetOb.name, element.depth + 1, CounterID++);


        var replacePath = assetPath.Replace('\\', '/');

        child.Init(assetOb, replacePath);
        treeElements.Add(child);
        GetObjectDepencies(child, child.path, treeElements);
    }
Example #4
0
    public void GetDependenciesForPath(MyTreeElement element, string path, List <MyTreeElement> treeElements)
    {
        var           localRelativePath = Snake.FileUtils.GetRelativePath(path);
        var           dir     = new DirectoryInfo(localRelativePath);
        MyTreeElement child   = new MyTreeElement(dir.Name, element.depth + 1, CounterID++);
        var           eObject = AssetDatabase.LoadAssetAtPath <UnityEngine.Object>(localRelativePath);

        child.Init(eObject, localRelativePath);
        treeElements.Add(child);
        var subPaths = Directory.GetDirectories(localRelativePath);

        foreach (var itemPath in subPaths)
        {
            GetDependenciesForPath(child, itemPath.Replace('\\', '/'), treeElements);
        }

        var allAssets = Snake.FileUtils.GetRelativePath(localRelativePath);
        var ret       = Directory.GetFiles(localRelativePath);

        Debug.Log(ret.Length);
        foreach (var assetPath in ret)
        {
            if (!assetPath.EndsWith(".meta"))
            {
                var relativePath = Snake.FileUtils.GetRelativePath(assetPath);
                GetDependenciesForObject(child, relativePath, treeElements);
            }
        }
    }
        public IList <MyTreeElement> GetData()
        {
            var treeElements = new List <MyTreeElement>();

            var root = new MyTreeElement("Root", -1, ++IDCounter, "root");

            treeElements.Add(root);
            //var child = new MyTreeElement("Element " + IDCounter, root.depth + 1, ++IDCounter);
            //treeElements.Add(child);


            foreach (Node node in NodeTypes.nodes.Keys)
            {
                string path = NodeTypes.nodes[node].adress;
                if (path.Contains("/"))
                {
                    // is inside a group
                    string[] subContents = path.Split('/');
                    string   folderPath  = subContents[0];
                    FindAndAddToParent(root, subContents, 0, node.GetID);
                }
                else
                {
                    var ele = new MyTreeElement(path, root.depth + 1, ++IDCounter, node.GetID);
                    treeElements.Add(ele);
                }
            }
            var sub = new MyTreeElement("Subroutines", 0, ++IDCounter, "folder");

            root.AddChild(sub);
            var subs = GetAtPath <NodeCanvas>("TextureWang/Subroutines");//Resources.LoadAll<NodeCanvas>(NodeEditor.editorPath + "Resources/Saves/");

            foreach (var x in subs)
            {
                var s = new MyTreeElement(x.name, sub.depth + 1, ++IDCounter, "");
                sub.AddChild(s);
                s.m_Canvas = x;
            }
            sub = new MyTreeElement("UserSubroutines", 0, ++IDCounter, "folder");
            root.AddChild(sub);
            subs = GetAtPath <NodeCanvas>("TextureWang/UserSubroutines");//Resources.LoadAll<NodeCanvas>(NodeEditor.editorPath + "Resources/Saves/");
            foreach (var x in subs)
            {
                var s = new MyTreeElement(x.name, sub.depth + 1, ++IDCounter, "");
                sub.AddChild(s);
                s.m_Canvas = x;
            }

            var res = new List <MyTreeElement>();

            TreeElementUtility.TreeToList(root, res);
            return(res);
        }
Example #6
0
    /*
     * 根据路径获取依赖
     */
    public List <MyTreeElement> GetForPath(string path)
    {
        var localRelativePath = Snake.FileUtils.GetRelativePath(path);

        // 初始化ID计数器
        CounterID = 0;
        // 初始化树的数据
        var treeElements = new List <MyTreeElement>();
        //初始化一个看不见的Root节点 depth 设置为-1 则不渲染这个节点
        var root = new MyTreeElement(localRelativePath, -1, CounterID);

        root.path = localRelativePath;
        treeElements.Add(root);

        GetDependenciesForPath(root, root.path, treeElements);
        return(treeElements);
    }
Example #7
0
    public static List <MyTreeElement> GenerateRandomTree(int numTotalElements)
    {
        int numRootChildren = numTotalElements / 4;

        IDCounter = 0;
        var treeElements = new List <MyTreeElement>(numTotalElements);

        var root = new MyTreeElement("Root", -1, IDCounter);

        treeElements.Add(root);
        for (int i = 0; i < numRootChildren; ++i)
        {
            int allowedDepth = 6;
            AddChildrenRecursive(root, Random.Range(minNumChildren, maxNumChildren), true, numTotalElements, ref allowedDepth, treeElements);
        }

        return(treeElements);
    }
Example #8
0
 public void GetObjectDepencies(MyTreeElement element, string assetPath, List <MyTreeElement> treeElements)
 {
     string[] depens = AssetDatabase.GetDependencies(assetPath);
     for (int i = 0; i < depens.Length; i++)
     {
         if (!depens[i].Equals(assetPath))
         {
             var           tempDepen  = AssetDatabase.GetDependencies(depens[i]);
             var           depenAsset = AssetDatabase.LoadAssetAtPath(depens[i], typeof(UnityEngine.Object));
             MyTreeElement child      = new MyTreeElement(depenAsset.name, element.depth + 1, CounterID++);
             if (depenAsset.GetType() != typeof(MonoScript))
             {
                 child.Init(depenAsset, depens[i]);
                 treeElements.Add(child);
                 GetObjectDepencies(element, depens[i], treeElements);
             }
         }
     }
 }
    void ToolBar()
    {
        using (new EditorGUILayout.HorizontalScope())
        {
            var style = "miniButton";
            if (GUILayout.Button("Expand All", style))
            {
                m_TreeView.ExpandAll();
            }

            if (GUILayout.Button("Collapse All", style))
            {
                m_TreeView.CollapseAll();
            }

            GUILayout.FlexibleSpace();

            if (GUILayout.Button("Add Item", style))
            {
                Undo.RecordObject(asset, "Add Item To Asset");

                // Add item as child of selection
                var         selection = m_TreeView.GetSelection();
                TreeElement parent    = (selection.Count == 1 ? m_TreeView.treeModel.Find(selection[0]) : null) ??
                                        m_TreeView.treeModel.root;
                int depth   = parent != null ? parent.depth + 1 : 0;
                int id      = m_TreeView.treeModel.GenerateUniqueID();
                var element = new MyTreeElement("Item " + id, depth, id);
                m_TreeView.treeModel.AddElement(element, parent, 0);

                // Select newly created element
                m_TreeView.SetSelection(new[] { id }, TreeViewSelectionOptions.RevealAndFrame);
            }

            if (GUILayout.Button("Remove Item", style))
            {
                Undo.RecordObject(asset, "Remove Item From Asset");
                var selection = m_TreeView.GetSelection();
                m_TreeView.treeModel.RemoveElements(selection);
            }
        }
    }