IEnumerator CreateDepParent(AssetTreeModel <DependencyTreeData> datamodel, AssetTreeModel <AssetTreeData> treemodel, string filepath, int parentId) { var dependonlist = treemodel.GetDependParents(filepath); foreach (var element in dependonlist) { DependencyTreeData subdata = new DependencyTreeData(); Convert(ref subdata, element); datamodel.Add(ref subdata); datamodel.AddChild(parentId, subdata.Id); _progress++; if (_progress % AssetWindowConfig.ParseStep == 0) { #if !UNITY_EDITOR_OSX yield return(DisplayProgressBar("Dependency-Parse", "Parse Dependency for :" + element.FilePath, 0)); #endif } } }
IEnumerator ParseAssetBundle(AssetTreeModel <AssetTreeData> dataModel, Dictionary <string, string[]> assetbundleDictionary, int total) { //create root AssetTreeData rootData = new AssetTreeData(); rootData.Id = AssetTreeManager.mIns.GetUniqueId(); dataModel.Root = rootData; dataModel.Add(ref rootData); //Editor Ui int progress = 0; float totalprogress = total + 2; yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Start Parseing", 0f)); foreach (var assetbundleinfo in assetbundleDictionary) { var assetbundlename = assetbundleinfo.Key; var assetpaths = assetbundleinfo.Value; if (assetpaths.Length > 0) { AssetTreeData folderData = CreateBaseAssetBundle(assetpaths, assetbundlename, dataModel); folderData.IsAssetBundleViewData = true; foreach (var assetpath in assetpaths) { CreateSubAssetBundle(dataModel, folderData.Id, assetpath, assetbundlename); //Editor Ui progress++; if (progress % AssetWindowConfig.ParseStep == 0) { yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Parseing " + assetpath, progress / totalprogress)); } } } } yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Set Dependency", (progress + 1) / totalprogress)); List <AssetTreeData> nonamelist = new List <AssetTreeData>(); Stack <AssetTreeData> itemStack = StackPool <AssetTreeData> .Get(); var allTreeDatas = dataModel.GetAllItems(); //set dependency references for (int i = 0; i < allTreeDatas.Count; i++) { var info = allTreeDatas[i]; itemStack.Push(info); //SetAssetDependRef(ref info,dataModel,nonamelist); } ListPool <AssetTreeData> .Release(allTreeDatas); yield return(SetAssetDependRef(itemStack, dataModel, nonamelist)); StackPool <AssetTreeData> .Release(itemStack); yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Assigning NoAssetName", 1f)); for (int i = 0; i < nonamelist.Count; i++) { var nonameitem = nonamelist[i]; var deplist = dataModel.GetDependParents(nonameitem.FilePath); for (int j = 0; j < deplist.Count; j++) { var dep = deplist[j]; if (j == 0) { dataModel.AddChild(dep.Id, nonameitem.Id); } else { nonameitem.Id = AssetTreeManager.mIns.GetUniqueId(); dataModel.Add(ref nonameitem); //dataModel.AddViewData(ref nonameitem); dataModel.AddChild(dep.Id, nonameitem.Id); } } } yield return(null); EditorUtility.ClearProgressBar(); }
public bool CellGui(TreeViewItem item, ref AssetRowGuiArgs args) { var assetitem = item as AssetTreeItem <DependencyTreeData>; if (assetitem != null) { var data = assetitem.GetData(); var runtimeInfo = data.EditorInfo.RuntimeInfo; bool isroot = item.depth == 0; var topmenutype = (TopMenu)args.Column; if (topmenutype == TopMenu.Name) { return(false); } else if (topmenutype == TopMenu.ResType) { GUI.Label(args.CellRect, GetResTypeContent(runtimeInfo.AssetResType)); } else if (topmenutype == TopMenu.Size)//size { long size = AssetBundleEditorHelper.GetAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.FileSize)//file size { long size = AssetBundleEditorHelper.GetFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfSize)//size { long size = AssetBundleEditorHelper.GetSelfAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfFileSize)//file size { long size = AssetBundleEditorHelper.GetSelfFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.BeDependOn) { if (isroot) { var list = _model.GetDependParents(runtimeInfo.UnityPath); GUI.skin.label.richText = true; var info = AssetBundleEditorHelper.GetColorText("be depond on count :{0}", Color.grey, list.Count.ToString()); if (!string.IsNullOrEmpty(data.EditorInfo.RuntimeInfo.AssetBundleName)) { info += AssetBundleEditorHelper.GetColorText(" AssetBundle Name :{0},It should be Load {0} first", Color.yellow, data.EditorInfo.RuntimeInfo.AssetBundleName); } else { info += AssetBundleEditorHelper.GetColorText(" it's an noassetbundlename resource,it will pack into this assetbundle alonely", Color.white); } GUI.Label(args.CellRect, new GUIContent(info)); GUI.skin.label.richText = false; } } return(true); } else { return(false); } }
//List<AssetTreeItem<AssetTreeData>g> GetSelectItems() //{ // var selects = _treeView.GetSelection(); // List<AssetTreeItem<AssetTreeData>> list = ListPool<AssetTreeItem<AssetTreeData>>.Get(); // foreach (var id in selects) // { // for (int i = 0; i < _treeView.GetRows().Count; i++) // { // var item = _treeView.GetRows()[i]; // if (item.id == id) // { // list.Add(item as AssetTreeItem<AssetTreeData>); // break; // } // } // } // return list; //} public bool CellGui(TreeViewItem item, ref AssetRowGuiArgs args) { var assetitem = item as AssetTreeItem <AssetTreeData>; if (assetitem != null) { var data = assetitem.GetData(); var runtimeInfo = data.EditorInfo.RuntimeInfo; bool isroot = item.depth == 0; var topmenutype = (TopMenu)args.Column; if (topmenutype == TopMenu.AssetBundle) { //GUI.Label(args.CellRect, new GUIContent(item.displayName, item.icon)); return(false); } else if (topmenutype == TopMenu.InAssetBundle) { if (!isroot) { bool isIn = !string.IsNullOrEmpty(runtimeInfo.AssetBundleName) && item.depth <= 1; bool value = GUI.Toggle(args.CellRect, isIn, ""); if (isIn != value) { if (value) { if (item.parent != null && item.parent.parent != null) { AssetImporter importer = AssetImporter.GetAtPath(runtimeInfo.UnityPath); if (importer != null) { importer.assetBundleName = item.parent.parent.displayName; importer.SaveAndReimport(); } EditorContexts.mIns.ForceModeChange(EditorContexts.mIns.Mode); } else { Debug.LogErrorFormat("{0} parent is Null", runtimeInfo.UnityPath); } } else { AssetImporter importer = AssetImporter.GetAtPath(runtimeInfo.UnityPath); if (importer != null) { importer.assetBundleName = ""; importer.SaveAndReimport(); } EditorContexts.mIns.ForceModeChange(EditorContexts.mIns.Mode); } } } } else if (topmenutype == TopMenu.ResType) // { if (!isroot) { var restype = data.EditorInfo.RuntimeInfo.AssetResType; EditorGUI.EnumPopup(args.CellRect, restype); } else { //EditorGUIUtility.FindTexture(AssetTreeManager.mIns.GetIconName("Folder")) GUI.Label(args.CellRect, new GUIContent("ab", "Asset Bundle")); } } else if (topmenutype == TopMenu.Size)//size { long size = AssetBundleEditorHelper.GetAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.FileSize)//file size { long size = AssetBundleEditorHelper.GetFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfSize)//size { long size = AssetBundleEditorHelper.GetSelfAssetSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.SelfFileSize)//file size { long size = AssetBundleEditorHelper.GetSelfFileSize(ref data, isroot, _model); GUI.Label(args.CellRect, AssetBundleEditorHelper.ConvertSize(size)); } else if (topmenutype == TopMenu.Dependency) //dependencies { if (!isroot) { if (runtimeInfo.DependenciesCnt == 0) { GUI.enabled = false; } if (GUI.Button(args.CellRect, new GUIContent(runtimeInfo.DependenciesCnt.ToString()))) { if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency || !_selectfile.Equals(runtimeInfo.UnityPath) || EditorContexts.mIns.GuiContext.SelectDepth != 0) { _selectfile = runtimeInfo.UnityPath; AssetTreeData selectData; if (_model.GetItem(runtimeInfo.UnityPath, out selectData)) { EditorContexts.mIns.SelectForDependencyData = selectData; } EditorContexts.mIns.GuiContext.SelectDepth = 0; if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency) { EditorContexts.mIns.Mode = AssetWindow.WindowMode.AssetDependency; } else { EditorContexts.mIns.ForceModeChange(AssetWindow.WindowMode.AssetDependency); } } else { EditorContexts.mIns.Mode = AssetWindow.WindowMode.Asset; } //_treeView.FrameItem(item.id); var selectedIDs = new List <int>(); selectedIDs.Add(item.id); _treeView.SetSelection(selectedIDs, TreeViewSelectionOptions.RevealAndFrame); } if (runtimeInfo.DependenciesCnt == 0) { GUI.enabled = true; } } } else if (topmenutype == TopMenu.BeDepend) { if (!isroot) { var list = _model.GetDependParents(runtimeInfo.UnityPath); if (list.Count == 0) { GUI.enabled = false; } if (GUI.Button(args.CellRect, list.Count.ToString())) { if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency || !_selectfile.Equals(runtimeInfo.UnityPath) || EditorContexts.mIns.GuiContext.SelectDepth != 1) { _selectfile = runtimeInfo.UnityPath; AssetTreeData selectData; if (_model.GetItem(runtimeInfo.UnityPath, out selectData)) { EditorContexts.mIns.SelectForDependencyData = selectData; } EditorContexts.mIns.GuiContext.SelectDepth = 1; if (EditorContexts.mIns.Mode != AssetWindow.WindowMode.AssetDependency) { EditorContexts.mIns.Mode = AssetWindow.WindowMode.AssetDependency; } else { EditorContexts.mIns.ForceModeChange(AssetWindow.WindowMode.AssetDependency); } } else { EditorContexts.mIns.Mode = AssetWindow.WindowMode.Asset; } //_treeView.FrameItem(item.id); var selectedIDs = new List <int>(); selectedIDs.Add(item.id); _treeView.SetSelection(selectedIDs, TreeViewSelectionOptions.RevealAndFrame); } GUI.enabled = true; ListPool <AssetTreeData> .Release(list); } } else if (topmenutype == TopMenu.Info) //info { GUI.skin.label.richText = true; if (!isroot) { string info = AssetBundleEditorHelper.GetColorText(" Path :{0}", Color.yellow, runtimeInfo.UnityPath); GUI.Label(args.CellRect, info); } else { string info = string.Format("Path:{0}", runtimeInfo.UnityPath); info += AssetBundleEditorHelper.GetColorText(" Hash :{0}", Color.grey, runtimeInfo.HashCode); info += AssetBundleEditorHelper.GetColorText(" Crc :{0}", Color.white, runtimeInfo.Crc); if (HasNoAssetBundleName(ref data)) { GUI.Label(args.CellRect, new GUIContent(info, AssetTreeManager.mIns.GetEditorTexture("warning"))); } else { GUI.Label(args.CellRect, info); } } GUI.skin.label.richText = false; } return(true); } return(false); }