AkiraPixelWind/Assets/Scripts/Editor/AssetBundleBorwer/InspectTab/InspectSingleBundle.cs
2022-12-29 18:20:40 +08:00

129 lines
4.5 KiB
C#

using UnityEditor;
using UnityEngine;
using System.IO;
namespace AssetBundleBrowser
{
class SingleBundleInspector
{
internal static string currentPath { get; set; }
internal SingleBundleInspector() { }
private Editor m_Editor = null;
private Rect m_Position;
[SerializeField]
private Vector2 m_ScrollPosition;
private AssetBundleInspectTab m_assetBundleInspectTab = null;
private AssetBundleInspectTab.InspectTabData m_inspectTabData = null;
internal void SetBundle(AssetBundle bundle, string path = "", AssetBundleInspectTab.InspectTabData inspectTabData = null, AssetBundleInspectTab assetBundleInspectTab = null)
{
//static var...
currentPath = path;
m_inspectTabData = inspectTabData;
m_assetBundleInspectTab = assetBundleInspectTab;
//members
m_Editor = null;
if(bundle != null)
{
m_Editor = Editor.CreateEditor(bundle);
}
}
internal void OnGUI(Rect pos)
{
m_Position = pos;
DrawBundleData();
}
private void DrawBundleData()
{
if (m_Editor != null)
{
GUILayout.BeginArea(m_Position);
m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition);
m_Editor.OnInspectorGUI();
EditorGUILayout.EndScrollView();
GUILayout.EndArea();
}
else if(!string.IsNullOrEmpty(currentPath))
{
var style = new GUIStyle(GUI.skin.label);
style.alignment = TextAnchor.MiddleCenter;
style.wordWrap = true;
GUI.Label(m_Position, new GUIContent("Invalid bundle selected"), style);
if (m_inspectTabData != null && GUI.Button(new Rect(new Vector2((m_Position.position.x + m_Position.width / 2f) - 37.5f, (m_Position.position.y + m_Position.height / 2f) + 15), new Vector2(75, 30)), "Ignore file"))
{
var possibleFolderData = m_inspectTabData.FolderDataContainingFilePath(currentPath);
if (possibleFolderData != null)
{
if (!possibleFolderData.ignoredFiles.Contains(currentPath))
possibleFolderData.ignoredFiles.Add(currentPath);
if(m_assetBundleInspectTab != null)
m_assetBundleInspectTab.RefreshBundles();
}
}
}
}
}
[CustomEditor(typeof(AssetBundle))]
internal class AssetBundleEditor : Editor
{
internal bool pathFoldout = false;
internal bool advancedFoldout = false;
public override void OnInspectorGUI()
{
AssetBundle bundle = target as AssetBundle;
using (new EditorGUI.DisabledScope(true))
{
var leftStyle = new GUIStyle(GUI.skin.GetStyle("Label"));
leftStyle.alignment = TextAnchor.UpperLeft;
GUILayout.Label(new GUIContent("Name: " + bundle.name), leftStyle);
long fileSize = -1;
if(!System.String.IsNullOrEmpty(SingleBundleInspector.currentPath) && File.Exists(SingleBundleInspector.currentPath) )
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(SingleBundleInspector.currentPath);
fileSize = fileInfo.Length;
}
if (fileSize < 0)
GUILayout.Label(new GUIContent("Size: unknown"), leftStyle);
else
GUILayout.Label(new GUIContent("Size: " + EditorUtility.FormatBytes(fileSize)), leftStyle);
var assetNames = bundle.GetAllAssetNames();
pathFoldout = EditorGUILayout.Foldout(pathFoldout, "Source Asset Paths");
if (pathFoldout)
{
EditorGUI.indentLevel++;
foreach (var asset in assetNames)
EditorGUILayout.LabelField(asset);
EditorGUI.indentLevel--;
}
advancedFoldout = EditorGUILayout.Foldout(advancedFoldout, "Advanced Data");
}
if (advancedFoldout)
{
EditorGUI.indentLevel++;
base.OnInspectorGUI();
EditorGUI.indentLevel--;
}
}
}
}