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

83 lines
2.8 KiB
C#
Raw Normal View History

using System.Collections.Generic;
2025-10-13 13:07:07 +08:00
using TMPro;
2023-08-22 19:08:45 +08:00
public partial class UIManagerBase
2023-08-22 19:08:45 +08:00
{
2024-01-24 15:42:01 +08:00
public struct WindowInfo
2023-08-22 19:08:45 +08:00
{
public UICanvasLayer windowLayer; // UI的显示层级
public UIVisibilityStrategy VisibilityStrategy; // 可见性策略(纯性能,不影响UI生命周期)
public CameraMode CameraMode; // 相机模式 ,纯性能
public bool IsAutoAnim;
2025-12-25 15:01:35 +08:00
public bool NeedScreenshot; // 是否需要截图(用于模糊背景)
2025-12-25 20:26:05 +08:00
public UIBackStrategyType BackStrategyType; // 返回键策略类型
2023-08-22 19:08:45 +08:00
}
2025-05-29 18:05:35 +08:00
public enum EShowAnimMode
{
Default,
MustShow, //强制显示
NotShow, //强制不显示
}
public enum CameraMode
{
None, // 不管相机
Shut, // 关闭相机
Show, // 显示相机
}
2025-05-29 18:05:35 +08:00
protected Dictionary<string, WindowInfo> _windowsInfo = new Dictionary<string, WindowInfo>(64);
2024-01-24 15:42:01 +08:00
public Dictionary<string, WindowInfo> WindowInfos => _windowsInfo;
2023-08-22 19:08:45 +08:00
/// <summary>
/// 注册所有窗口元数据(子类可重写以提供项目特定的窗口配置)
/// </summary>
protected virtual void _AllWindowMeta()
2023-08-22 19:08:45 +08:00
{
}
/// <summary>
/// 注册UI窗口
/// </summary>
/// <param name="name"></param>
/// <param name="windowLayer"></param> 层级
/// <param name="visibilityStrategy"></param> 可见性策略
/// <param name="cameraMode"></param> 界面管理相机模式
/// <param name="isAutoAnim"></param> 是否自动播放开关界面渐变动画
2025-12-25 15:01:35 +08:00
/// <param name="needScreenshot"></param> 是否需要截图(用于模糊背景)
2025-12-25 20:26:05 +08:00
/// <param name="backStrategy"></param> 返回键策略(可选,默认CloseSelf)
protected void _WindowMeta(string name, UICanvasLayer windowLayer, UIVisibilityStrategy visibilityStrategy, CameraMode cameraMode,
bool isAutoAnim, bool needScreenshot, UIBackStrategyType backStrategy = UIBackStrategyType.CloseSelf)
2023-08-22 19:08:45 +08:00
{
2025-12-05 12:20:34 +08:00
if (_windowsInfo.ContainsKey(name))
{
DebugUtil.LogError($"重复注册UI窗口{name},请检查!");
return;
}
2025-12-25 20:26:05 +08:00
_windowsInfo.Add(name, new WindowInfo
{
windowLayer = windowLayer,
VisibilityStrategy = visibilityStrategy,
CameraMode = cameraMode,
2025-12-25 20:26:05 +08:00
IsAutoAnim = isAutoAnim,
NeedScreenshot = needScreenshot,
BackStrategyType = backStrategy
});
2025-12-22 16:55:56 +08:00
}
/// <summary>
/// 获取窗口配置信息
/// </summary>
public WindowInfo GetWindowInfo(string windowName)
{
if (_windowsInfo.TryGetValue(windowName, out var info))
{
return info;
}
DebugUtil.LogError($"Cannot find window config: {windowName}");
return default;
}
2023-08-22 19:08:45 +08:00
}