mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 04:34:26 -07:00
Initial commit
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using AssetBundleBrowser.AssetBundleDataSource;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
[assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("Unity.AssetBundleBrowser.Editor.Tests")]
|
||||
|
||||
namespace AssetBundleBrowser
|
||||
{
|
||||
public class AssetBundleBrowserMain : EditorWindow, IHasCustomMenu, ISerializationCallbackReceiver
|
||||
{
|
||||
private static AssetBundleBrowserMain s_instance = null;
|
||||
|
||||
internal static AssetBundleBrowserMain instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (s_instance == null)
|
||||
s_instance = GetWindow<AssetBundleBrowserMain>();
|
||||
return s_instance;
|
||||
}
|
||||
}
|
||||
|
||||
internal const float kButtonWidth = 150;
|
||||
|
||||
private enum Mode
|
||||
{
|
||||
Browser,
|
||||
Builder,
|
||||
Inspect
|
||||
}
|
||||
|
||||
[SerializeField] private Mode m_Mode;
|
||||
|
||||
[SerializeField] private int m_DataSourceIndex;
|
||||
|
||||
[SerializeField] internal AssetBundleManageTab m_ManageTab;
|
||||
|
||||
[SerializeField] internal AssetBundleBuildTab m_BuildTab;
|
||||
|
||||
[SerializeField] internal AssetBundleInspectTab m_InspectTab;
|
||||
|
||||
private Texture2D m_RefreshTexture;
|
||||
|
||||
private const float k_ToolbarPadding = 15;
|
||||
private const float k_MenubarPadding = 32;
|
||||
|
||||
[MenuItem("Window/AssetBundle Browser", priority = 2050)]
|
||||
private static void ShowWindow()
|
||||
{
|
||||
s_instance = null;
|
||||
instance.titleContent = new GUIContent("AssetBundles");
|
||||
instance.Show();
|
||||
}
|
||||
|
||||
[SerializeField] internal bool multiDataSource = false;
|
||||
|
||||
private List<AssetBundleDataSource.ABDataSource> m_DataSourceList = null;
|
||||
|
||||
public virtual void AddItemsToMenu(GenericMenu menu)
|
||||
{
|
||||
if (menu != null)
|
||||
menu.AddItem(new GUIContent("Custom Sources"), multiDataSource, FlipDataSource);
|
||||
}
|
||||
|
||||
internal void FlipDataSource()
|
||||
{
|
||||
multiDataSource = !multiDataSource;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Rect subPos = GetSubWindowArea();
|
||||
if (m_ManageTab == null)
|
||||
m_ManageTab = new AssetBundleManageTab();
|
||||
m_ManageTab.OnEnable(subPos, this);
|
||||
if (m_BuildTab == null)
|
||||
m_BuildTab = new AssetBundleBuildTab();
|
||||
m_BuildTab.OnEnable(this);
|
||||
if (m_InspectTab == null)
|
||||
m_InspectTab = new AssetBundleInspectTab();
|
||||
m_InspectTab.OnEnable(subPos);
|
||||
|
||||
m_RefreshTexture = EditorGUIUtility.FindTexture("Refresh");
|
||||
|
||||
InitDataSources();
|
||||
}
|
||||
|
||||
private void InitDataSources()
|
||||
{
|
||||
//determine if we are "multi source" or not...
|
||||
multiDataSource = false;
|
||||
m_DataSourceList = new List<AssetBundleDataSource.ABDataSource>();
|
||||
foreach (Type info in AssetBundleDataSource.ABDataSourceProviderUtility.CustomABDataSourceTypes) m_DataSourceList.AddRange(info.GetMethod("CreateDataSources").Invoke(null, null) as List<AssetBundleDataSource.ABDataSource>);
|
||||
|
||||
if (m_DataSourceList.Count > 1)
|
||||
{
|
||||
multiDataSource = true;
|
||||
if (m_DataSourceIndex >= m_DataSourceList.Count)
|
||||
m_DataSourceIndex = 0;
|
||||
AssetBundleModel.Model.DataSource = m_DataSourceList[m_DataSourceIndex];
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
if (m_BuildTab != null)
|
||||
m_BuildTab.OnDisable();
|
||||
if (m_InspectTab != null)
|
||||
m_InspectTab.OnDisable();
|
||||
}
|
||||
|
||||
public void OnBeforeSerialize()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnAfterDeserialize()
|
||||
{
|
||||
}
|
||||
|
||||
private Rect GetSubWindowArea()
|
||||
{
|
||||
float padding = k_MenubarPadding;
|
||||
if (multiDataSource)
|
||||
padding += k_MenubarPadding * 0.5f;
|
||||
Rect subPos = new Rect(0, padding, position.width, position.height - padding);
|
||||
return subPos;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
switch (m_Mode)
|
||||
{
|
||||
case Mode.Builder:
|
||||
break;
|
||||
case Mode.Inspect:
|
||||
break;
|
||||
case Mode.Browser:
|
||||
default:
|
||||
m_ManageTab.Update();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
ModeToggle();
|
||||
|
||||
switch (m_Mode)
|
||||
{
|
||||
case Mode.Builder:
|
||||
m_BuildTab.OnGUI();
|
||||
break;
|
||||
case Mode.Inspect:
|
||||
m_InspectTab.OnGUI(GetSubWindowArea());
|
||||
break;
|
||||
case Mode.Browser:
|
||||
default:
|
||||
m_ManageTab.OnGUI(GetSubWindowArea());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ModeToggle()
|
||||
{
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Space(k_ToolbarPadding);
|
||||
bool clicked = false;
|
||||
switch (m_Mode)
|
||||
{
|
||||
case Mode.Browser:
|
||||
clicked = GUILayout.Button(m_RefreshTexture);
|
||||
if (clicked)
|
||||
m_ManageTab.ForceReloadData();
|
||||
break;
|
||||
case Mode.Builder:
|
||||
GUILayout.Space(m_RefreshTexture.width + k_ToolbarPadding);
|
||||
break;
|
||||
case Mode.Inspect:
|
||||
clicked = GUILayout.Button(m_RefreshTexture);
|
||||
if (clicked)
|
||||
m_InspectTab.RefreshBundles();
|
||||
break;
|
||||
}
|
||||
|
||||
float toolbarWidth = position.width - k_ToolbarPadding * 4 - m_RefreshTexture.width;
|
||||
//string[] labels = new string[2] { "Configure", "Build"};
|
||||
string[] labels = new string[3] {"Configure", "Build", "Inspect"};
|
||||
m_Mode = (Mode) GUILayout.Toolbar((int) m_Mode, labels, "LargeButton", GUILayout.Width(toolbarWidth));
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.EndHorizontal();
|
||||
if (multiDataSource)
|
||||
{
|
||||
//GUILayout.BeginArea(r);
|
||||
GUILayout.BeginHorizontal();
|
||||
|
||||
using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar))
|
||||
{
|
||||
GUILayout.Label("Bundle Data Source:");
|
||||
GUILayout.FlexibleSpace();
|
||||
GUIContent c = new GUIContent(string.Format("{0} ({1})", AssetBundleModel.Model.DataSource.Name, AssetBundleModel.Model.DataSource.ProviderName), "Select Asset Bundle Set");
|
||||
if (GUILayout.Button(c, EditorStyles.toolbarPopup))
|
||||
{
|
||||
GenericMenu menu = new GenericMenu();
|
||||
|
||||
for (int index = 0; index < m_DataSourceList.Count; index++)
|
||||
{
|
||||
ABDataSource ds = m_DataSourceList[index];
|
||||
if (ds == null)
|
||||
continue;
|
||||
|
||||
if (index > 0)
|
||||
menu.AddSeparator("");
|
||||
|
||||
int counter = index;
|
||||
menu.AddItem(new GUIContent(string.Format("{0} ({1})", ds.Name, ds.ProviderName)), false,
|
||||
() =>
|
||||
{
|
||||
m_DataSourceIndex = counter;
|
||||
ABDataSource thisDataSource = ds;
|
||||
AssetBundleModel.Model.DataSource = thisDataSource;
|
||||
m_ManageTab.ForceReloadData();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
menu.ShowAsContext();
|
||||
}
|
||||
|
||||
GUILayout.FlexibleSpace();
|
||||
if (AssetBundleModel.Model.DataSource.IsReadOnly())
|
||||
{
|
||||
GUIStyle tbLabel = new GUIStyle(EditorStyles.toolbar);
|
||||
tbLabel.alignment = TextAnchor.MiddleRight;
|
||||
|
||||
GUILayout.Label("Read Only", tbLabel);
|
||||
}
|
||||
}
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
//GUILayout.EndArea();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user