using Cysharp.Threading.Tasks; using DG.Tweening; using PhxhSDK; using UnityEngine; using UniTask = Cysharp.Threading.Tasks.UniTask; public abstract partial class UIWindow { public GameObject gameObject; public Transform transform; public string name; private string mWindowName; /// /// 资源引用管理器 /// private PhxhSDK.AssetReferenceManager _assetReferenceManager; private bool _isCloseCbCalled; protected bool _isShow = false; protected bool _isPaused = false; // 窗口暂停状态(用于音乐、动画等逻辑控制) // 刘海屏适配器Ω private UINotchScreenAdapter _notchScreenAdapter; // GraphicRaycaster管理器 private GraphicRaycasterManager _graphicRaycasterManager; /// /// Public accessor for the `GraphicRaycasterManager`. Lazily initializes on first access and cannot be assigned. /// public GraphicRaycasterManager GraphicRaycasterManager { get { if (_graphicRaycasterManager == null) InitGraphicRaycasterManager(); return _graphicRaycasterManager; } } public bool IsClosing; //正在关闭 /// /// 返回键策略(在窗口加载到Layer时设置) /// public IUIBackStrategy BackStrategy { get; set; } private bool _isPlayingOpenAnim; protected Sequence _openAnimSeq; public bool IsShowOpenAnim; public string WindowName { set { mWindowName = value; } get { return mWindowName; } } [HideInInspector] public UICanvasLayer uiWindowLayer; [HideInInspector] protected bool isInited = false; /// /// 初始化GraphicRaycaster管理器 /// private void InitGraphicRaycasterManager() { if (_graphicRaycasterManager == null && gameObject is not null) { _graphicRaycasterManager = new GraphicRaycasterManager(gameObject); } } /// /// 初始化刘海屏适配 /// private void InitScreenAdaption() { if (_notchScreenAdapter == null) { _notchScreenAdapter = new UINotchScreenAdapter(transform); } } public async UniTask LoadAssetAsync(string path) where T : UnityEngine.Object { if (gameObject) { // 确保资源管理器已初始化 if (_assetReferenceManager == null) { _assetReferenceManager = new PhxhSDK.AssetReferenceManager(); } return await _assetReferenceManager.LoadAssetAsync(path); } // 如果gameObject为空,直接通过AssetManager加载 return await AssetManager.Instance.LoadAssetAsync(path); } /// /// 异步预加载资源 /// /// 资源路径 public async UniTask PostPreload(string path) where T : UnityEngine.Object { // 确保资源管理器已初始化 if (_assetReferenceManager == null) { _assetReferenceManager = new PhxhSDK.AssetReferenceManager(); } await _assetReferenceManager.PostPreload(path); } /// /// 获取预加载的资源结果 /// /// 资源路径 public T GetPreLoadResult(string path) where T : UnityEngine.Object { // 优先使用资源管理器获取结果 if (_assetReferenceManager != null) { return _assetReferenceManager.GetPreLoadResult(path); } // 回退到直接使用AssetManager return AssetManager.Instance.GetPreLoadResult(path); } protected void UnLoad() { // 使用资源管理器卸载所有资源 if (_assetReferenceManager != null) { _assetReferenceManager.UnloadAll(); } } #region Component Utilities public GameObject FindObj(string path) { GameObject obj = transform.Find(path)?.gameObject; if (obj is null) { DebugUtil.LogError("{0}未找到 {1}/{2}", mWindowName, gameObject.name, path); } return obj; } public T GetComponent(string path = "") where T : Behaviour { var component = transform.Find(path)?.GetComponent(); if (component is null) { DebugUtil.LogError("{0}未找到组件{1}: {2}", mWindowName, typeof(T).Name, path); } return component; } public T AddComponent(string path = "") where T : Behaviour { var trans = transform.Find(path); if (trans) { var component = trans.GetComponent(); if (component is null) { component = trans.gameObject.AddComponent(); //DebugUtil.LogError("{0}未找到组件{1}: {2}", mWindowName, typeof(T).Name, path); } return component; } DebugUtil.LogError("{0}未找到路径: {1}", mWindowName, path); return null; } #endregion #region State Query Methods public bool IsCreated() { return isInited; } public bool IsShow() { return _isShow; } public bool IsHide() { return !_isShow; } /// /// 是否处于活跃状态(显示且未暂停) /// public bool IsActive() { return _isShow && !_isPaused; } /// /// 是否处于暂停状态 /// public bool IsPaused() { return _isPaused; } #endregion }