using System; using AlicizaX.Resource.Runtime; using AlicizaX; using AlicizaX.Timer.Runtime; using Cysharp.Threading.Tasks; using UnityEngine; namespace AlicizaX.UI.Runtime { internal sealed partial class UIModule : IUIModule { public int Priority { get; } private ITimerModule _timerModule; void IModule.Dispose() { } void IModuleUpdate.Update(float elapseSeconds, float realElapseSeconds) { // 遍历所有层级 for (int layerIndex = 0; layerIndex < _openUI.Length; layerIndex++) { var layer = _openUI[layerIndex]; int count = layer.OrderList.Count; if (count == 0) continue; // 跳过空层级 for (int i = 0; i < count; i++) { if (layer.OrderList.Count != count) { break; } var window = layer.OrderList[i]; window.View.InternalUpdate(); } } } public UniTask? ShowUI(string type, params object[] userDatas) { if (UIMetaRegistry.TryGet(type, out var metaRegistry)) { UIMetadata metadata = UIMetadataFactory.GetMetadata(metaRegistry.RuntimeTypeHandle); return ShowUI(metadata, userDatas); } return null; } public UniTask ShowUI(params System.Object[] userDatas) where T : UIBase { return ShowUI(MetaTypeCache.Metadata, userDatas); } public async UniTask ShowUIAsync(params System.Object[] userDatas) where T : UIBase { return (T)await ShowUIAsync(MetaTypeCache.Metadata, userDatas); } public void CloseUI(bool force = false) where T : UIBase { CloseUIImpl(MetaTypeCache.Metadata, force).Forget(); } public T GetUI() where T : UIBase { return (T)GetUI(MetaTypeCache.Metadata); } private UniTask ShowUI(UIMetadata meta, params System.Object[] userDatas) { return ShowUIImplAsync(meta, userDatas); } private async UniTask ShowUIAsync(UIMetadata meta, params System.Object[] userDatas) { return await ShowUIImplAsync(meta, userDatas); } public void CloseUI(RuntimeTypeHandle handle, bool force = false) { var metadata = UIMetadataFactory.GetMetadata(handle); if (metadata.State != UIState.Uninitialized && metadata.State != UIState.Destroying) { CloseUIImpl(metadata, force).Forget(); } } private UIBase GetUI(UIMetadata meta) { return (UIBase)GetUIImpl(meta); } void IUIModule.SetTimerManager(ITimerModule timerModule) { _timerModule = timerModule; } } }