92 lines
1.5 KiB
C#
92 lines
1.5 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace OHM.UnityToolkit.UI
|
|
{
|
|
public class UIMenusController : MonoBehaviour
|
|
{
|
|
public UIMenuBase defaultMenu;
|
|
|
|
private List<UIMenuBase> _popupStack = new List<UIMenuBase>();
|
|
public UIMenuBase[] AllSubMenus { get; set; }
|
|
|
|
private void Awake()
|
|
{
|
|
InitSubMenus();
|
|
if (defaultMenu != null)
|
|
{
|
|
HideAllExcept(defaultMenu);
|
|
}
|
|
else
|
|
{
|
|
HideAll();
|
|
}
|
|
}
|
|
|
|
private void InitSubMenus()
|
|
{
|
|
AllSubMenus = GetComponentsInChildren<UIMenuBase>(true);
|
|
for (int i = 0; i < AllSubMenus.Length; i++)
|
|
{
|
|
InitSubMenu(AllSubMenus[i]);
|
|
}
|
|
}
|
|
|
|
protected virtual void InitSubMenu(UIMenuBase menu)
|
|
{
|
|
menu.SetMenuController(this);
|
|
}
|
|
|
|
public void HideAll()
|
|
{
|
|
for (int i = 0; i < AllSubMenus.Length; i++)
|
|
{
|
|
AllSubMenus[i].Hide();
|
|
}
|
|
}
|
|
|
|
public void HideAllExcept(UIMenuBase except)
|
|
{
|
|
for (int i = 0; i < AllSubMenus.Length; i++)
|
|
{
|
|
UIMenuBase menu = AllSubMenus[i];
|
|
if (menu != except)
|
|
{
|
|
menu.Hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ShowDebug(bool state)
|
|
{
|
|
}
|
|
|
|
public void PushPopup(UIMenuBase popup)
|
|
{
|
|
_popupStack.Add(popup);
|
|
}
|
|
|
|
public void PopPopup(UIMenuBase popup)
|
|
{
|
|
_popupStack.RemoveAll((UIMenuBase p) => p == popup);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (!Input.GetKeyUp(KeyCode.Escape))
|
|
{
|
|
return;
|
|
}
|
|
var stack = new List<UIMenuBase>(_popupStack);
|
|
for (int i = stack.Count - 1; i >= 0; i--)
|
|
{
|
|
if (stack[i].OnBack())
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|