123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #if UNITY_2019_4_OR_NEWER
- using System.IO;
- using System.Linq;
- using System.Collections.Generic;
- using UnityEditor;
- using UnityEngine;
- using UnityEditor.UIElements;
- using UnityEngine.UIElements;
- namespace YooAsset.Editor
- {
- internal class DebuggerAssetListViewer
- {
- private VisualTreeAsset _visualAsset;
- private TemplateContainer _root;
- private ListView _assetListView;
- private ListView _dependListView;
- private DebugReport _debugReport;
- /// <summary>
- /// 初始化页面
- /// </summary>
- public void InitViewer()
- {
- // 加载布局文件
- _visualAsset = EditorHelper.LoadWindowUXML<DebuggerAssetListViewer>();
- if (_visualAsset == null)
- return;
-
- _root = _visualAsset.CloneTree();
- _root.style.flexGrow = 1f;
- // 资源列表
- _assetListView = _root.Q<ListView>("TopListView");
- _assetListView.makeItem = MakeAssetListViewItem;
- _assetListView.bindItem = BindAssetListViewItem;
- #if UNITY_2020_1_OR_NEWER
- _assetListView.onSelectionChange += AssetListView_onSelectionChange;
- #else
- _assetListView.onSelectionChanged += AssetListView_onSelectionChange;
- #endif
- // 依赖列表
- _dependListView = _root.Q<ListView>("BottomListView");
- _dependListView.makeItem = MakeDependListViewItem;
- _dependListView.bindItem = BindDependListViewItem;
- }
- /// <summary>
- /// 清空页面
- /// </summary>
- public void ClearView()
- {
- _debugReport = null;
- _assetListView.Clear();
- _assetListView.ClearSelection();
- _assetListView.itemsSource.Clear();
- _assetListView.Rebuild();
- }
- /// <summary>
- /// 填充页面数据
- /// </summary>
- public void FillViewData(DebugReport debugReport, string searchKeyWord)
- {
- _debugReport = debugReport;
- _assetListView.Clear();
- _assetListView.ClearSelection();
- _assetListView.itemsSource = FilterViewItems(debugReport, searchKeyWord);
- _assetListView.Rebuild();
- }
- private List<DebugProviderInfo> FilterViewItems(DebugReport debugReport, string searchKeyWord)
- {
- var result = new List<DebugProviderInfo>(debugReport.ProviderInfos.Count);
- foreach (var providerInfo in debugReport.ProviderInfos)
- {
- if (string.IsNullOrEmpty(searchKeyWord) == false)
- {
- if (providerInfo.AssetPath.Contains(searchKeyWord) == false)
- continue;
- }
- result.Add(providerInfo);
- }
- return result;
- }
- /// <summary>
- /// 挂接到父类页面上
- /// </summary>
- public void AttachParent(VisualElement parent)
- {
- parent.Add(_root);
- }
- /// <summary>
- /// 从父类页面脱离开
- /// </summary>
- public void DetachParent()
- {
- _root.RemoveFromHierarchy();
- }
- // 资源列表相关
- private VisualElement MakeAssetListViewItem()
- {
- VisualElement element = new VisualElement();
- element.style.flexDirection = FlexDirection.Row;
- {
- var label = new Label();
- label.name = "Label1";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- label.style.flexGrow = 1f;
- label.style.width = 280;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label2";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 150;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label3";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 150;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label4";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 100;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label5";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 120;
- element.Add(label);
- }
- return element;
- }
- private void BindAssetListViewItem(VisualElement element, int index)
- {
- var sourceData = _assetListView.itemsSource as List<DebugProviderInfo>;
- var providerInfo = sourceData[index];
- // Asset Path
- var label1 = element.Q<Label>("Label1");
- label1.text = providerInfo.AssetPath;
- // Spawn Scene
- var label2 = element.Q<Label>("Label2");
- label2.text = providerInfo.SpawnScene;
- // Spawn Time
- var label3 = element.Q<Label>("Label3");
- label3.text = providerInfo.SpawnTime;
- // Ref Count
- var label4 = element.Q<Label>("Label4");
- label4.text = providerInfo.RefCount.ToString();
- // Status
- StyleColor textColor;
- if (providerInfo.Status == (int)ProviderBase.EStatus.Fail)
- textColor = new StyleColor(Color.yellow);
- else
- textColor = label1.style.color;
- var label5 = element.Q<Label>("Label5");
- label5.text = providerInfo.Status.ToString();
- label5.style.color = textColor;
- }
- private void AssetListView_onSelectionChange(IEnumerable<object> objs)
- {
- foreach (var item in objs)
- {
- DebugProviderInfo providerInfo = item as DebugProviderInfo;
- FillDependListView(providerInfo);
- }
- }
- // 依赖列表相关
- private VisualElement MakeDependListViewItem()
- {
- VisualElement element = new VisualElement();
- element.style.flexDirection = FlexDirection.Row;
- {
- var label = new Label();
- label.name = "Label1";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- label.style.flexGrow = 1f;
- label.style.width = 280;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label3";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 100;
- element.Add(label);
- }
- {
- var label = new Label();
- label.name = "Label4";
- label.style.unityTextAlign = TextAnchor.MiddleLeft;
- label.style.marginLeft = 3f;
- //label.style.flexGrow = 1f;
- label.style.width = 120;
- element.Add(label);
- }
- return element;
- }
- private void BindDependListViewItem(VisualElement element, int index)
- {
- List<DebugBundleInfo> bundles = _dependListView.itemsSource as List<DebugBundleInfo>;
- DebugBundleInfo bundleInfo = bundles[index];
- // Bundle Name
- var label1 = element.Q<Label>("Label1");
- label1.text = bundleInfo.BundleName;
- // Ref Count
- var label3 = element.Q<Label>("Label3");
- label3.text = bundleInfo.RefCount.ToString();
- // Status
- var label4 = element.Q<Label>("Label4");
- label4.text = bundleInfo.Status.ToString();
- }
- private void FillDependListView(DebugProviderInfo providerInfo)
- {
- _dependListView.Clear();
- _dependListView.ClearSelection();
- _dependListView.itemsSource = providerInfo.BundleInfos;
- _dependListView.Rebuild();
- }
- }
- }
- #endif
|