120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C#
		
	
	
	
namespace SRDebugger.Scripts
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using System.Linq;
 | 
						|
    using SRF;
 | 
						|
    using UI.Other;
 | 
						|
    using UnityEngine;
 | 
						|
 | 
						|
    public class DebuggerTabController : SRMonoBehaviourEx
 | 
						|
    {
 | 
						|
        private SRTab _aboutTabInstance;
 | 
						|
        private DefaultTabs? _activeTab;
 | 
						|
        private bool _hasStarted;
 | 
						|
        public SRTab AboutTab;
 | 
						|
 | 
						|
        [RequiredField] public SRTabController TabController;
 | 
						|
 | 
						|
        public DefaultTabs? ActiveTab
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                var key = TabController.ActiveTab.Key;
 | 
						|
 | 
						|
                if (string.IsNullOrEmpty(key))
 | 
						|
                {
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
 | 
						|
                var t = Enum.Parse(typeof (DefaultTabs), key);
 | 
						|
 | 
						|
                if (!Enum.IsDefined(typeof (DefaultTabs), t))
 | 
						|
                {
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
 | 
						|
                return (DefaultTabs) t;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void Start()
 | 
						|
        {
 | 
						|
            base.Start();
 | 
						|
 | 
						|
            _hasStarted = true;
 | 
						|
 | 
						|
            // Loads all available tabs from resources
 | 
						|
            var tabs = Resources.LoadAll<SRTab>("SRDebugger/UI/Prefabs/Tabs");
 | 
						|
            var defaultTabs = Enum.GetNames(typeof (DefaultTabs));
 | 
						|
 | 
						|
            foreach (var srTab in tabs)
 | 
						|
            {
 | 
						|
                var enabler = srTab.GetComponent(typeof (IEnableTab)) as IEnableTab;
 | 
						|
 | 
						|
                if (enabler != null && !enabler.IsEnabled)
 | 
						|
                {
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
 | 
						|
                if (defaultTabs.Contains(srTab.Key))
 | 
						|
                {
 | 
						|
                    var tabValue = Enum.Parse(typeof (DefaultTabs), srTab.Key);
 | 
						|
 | 
						|
                    if (Enum.IsDefined(typeof (DefaultTabs), tabValue) &&
 | 
						|
                        Settings.Instance.DisabledTabs.Contains((DefaultTabs) tabValue))
 | 
						|
                    {
 | 
						|
                        continue;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                TabController.AddTab(SRInstantiate.Instantiate(srTab));
 | 
						|
            }
 | 
						|
 | 
						|
            // Add about tab (has no button, accessed via "Stompy" logo
 | 
						|
            if (AboutTab != null)
 | 
						|
            {
 | 
						|
                _aboutTabInstance = SRInstantiate.Instantiate(AboutTab);
 | 
						|
                TabController.AddTab(_aboutTabInstance, false);
 | 
						|
            }
 | 
						|
 | 
						|
            // Open active tab (set before panel loaded), or default tab from settings
 | 
						|
            var defaultTab = _activeTab ?? Settings.Instance.DefaultTab;
 | 
						|
 | 
						|
            if (!OpenTab(defaultTab))
 | 
						|
            {
 | 
						|
                TabController.ActiveTab = TabController.Tabs.FirstOrDefault();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public bool OpenTab(DefaultTabs tab)
 | 
						|
        {
 | 
						|
            if (!_hasStarted)
 | 
						|
            {
 | 
						|
                _activeTab = tab;
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
 | 
						|
            var tabName = tab.ToString();
 | 
						|
 | 
						|
            foreach (var t in TabController.Tabs)
 | 
						|
            {
 | 
						|
                if (t.Key == tabName)
 | 
						|
                {
 | 
						|
                    TabController.ActiveTab = t;
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        public void ShowAboutTab()
 | 
						|
        {
 | 
						|
            if (_aboutTabInstance != null)
 | 
						|
            {
 | 
						|
                TabController.ActiveTab = _aboutTabInstance;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |