using System.Collections.Generic; using UnityEngine; namespace OHM.UnityToolkit.UI { public class UIMenusController : MonoBehaviour { public UIMenuBase defaultMenu; private List _popupStack = new List(); public UIMenuBase[] AllSubMenus { get; set; } private void Awake() { InitSubMenus(); if (defaultMenu != null) { HideAllExcept(defaultMenu); } else { HideAll(); } } private void InitSubMenus() { AllSubMenus = GetComponentsInChildren(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(_popupStack); for (int i = stack.Count - 1; i >= 0; i--) { if (stack[i].OnBack()) { break; } } } } }