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

77 lines
1.9 KiB
C#

using System.Collections.Generic;
/// <summary>
/// UI 窗口组
/// 封装一组窗口,提供批量操作
/// </summary>
public class UIWindowGroup
{
/// <summary>
/// 组内的窗口名称集合
/// </summary>
private readonly HashSet<string> _windowNames = new HashSet<string>();
/// <summary>
/// 构造函数
/// </summary>
/// <param name="windowNames">窗口名称集合</param>
public UIWindowGroup(IEnumerable<string> windowNames)
{
if (windowNames != null)
{
foreach (var name in windowNames)
{
if (!string.IsNullOrEmpty(name))
{
_windowNames.Add(name);
}
}
}
}
/// <summary>
/// 构造函数(可变参数)
/// </summary>
public UIWindowGroup(params string[] windowNames)
: this((IEnumerable<string>)windowNames)
{
}
/// <summary>
/// 批量隐藏组内所有窗口
/// </summary>
public void Close(bool destroy)
{
var uiManager = UIManager.Instance;
foreach (var windowName in _windowNames)
{
if (uiManager.IsWindowOpening(windowName))
{
var window = uiManager.GetLoadedWindowByPath(windowName);
if (window != null && window.gameObject.activeInHierarchy)
{
window.CloseWindow(destroy);
}
}
}
}
/// <summary>
/// 批量显示组内所有窗口
/// </summary>
public void Show()
{
var uiManager = UIManager.Instance;
foreach (var windowName in _windowNames)
{
var window = uiManager.GetLoadedWindowByPath(windowName);
if (window != null && !window.gameObject.activeInHierarchy)
{
window.ShowWindow();
}
}
}
}