| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | using System.Collections.Generic;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;        enum Mode        {            Browser,            Builder,            Inspect,        }        [SerializeField]        Mode m_Mode;        [SerializeField]        int m_DataSourceIndex;        [SerializeField]        internal AssetBundleManageTab m_ManageTab;        [SerializeField]        internal AssetBundleBuildTab m_BuildTab;        [SerializeField]        internal AssetBundleInspectTab m_InspectTab;        private Texture2D m_RefreshTexture;        const float k_ToolbarPadding = 15;        const float k_MenubarPadding = 32;        [MenuItem("Window/AssetBundle Browser", priority = 2050)]        static void ShowWindow()        {            s_instance = null;            instance.titleContent = new GUIContent("AssetBundles");            instance.Show();        }        [SerializeField]        internal bool multiDataSource = false;        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 (var 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;            }        }        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();                    var 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++)                        {                            var ds = m_DataSourceList[index];                            if (ds == null)                                continue;                            if (index > 0)                                menu.AddSeparator("");                                                         var counter = index;                            menu.AddItem(new GUIContent(string.Format("{0} ({1})", ds.Name, ds.ProviderName)), false,                                () =>                                {                                    m_DataSourceIndex = counter;                                    var 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();            }        }    }}
 |