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); } }
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); }
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); }
/* * 根据路径获取依赖 */ 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); }
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); }
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); } } }