123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- using UnityEditor;
- using UnityEngine;
- using System.Collections.Generic;
- using UnityEditor.IMGUI.Controls;
- namespace AssetBundleBrowser
- {
- internal class BundleDetailItem : TreeViewItem
- {
- internal BundleDetailItem(int id, int depth, string displayName, MessageType type) : base(id, depth, displayName)
- {
- MessageLevel = type;
- }
- internal MessageType MessageLevel
- { get; set; }
- }
- internal class BundleDetailList : TreeView
- {
- HashSet<AssetBundleModel.BundleDataInfo> m_Selecteditems;
- Rect m_TotalRect;
- const float k_DoubleIndent = 32f;
- const string k_SizeHeader = "Size: ";
- const string k_DependencyHeader = "Dependent On:";
- const string k_DependencyEmpty = k_DependencyHeader + " - None";
- const string k_MessageHeader = "Messages:";
- const string k_MessageEmpty = k_MessageHeader + " - None";
- internal BundleDetailList(TreeViewState state) : base(state)
- {
- m_Selecteditems = new HashSet<AssetBundleModel.BundleDataInfo>();
- showBorder = true;
- }
- internal void Update()
- {
- bool dirty = false;
- foreach (var bundle in m_Selecteditems)
- {
- dirty |= bundle.dirty;
- }
- if (dirty)
- {
- Reload();
- ExpandAll();
- }
- }
- protected override TreeViewItem BuildRoot()
- {
- var root = new TreeViewItem(-1, -1);
- root.children = new List<TreeViewItem>();
- if (m_Selecteditems != null)
- {
- foreach(var bundle in m_Selecteditems)
- {
- root.AddChild(AppendBundleToTree(bundle));
- }
- }
- return root;
- }
- protected override void RowGUI(RowGUIArgs args)
- {
- if ((args.item as BundleDetailItem) != null)
- {
- EditorGUI.HelpBox(
- new Rect(args.rowRect.x + k_DoubleIndent, args.rowRect.y, args.rowRect.width - k_DoubleIndent, args.rowRect.height),
- args.item.displayName,
- (args.item as BundleDetailItem).MessageLevel);
- }
- else
- {
- Color old = GUI.color;
- if (args.item.depth == 1 &&
- (args.item.displayName == k_MessageEmpty || args.item.displayName == k_DependencyEmpty))
- GUI.color = AssetBundleModel.Model.k_LightGrey;
- base.RowGUI(args);
- GUI.color = old;
- }
- }
- public override void OnGUI(Rect rect)
- {
- m_TotalRect = rect;
- base.OnGUI(rect);
- }
- protected override float GetCustomRowHeight(int row, TreeViewItem item)
- {
- if( (item as BundleDetailItem) != null)
- {
- float height = DefaultStyles.backgroundEven.CalcHeight(new GUIContent(item.displayName), m_TotalRect.width);
- return height + 3f;
- }
- return base.GetCustomRowHeight(row, item);
- }
- internal TreeViewItem AppendBundleToTree(AssetBundleModel.BundleDataInfo bundle)
- {
- var itemName = bundle.m_Name.fullNativeName;
- var bunRoot = new TreeViewItem(itemName.GetHashCode(), 0, itemName);
- var str = itemName + k_SizeHeader;
- var sz = new TreeViewItem(str.GetHashCode(), 1, k_SizeHeader + bundle.TotalSize());
- str = itemName + k_DependencyHeader;
- var dependency = new TreeViewItem(str.GetHashCode(), 1, k_DependencyEmpty);
- var depList = bundle.GetBundleDependencies();
- if(depList.Count > 0)
- {
- dependency.displayName = k_DependencyHeader;
- foreach (var dep in bundle.GetBundleDependencies())
- {
- str = itemName + dep;
- dependency.AddChild(new TreeViewItem(str.GetHashCode(), 2, dep));
- }
- }
- str = itemName + k_MessageHeader;
- var msg = new TreeViewItem(str.GetHashCode(), 1, k_MessageEmpty);
- if (bundle.HasMessages())
- {
- msg.displayName = k_MessageHeader;
- var currMessages = bundle.GetMessages();
- foreach(var currMsg in currMessages)
- {
- str = itemName + currMsg.message;
- msg.AddChild(new BundleDetailItem(str.GetHashCode(), 2, currMsg.message, currMsg.severity));
- }
- }
- bunRoot.AddChild(sz);
- bunRoot.AddChild(dependency);
- bunRoot.AddChild(msg);
- return bunRoot;
- }
- internal void SetItems(IEnumerable<AssetBundleModel.BundleInfo> items)
- {
- m_Selecteditems.Clear();
- foreach(var item in items)
- {
- CollectBundles(item);
- }
- SetSelection(new List<int>());
- Reload();
- ExpandAll();
- }
- internal void CollectBundles(AssetBundleModel.BundleInfo bundle)
- {
- var bunData = bundle as AssetBundleModel.BundleDataInfo;
- if (bunData != null)
- m_Selecteditems.Add(bunData);
- else
- {
- var bunFolder = bundle as AssetBundleModel.BundleFolderInfo;
- foreach (var bun in bunFolder.GetChildList())
- {
- CollectBundles(bun);
- }
- }
- }
- }
- }
|