NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/UI/UIManager.Stack.cs

118 lines
3.1 KiB
C#
Raw Normal View History

2023-11-21 13:31:06 +08:00
2023-11-21 15:30:03 +08:00
using System;
2023-11-21 13:31:06 +08:00
using System.Collections.Generic;
2024-01-24 15:42:01 +08:00
using System.Linq;
2023-11-21 13:31:06 +08:00
using Cysharp.Threading.Tasks;
public partial class UIManager
{
2024-01-24 15:42:01 +08:00
private List<UIWindow> _uiWindowStack = new List<UIWindow>(8);
public List<UIWindow> UiWindowStack => _uiWindowStack;
2023-11-21 13:31:06 +08:00
2024-01-24 15:42:01 +08:00
#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;
}
2023-11-21 13:31:06 +08:00
public void PushWindow(UIWindow window)
{
2024-01-26 16:06:42 +08:00
if (window != null)
2023-11-21 13:31:06 +08:00
{
2024-01-24 15:42:01 +08:00
if (_uiWindowStack.Contains(window))
{
DebugUtil.LogError($"{window.WindowName} exists in UIWindowStack!!!");
return;
}
_uiWindowStack.Add(window);
2023-11-21 13:31:06 +08:00
}
}
public UIWindow PopWindow()
{
if (_uiWindowStack.Count > 0)
{
2024-01-24 15:42:01 +08:00
var window = _uiWindowStack.Last();
_uiWindowStack.Remove(window);
return window;
2023-11-21 13:31:06 +08:00
}
return null;
}
public UIWindow PopWindow(string checkWindowName)
{
if (_uiWindowStack.Count > 0)
{
2024-01-24 15:42:01 +08:00
var window = _uiWindowStack.Last();
2023-11-21 13:31:06 +08:00
if (string.IsNullOrEmpty(checkWindowName) || checkWindowName.Equals(window.WindowName))
{
2024-01-24 15:42:01 +08:00
_uiWindowStack.Remove(window);
return window;;
2023-11-21 13:31:06 +08:00
}
}
return null;
}
2024-01-24 15:42:01 +08:00
public void ForceRemoveWindow(UIWindow window)
{
if (_uiWindowStack.Contains(window))
{
_uiWindowStack.Remove(window);
}
}
2024-01-24 16:48:01 +08:00
public void ClearHideStack(params string[] windowName)
{
for(int i = _uiWindowStack.Count - 1; i >=0 ; i--)
2024-01-24 16:48:01 +08:00
{
if (!windowName.Contains(_uiWindowStack[i].WindowName))
{
_uiWindowStack[i].CloseWindow(UIWindowCloseType.ForceDestroy);
_uiWindowStack.RemoveAt(i);
2024-01-24 16:48:01 +08:00
}
}
}
2023-11-21 13:31:06 +08:00
public void ClearHideStack()
{
2024-01-24 15:42:01 +08:00
for(int i = 0; i < _uiWindowStack.Count; i++)
{
_uiWindowStack[i].CloseWindow(UIWindowCloseType.ForceDestroy);
}
2023-11-21 13:31:06 +08:00
_uiWindowStack.Clear();
}
2024-01-24 15:42:01 +08:00
#endregion
2023-11-21 13:31:06 +08:00
}