using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using DG.Tweening;
using Framework;
using PhxhSDK;
using UnityEngine;
using UnityEngine.UI;
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;
///
/// 资源引用管理器
///
private PhxhSDK.AssetReferenceManager _assetReferenceManager;
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 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
{
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();
}
}
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