You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/UI/DebuggerTabController.cs

120 lines
3.2 KiB
C#

3 months ago
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;
}
}
}
}