using System; using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; public partial class UIManager { private List _uiWindowStack = new List(8); public List UiWindowStack => _uiWindowStack; #region StackAPI public bool CheckIsWindowInStack(UIWindow window) { if (_uiWindowStack.Contains(window)) { return true; } return false; } public UIWindow GetLast() { if (_uiWindowStack.Count > 0) { return _uiWindowStack.Last(); } return null; } public UIWindow GetLastFullScreen() { if (_uiWindowStack.Count > 0) { for (int i = _uiWindowStack.Count - 1; i >= 0; i--) { if (CheckWindowIsFullScreen(_uiWindowStack[i])) { return _uiWindowStack[i]; } } } return null; } public void PushWindow(UIWindow window) { if (window != null) { if (_uiWindowStack.Contains(window)) { DebugUtil.LogError($"{window.WindowName} exists in UIWindowStack!!!"); return; } _uiWindowStack.Add(window); } } public UIWindow PopWindow() { if (_uiWindowStack.Count > 0) { var window = _uiWindowStack.Last(); _uiWindowStack.Remove(window); return window; } return null; } public UIWindow PopWindow(string checkWindowName) { if (_uiWindowStack.Count > 0) { var window = _uiWindowStack.Last(); if (string.IsNullOrEmpty(checkWindowName) || checkWindowName.Equals(window.WindowName)) { _uiWindowStack.Remove(window); return window;; } } return null; } public void ForceRemoveWindow(UIWindow window) { if (_uiWindowStack.Contains(window)) { _uiWindowStack.Remove(window); } } public void ClearHideStack(params string[] windowName) { for(int i = _uiWindowStack.Count - 1; i >=0 ; i--) { if (!windowName.Contains(_uiWindowStack[i].WindowName)) { _uiWindowStack[i].CloseWindow(UIWindowCloseType.ForceDestroy); _uiWindowStack.RemoveAt(i); } } } public void ClearHideStack() { for(int i = 0; i < _uiWindowStack.Count; i++) { _uiWindowStack[i].CloseWindow(UIWindowCloseType.ForceDestroy); } _uiWindowStack.Clear(); } #endregion }