using System; using System.Collections.Generic; using System.Reflection; using Cysharp.Threading.Tasks; using DG.Tweening; using Framework; using PhxhSDK; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; using UnityEngine.Serialization; using Object = System.Object; using UniTask = Cysharp.Threading.Tasks.UniTask; public abstract class UIWindow { public GameObject gameObject; public Transform transform; public RectTransform rectTransform; public string name; private const string DEFAULT_SHOW_ANIM = "show"; private const string DEFAULT_HIDE_ANIM = "hide"; private string mWindowName; public delegate void OnBgClose(); private OnBgClose _onBgCloseFunc; protected Dictionary AsyncLoadedAssetList = new Dictionary(10); private bool _bDoNotSetMainCamera = false; //不设置主相机 private bool _isCloseCbCalled; protected bool _isShow = false; protected bool _isHide = 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 IsUnEnabled; //是否不被激活 public bool IsClosing; //正在关闭 public bool IsNotSetMainCamera { get { return _bDoNotSetMainCamera; } set { _bDoNotSetMainCamera = value; } } // 是否播放默认的打开对话框的声音 public bool isPlayDefaultOpenAudio = true; // 是否播放默认的关闭对话框的声音 public bool isPlayDefaultCloseAudio = true; private bool _isPlayingOpenAnim; protected Sequence _openAnimSeq; public bool IsShowOpenAnim; public string WindowName { set { mWindowName = value; } get { return mWindowName; } } [HideInInspector] public UIWindowLayer uiWindowLayer; [HideInInspector] protected bool isCreated = false; /// /// 初始化GraphicRaycaster管理器 /// private void InitGraphicRaycasterManager() { if (_graphicRaycasterManager == null && gameObject != 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 { var asset = await AssetManager.Instance.LoadAssetAsync(path); if (gameObject) { if (!AsyncLoadedAssetList.ContainsKey(path)) { AsyncLoadedAssetList.Add(path, 1); } else { AsyncLoadedAssetList[path]++ ; } //return asset; } return asset; } /// /// 异步预加载 /// /// public async UniTask PostPreload(string path) where T : UnityEngine.Object { await AssetManager.Instance.PostPreload(path); if (!AsyncLoadedAssetList.ContainsKey(path)) AsyncLoadedAssetList.Add(path, 1); else AsyncLoadedAssetList[path]++; } public T GetPreLoadResult(string path) where T : UnityEngine.Object { return AssetManager.Instance.GetPreLoadResult(path); } protected void UnLoad() { foreach (var asset in AsyncLoadedAssetList) { var path = asset.Key; var count = asset.Value; for (int i = 0; i < count; i++) { AssetManager.Instance.Unload(path); } } AsyncLoadedAssetList.Clear(); } protected virtual void OnUpdate() { // 使用适配器处理屏幕适配更新 _notchScreenAdapter?.UpdateCheck(); } public void Update() { OnUpdate(); } protected virtual void OnUpdate(float dt) { // 使用适配器处理屏幕适配更新 _notchScreenAdapter?.UpdateCheck(); } public void Update(float dt) { OnUpdate(dt); } #region MonoBehaviour Methods Override protected void Destroy(GameObject obj) { UnityEngine.Object.Destroy(obj); } protected void DestroyImmediate(GameObject obj) { UnityEngine.Object.DestroyImmediate(obj); } protected void Destroy(Component cmp) { UnityEngine.Object.Destroy(cmp); } protected void DestroyImmediate(Component cmp) { UnityEngine.Object.DestroyImmediate(cmp); } protected GameObject Instantiate(GameObject prefab) { return UnityEngine.Object.Instantiate(prefab, transform); } protected GameObject Instantiate(GameObject prefab, Transform trans) { return UnityEngine.Object.Instantiate(prefab, trans); } #endregion #region Window Life private void _TryBindBgClose() { var trans = transform.Find("BgClose"); if (trans) { var btn = trans.GetComponent