123 lines
3.1 KiB
C#
123 lines
3.1 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System;
|
|
|
|
//TODO: make this system supprts tabs without using tab buttons
|
|
// or redo the entire thing
|
|
// yeah we need to redo the whole thing
|
|
// for now make your own page system
|
|
|
|
namespace Lemon.GenericLib.UI
|
|
{
|
|
public class TabGroup : MonoBehaviour
|
|
{
|
|
[SerializeField] private List<TabSet> tabSets;
|
|
[SerializeField] private int defaultTabIndex;
|
|
|
|
|
|
private TabButtonScript selectedButton;
|
|
|
|
[Serializable]
|
|
struct TabSet
|
|
{
|
|
public TabButtonScript tabButton;
|
|
public GameObject tabObject;
|
|
|
|
public TabSet(TabButtonScript tabButton, GameObject tabObject)
|
|
{
|
|
this.tabButton = tabButton;
|
|
this.tabObject = tabObject;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
return base.Equals(obj);
|
|
}
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (tabSets == null || defaultTabIndex < 0 || defaultTabIndex > tabSets.Count)
|
|
{
|
|
Debug.LogError("default tab cannot be asisgned, pleace chect the default tab index and make sure the tab list is initialized");
|
|
}
|
|
else
|
|
{
|
|
OnTabSelected(tabSets[defaultTabIndex].tabButton);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public void Subscribe(TabButtonScript button, GameObject tabObject)
|
|
{
|
|
if (tabSets == null)
|
|
{
|
|
tabSets = new List<TabSet>();
|
|
}
|
|
tabSets.Add(new TabSet(button, tabObject));
|
|
}
|
|
|
|
public void OnTabEnter(TabButtonScript button)
|
|
{
|
|
ResetTabs();
|
|
if (selectedButton == null || button != selectedButton)
|
|
{
|
|
button.OnEnter();
|
|
}
|
|
|
|
}
|
|
|
|
public void OnTabExit(TabButtonScript button)
|
|
{
|
|
ResetTabs();
|
|
|
|
}
|
|
|
|
public void OnTabSelected(TabButtonScript button)
|
|
{
|
|
if (selectedButton != null)
|
|
{
|
|
selectedButton.OnDeselected();
|
|
}
|
|
|
|
|
|
selectedButton = button;
|
|
button.OnSelected();
|
|
|
|
UpdateSelectedTab();
|
|
ResetTabs();
|
|
|
|
|
|
}
|
|
|
|
|
|
public void ResetTabs()
|
|
{
|
|
foreach (var item in tabSets)
|
|
{
|
|
if (selectedButton != null && item.tabButton == selectedButton) { continue; }
|
|
item.tabButton.OnExit();
|
|
}
|
|
}
|
|
|
|
//can overwite this
|
|
public void UpdateSelectedTab()
|
|
{
|
|
foreach (var tab in tabSets)
|
|
{
|
|
if (tab.tabButton == selectedButton)
|
|
{
|
|
tab.tabObject.SetActive(true);
|
|
tab.tabObject.transform.SetSiblingIndex(tabSets.Count - 1);
|
|
}
|
|
else
|
|
{
|
|
tab.tabObject.SetActive(false);
|
|
tab.tabObject.transform.SetSiblingIndex(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |