AlicizaX/Client/Packages/com.alicizax.unity.ui/Runtime/UI/Manager/UIModule.cs
2025-04-28 19:45:45 +08:00

106 lines
2.9 KiB
C#

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 void ShowUI(string type, params System.Object[] userDatas)
{
if (UIMetaRegistry.TryGet(type, out var metaRegistry))
{
UIMetadata metadata = UIMetadataFactory.GetMetadata(metaRegistry.RuntimeTypeHandle);
ShowUI(metadata, userDatas);
}
}
public void ShowUI<T>(params System.Object[] userDatas) where T : UIBase
{
ShowUI(MetaTypeCache<T>.Metadata, userDatas);
}
public async UniTask<T> ShowUIAsync<T>(params System.Object[] userDatas) where T : UIBase
{
return (T)await ShowUIAsync(MetaTypeCache<T>.Metadata, userDatas);
}
public void CloseUI<T>(bool force = false) where T : UIBase
{
CloseUIImpl(MetaTypeCache<T>.Metadata, force).Forget();
}
public T GetUI<T>() where T : UIBase
{
return (T)GetUI(MetaTypeCache<T>.Metadata);
}
private void ShowUI(UIMetadata meta, params System.Object[] userDatas)
{
ShowUIImplAsync(meta, userDatas).Forget();
}
private async UniTask<UIBase> 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;
}
}
}