1
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user