添加了UXService->UIToolkitPanel的过渡动画
This commit is contained in:
parent
1c00d8fb1c
commit
f1a6ede97b
|
@ -60,7 +60,7 @@ namespace BITKit.Console
|
|||
BIT4Log.Warning<UXService>("未找到ux_panel_settings");
|
||||
throw;
|
||||
}
|
||||
document.visualTreeAsset = await ModService.LoadAsset<VisualTreeAsset>("ux_console");
|
||||
document.visualTreeAsset = await ModService.LoadAsset<VisualTreeAsset>("ui_console");
|
||||
|
||||
_rootVisualElement = document.rootVisualElement;
|
||||
|
||||
|
|
|
@ -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<TransitionRunEvent>(OnTransitionRun);
|
||||
RootVisualElement.RegisterCallback<TransitionStartEvent>(OnTransitionStart);
|
||||
RootVisualElement.RegisterCallback<TransitionEndEvent>(OnTransitionEnd);
|
||||
RootVisualElement.RegisterCallback<TransitionCancelEvent>(OnTransitionEnd);
|
||||
|
||||
WaitUtilTransitionCompleted.TrySetResult();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual Optional<float> EntryDuration { get; }= new();
|
||||
protected virtual Optional<float> 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);
|
||||
|
||||
if (EntryDuration.Allow)
|
||||
{
|
||||
var task = EntryAsync();
|
||||
var durationTask = UniTask.Delay(TimeSpan.FromSeconds(EntryDuration.Value));
|
||||
await UniTask.NextFrame();
|
||||
|
||||
await durationTask;
|
||||
RootVisualElement.RemoveFromClassList(USSEntry);
|
||||
RootVisualElement.RemoveFromClassList(USSEntryAsync);
|
||||
RootVisualElement.AddToClassList(USSEntered);
|
||||
|
||||
await task;
|
||||
}
|
||||
else
|
||||
{
|
||||
await EntryAsync();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -151,7 +164,15 @@ namespace BITKit.UX
|
|||
BIT4Log.LogException(e);
|
||||
}
|
||||
|
||||
await WaitUtilTransitionCompleted.Task;
|
||||
|
||||
RootVisualElement.AddToClassList(USSEntered);
|
||||
}
|
||||
private void OnTransitionEnd<TChangeEvent>(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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue