From d33e1c1713edd2e549f00cabd8480cab3c077452 Mon Sep 17 00:00:00 2001 From: CortexCore <2630229280@qq.com> Date: Sun, 4 Aug 2024 11:39:37 +0800 Subject: [PATCH] 1 --- Src/Core/Storage/ApplicationFile.cs | 6 +- .../UX/Service/UI Toolkit/UIToolKitPanel.cs | 50 ++++---- Src/Unity/Scripts/UX/Waiting/UXWaiting.cs | 107 ++++++------------ Src/Unity/UX/UXWaiting_Handle_Template.uxml | 4 +- 4 files changed, 61 insertions(+), 106 deletions(-) diff --git a/Src/Core/Storage/ApplicationFile.cs b/Src/Core/Storage/ApplicationFile.cs index e379015..272233b 100644 --- a/Src/Core/Storage/ApplicationFile.cs +++ b/Src/Core/Storage/ApplicationFile.cs @@ -1,4 +1,4 @@ -#if UNITY_5_3_OR_NEWER + using System; using System.Collections; using System.Collections.Concurrent; @@ -9,7 +9,9 @@ using System.Threading; #if UNITY_WINDOW using AnotherFileBrowser.Windows; #endif +#if UNITY_5_3_OR_NEWER using UnityEngine; +#endif using Cysharp.Threading.Tasks; @@ -225,5 +227,3 @@ namespace BITKit.IO } #endif } - -#endif \ No newline at end of file diff --git a/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs b/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs index 521bcc9..a4fa721 100644 --- a/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs +++ b/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs @@ -78,47 +78,45 @@ namespace BITKit.UX background?.SetOpacity(0); if (IsWindow) document.sortingOrder++; } + protected virtual void Start() { BITKit.UX.UXUtils.Inject(this); - + UXService.Register(this); - destroyCancellationToken.Register(() => - { - UXService.UnRegister(this); - }); - - if(IsValid && autoEntry) + destroyCancellationToken.Register(() => { UXService.UnRegister(this); }); + + if (IsValid && autoEntry) UXService.Entry(this); - - var returnButton= document.rootVisualElement.Q("return-button"); + + var returnButton = document.rootVisualElement.Q("return-button"); returnButton?.RegisterCallback(x => { if (x.button is 0) OnReturn(); }); - + + var invisible = document.rootVisualElement.Create(); + invisible.name = "invisible_return_generate"; + invisible.style.position = Position.Absolute; + invisible.pickingMode = PickingMode.Ignore; + invisible.style.left = 0; + invisible.style.right = 0; + invisible.style.top = 0; + invisible.style.bottom = 0; + invisible.SendToBack(); + + if (closeWhenClickOutside) + { + invisible.RegisterCallback(x => { OnReturn(); }); + invisible.pickingMode = PickingMode.Position; + } if (isWindow) { - var invisible = document.rootVisualElement.Create(); - invisible.name = "invisible_return_generate"; - invisible.style.position = Position.Absolute; - invisible.style.left = 0; - invisible.style.right = 0; - invisible.style.top = 0; - invisible.style.bottom = 0; - invisible.SendToBack(); invisible.style.backgroundColor = new Color(0, 0, 0, 0.9f); - { - if(closeWhenClickOutside) - invisible.RegisterCallback(x => - { - OnReturn(); - }); - } } - } + public bool IsEntered { get; set; } public void Entry() { diff --git a/Src/Unity/Scripts/UX/Waiting/UXWaiting.cs b/Src/Unity/Scripts/UX/Waiting/UXWaiting.cs index 36b10b9..3fafb1e 100644 --- a/Src/Unity/Scripts/UX/Waiting/UXWaiting.cs +++ b/Src/Unity/Scripts/UX/Waiting/UXWaiting.cs @@ -39,22 +39,8 @@ namespace BITKit internal VisualElement container; internal Label label; internal Action OnDispose; - internal Action OnSetMessage; - public async void SetMessage(string message) - { - OnSetMessage?.Invoke(label,message); - // await UniTask.SwitchToMainThread(); - // BIT4Log.Log($"SetMessage {message}"); - // if(container.panel!=null) - // { - // label.text = message; - // } - // else - // { - // BIT4Log.Log("WaitingHandle is destroyed"); - // } - } - + internal Action OnSetMessage; + public void SetMessage(string message) => OnSetMessage?.Invoke(message); public void Dispose() => OnDispose?.Invoke(); } @@ -66,90 +52,61 @@ namespace BITKit [UXBindPath("waiting-root")] private VisualElement _root; - private Pool _pool; - private readonly HashSet _handles = new(); - private readonly ConcurrentQueue<(Label label,string text)> _messageQueue = new(); - + private readonly ConcurrentQueue<(WaitingHandle handle,string text)> _messageQueue = new(); + private readonly ConcurrentQueue _initializedHandles = new(); + private readonly ConcurrentQueue _disposeQueue = new(); + private readonly ValidHandle _visibleHandle = new(); public IUXWaitingHandle Get() { - var handle = _pool.Take(); - Active(); - _handles.Add(handle); - handle.OnDispose = () => Release(handle); - return handle; - async void Active() + var handle = new WaitingHandle(); + _initializedHandles.Enqueue(handle); + handle.OnSetMessage = (text) => { - await UniTask.SwitchToMainThread(); - handle.As().container.SetActive(true); - _root.SetActive(true); - } + _messageQueue.Enqueue((handle,text)); + }; + handle.OnDispose = () => + { + _disposeQueue.Enqueue(handle); + }; + return handle; } - public async void Release(IUXWaitingHandle handle) + public void Release(IUXWaitingHandle handle) { - await UniTask.SwitchToMainThread(); - if (destroyCancellationToken.IsCancellationRequested) return; - _pool.Return(handle.As()); - _handles.Remove(handle.As()); - Check(); + handle.Dispose(); } - private void Update() { + while (_initializedHandles.TryDequeue(out var handle)) + { + var container = _container.Create(handleTemplate); + handle.container = container; + handle.label = container.Get