diff --git a/Src/Unity/Scripts/Console/BITConsole.cs b/Src/Unity/Scripts/Console/BITConsole.cs index 9c62a2d..da5ab5b 100644 --- a/Src/Unity/Scripts/Console/BITConsole.cs +++ b/Src/Unity/Scripts/Console/BITConsole.cs @@ -60,7 +60,7 @@ namespace BITKit.Console BIT4Log.Warning("未找到ux_panel_settings"); throw; } - document.visualTreeAsset = await ModService.LoadAsset("ux_console"); + document.visualTreeAsset = await ModService.LoadAsset("ui_console"); _rootVisualElement = document.rootVisualElement; diff --git a/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs b/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs index b144757..5ddcbbd 100644 --- a/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs +++ b/Src/Unity/Scripts/UX/Service/UI Toolkit/UIToolKitPanel.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using System.Threading; using BITKit.Mod; using Cysharp.Threading.Tasks; @@ -8,6 +9,8 @@ using UnityEngine; using UnityEngine.Serialization; using UnityEngine.InputSystem; using UnityEngine.UIElements; +using Debug = UnityEngine.Debug; + // ReSharper disable MemberCanBeProtected.Global // ReSharper disable ClassWithVirtualMembersNeverInherited.Global // ReSharper disable UnusedMember.Global @@ -30,6 +33,7 @@ namespace BITKit.UX protected VisualTreeAsset VisualTreeAsset { get; private set; } private readonly ValidHandle _isBusy = new(); public readonly UniTaskCompletionSource WaitUtilInitialized = new(); + protected UniTaskCompletionSource WaitUtilTransitionCompleted=new(); protected UIToolKitPanel(IUXService uxService) { UXService = uxService; @@ -83,11 +87,26 @@ namespace BITKit.UX await OnInitiatedAsync.UniTaskFunc(); WaitUtilInitialized.TrySetResult(); + + RootVisualElement.RegisterCallback(OnTransitionRun); + RootVisualElement.RegisterCallback(OnTransitionStart); + RootVisualElement.RegisterCallback(OnTransitionEnd); + RootVisualElement.RegisterCallback(OnTransitionEnd); + + WaitUtilTransitionCompleted.TrySetResult(); } } - - protected virtual Optional EntryDuration { get; }= new(); - protected virtual Optional ExitDuration { get; }= new(); + + private void OnTransitionStart(TransitionStartEvent evt) + { + WaitUtilTransitionCompleted = new(); + } + + private void OnTransitionRun(TransitionRunEvent evt) + { + //WaitUtilTransitionCompleted = new(); + } + protected static readonly InputActionGroup InputActionGroup = new() { allowGlobalActivation = false, @@ -117,27 +136,21 @@ namespace BITKit.UX { await InitializeAsync(); + //WaitUtilTransitionCompleted = new(); + RootVisualElement.SetActive(true); + + //await UniTask.NextFrame(); + RootVisualElement.AddToClassList(USSEntry); - + + await UniTask.NextFrame(); + RootVisualElement.AddToClassList(USSEntryAsync); + + await UniTask.NextFrame(); - if (EntryDuration.Allow) - { - var task = EntryAsync(); - var durationTask = UniTask.Delay(TimeSpan.FromSeconds(EntryDuration.Value)); - - await durationTask; - RootVisualElement.RemoveFromClassList(USSEntry); - RootVisualElement.RemoveFromClassList(USSEntryAsync); - RootVisualElement.AddToClassList(USSEntered); - - await task; - } - else - { - await EntryAsync(); - } + await EntryAsync(); try { @@ -150,9 +163,17 @@ namespace BITKit.UX { BIT4Log.LogException(e); } + + await WaitUtilTransitionCompleted.Task; - } - public virtual UniTask EntryAsync() + RootVisualElement.AddToClassList(USSEntered); + } + private void OnTransitionEnd(TChangeEvent evt) + { + WaitUtilTransitionCompleted.TrySetResult(); + } + + public virtual UniTask EntryAsync() { return UniTask.CompletedTask; } @@ -160,11 +181,13 @@ namespace BITKit.UX { OnPanelEntry(); OnEntryCompleted?.Invoke(); + + RootVisualElement.RemoveFromClassList(USSEntry); + RootVisualElement.RemoveFromClassList(USSEntryAsync); } void IEntryElement.Exit() { - RootVisualElement?.AddToClassList(USSExit); OnPanelExit(); InputActionGroup.allowInput.RemoveElement(this); OnExit?.Invoke(); @@ -172,17 +195,26 @@ namespace BITKit.UX async UniTask IEntryElement.ExitAsync() { RootVisualElement?.RemoveFromClassList(USSEntered); + await UniTask.NextFrame(); + + RootVisualElement?.AddToClassList(USSExit); + + + await UniTask.NextFrame(); + RootVisualElement?.AddToClassList(USSExitAsync); + await UniTask.NextFrame(); + await OnExitAsync.UniTaskFunc(); - if (EntryDuration.Allow is false) return; - await UniTask.Delay(TimeSpan.FromSeconds(EntryDuration.Value)); + + await WaitUtilTransitionCompleted.Task; } void IEntryElement.Exited() { RootVisualElement?.RemoveFromClassList(USSExit); RootVisualElement?.RemoveFromClassList(USSExitAsync); - RootVisualElement?.AddToClassList(USSEntry); + RootVisualElement?.AddToClassList(USSExited); RootVisualElement?.SetActive(false); if (AllowReload) diff --git a/Src/Unity/UX/Common/Common.uss b/Src/Unity/UX/Common/Common.uss index 8d3aefd..e0f3f8a 100644 --- a/Src/Unity/UX/Common/Common.uss +++ b/Src/Unity/UX/Common/Common.uss @@ -3,6 +3,10 @@ -unity-font: initial; } +ScrollView { + --unity-metrics-single_line-height: 500px; +} + TabBar Button:disabled { opacity: 1; } @@ -444,6 +448,10 @@ Foldout Toggle Label { .bitkit-tool-tips.unity-label { background-color: rgb(58, 58, 58); color: rgb(255, 255, 255); + padding-top: 4px; + padding-right: 8px; + padding-bottom: 4px; + padding-left: 8px; } Button.clear {