This commit is contained in:
CortexCore
2024-05-31 01:23:15 +08:00
parent c798b224be
commit 299082fe27
164 changed files with 3604 additions and 2018 deletions

View File

@@ -10,6 +10,7 @@ using UnityEngine.Pool;
using UnityEngine.UIElements;
namespace BITKit
{
[CustomType(typeof(IUXWaiting))]
public class UXWaiting : MonoBehaviour,IUXWaiting
{
public sealed class WaitingHandle : IUXWaitingHandle
@@ -29,6 +30,10 @@ namespace BITKit
{
label.text = message;
}
else
{
BIT4Log.Log<UXWaiting>("WaitingHandle is destroyed");
}
}
}
@@ -41,11 +46,13 @@ namespace BITKit
private VisualElement _root;
private Pool<IUXWaitingHandle> _pool;
private readonly HashSet<IUXWaitingHandle> _handles = new();
public IUXWaitingHandle Get()
{
var handle = _pool.Take();
Active();
_handles.Add(handle);
return handle;
async void Active()
{
@@ -56,40 +63,42 @@ namespace BITKit
}
public async void Release(IUXWaitingHandle handle)
{
await UniTask.SwitchToMainThread();
if (destroyCancellationToken.IsCancellationRequested) return;
_pool.Return(handle);
_handles.Remove(handle);
Check();
}
private void Awake()
{
UXUtils.Inject(this);
foreach (var x in _container.Children().ToArray())
{
x.RemoveFromHierarchy();
}
_container.Clear();
_pool = new Pool<IUXWaitingHandle>(Create,OnReset,10);
if (asGlobal)
{
DI.Register<IUXWaiting>(this);
}
_root.SetActive(false);
}
private void Start()
{
Check();
}
private async void OnReset(IUXWaitingHandle obj)
{
await UniTask.SwitchToMainThread();
obj.As<WaitingHandle>().container.SetActive(false);
}
[BIT]
private async void Check()
{
await UniTask.Yield();
await UniTask.SwitchToMainThread();
if(destroyCancellationToken.IsCancellationRequested) return;
_root.SetActive(_container.Children().Any(x=>x.style.display != DisplayStyle.None));
_root.SetActive(_handles.Count>0);
}
private IUXWaitingHandle Create()
{
var handle = new WaitingHandle