WuhuIslandTesting/Library/PackageCache/com.unity.addressables@1.21.12/Editor/Diagnostics/Profiler/GUIElements/AssetLabel.cs
2025-01-07 02:06:59 +01:00

137 lines
4.7 KiB
C#

#if ENABLE_ADDRESSABLE_PROFILER && UNITY_2022_2_OR_NEWER
using System.IO;
using UnityEditor.AddressableAssets.Build.Layout;
using UnityEngine;
using UnityEngine.ResourceManagement.Profiling;
using UnityEngine.UIElements;
namespace UnityEditor.AddressableAssets.Diagnostics
{
internal class AssetLabel : VisualElement
{
public override VisualElement contentContainer
{
get
{
return m_Container;
}
}
private VisualElement m_Container;
private Image m_Icon;
private Label m_Label;
public int LabelMargin
{
set { m_Label.style.marginLeft = new StyleLength(value); }
}
public bool Wrap
{
set
{
m_Label.style.flexWrap = new StyleEnum<Wrap>( value ? UnityEngine.UIElements.Wrap.Wrap : UnityEngine.UIElements.Wrap.NoWrap);
m_Label.style.flexShrink = new StyleFloat(1);
m_Label.style.whiteSpace = new StyleEnum<WhiteSpace>(WhiteSpace.Normal);
}
}
public AssetLabel()
{
Initialise(4, false);
}
public AssetLabel(int margin, bool wrap)
{
Initialise(margin, wrap);
}
private void Initialise(int margin, bool wrap)
{
m_Container = new VisualElement();
m_Container.style.flexDirection = new StyleEnum<FlexDirection>(FlexDirection.Row);
m_Icon = new Image();
m_Icon.style.minWidth = new StyleLength(25);
m_Icon.style.maxWidth = new StyleLength(25);
m_Icon.style.maxHeight = new StyleLength(25);
m_Container.Add(m_Icon);
m_Label = new Label("");
if (margin > 0)
m_Label.style.marginLeft = new StyleLength(margin);
m_Label.style.alignContent = new StyleEnum<Align>(Align.Center);
m_Label.style.alignSelf = new StyleEnum<Align>(Align.Center);
if (wrap)
{
m_Label.style.flexWrap = new StyleEnum<Wrap>(UnityEngine.UIElements.Wrap.Wrap);
m_Label.style.flexShrink = new StyleFloat(1);
m_Label.style.whiteSpace = new StyleEnum<WhiteSpace>(WhiteSpace.Normal);
}
m_Container.Add(m_Label);
hierarchy.Add(m_Container);
}
public new class UxmlFactory : UxmlFactory<AssetLabel, UxmlTraits> { }
public void SetContent(ContentData contentData)
{
if (contentData is AssetData assetData)
{
string name = Path.GetFileName(assetData.AssetPath);
bool isActive = assetData.Status != ContentStatus.Released && assetData.Status != ContentStatus.None;
SetLabel(name, assetData.IsImplicit, isActive);
SetIcon(assetData.MainAssetType);
}
else if (contentData is ObjectData objectData)
{
assetData = objectData.Parent as AssetData;
bool isEnabled = assetData.Status != ContentStatus.Released && assetData.Status != ContentStatus.None;
if (isEnabled && objectData.Status == ContentStatus.Released)
isEnabled = false;
SetLabel(objectData.Name, assetData.IsImplicit, isEnabled);
if (objectData.AssetType == AssetType.Component)
SetIcon(objectData.ComponentName);
else
SetIcon(objectData.AssetType);
}
else if (contentData is BundleData)
{
SetLabel(contentData.Name, false, true);
string textureName = EditorGUIUtility.isProSkin ? "d_Package Manager@2x" : "Package Manager@2x";
SetIcon(EditorGUIUtility.IconContent(textureName).image as Texture2D);
}
else
{
SetLabel(contentData.Name, false, true);
string textureName = EditorGUIUtility.isProSkin ? "d_FolderOpened Icon" : "FolderOpened Icon";
SetIcon(EditorGUIUtility.IconContent(textureName).image as Texture2D);
}
}
private void SetLabel(string name, bool italic, bool enabled)
{
m_Label.text = italic ? $"<i>{name}</i>" : name;
m_Label.SetEnabled(enabled);
}
private void SetIcon(AssetType assetType)
{
SetIcon(ProfilerGUIUtilities.GetAssetIcon(assetType));
}
private void SetIcon(string componentName)
{
SetIcon(ProfilerGUIUtilities.GetComponentIcon(componentName));
}
private void SetIcon(Texture2D icon)
{
m_Icon.image = icon;
}
}
}
#endif