This commit is contained in:
CortexCore
2024-12-25 11:35:30 +08:00
parent 5b7ac3c361
commit b12511b825
8 changed files with 100 additions and 63 deletions

View File

@@ -159,7 +159,7 @@ namespace BITKit.UX
Dispose();
BITAppForUnity.AllowCursor.RemoveElement(this);
}
public void Show(string content, string title = "Alert", Action confirmAction = null, Action<bool> onChoose = null)
public async void Show(string content, string title = "Alert", Action confirmAction = null, Action<bool> onChoose = null)
{
PrintAlertMessage(new AlertMessage()
{

View File

@@ -12,19 +12,18 @@ namespace BITKit.UX
protected readonly CancellationTokenSource CancellationToken;
protected readonly IUXService UXService;
protected VisualElement RootVisualElement { get; set; }
private bool _initialized;
protected bool IsInitialized { get; private set; }
protected UIToolkitOverlay(IUXService uxService, CancellationTokenSource cancellationToken)
{
UXService = uxService;
CancellationToken = cancellationToken;
CancellationToken.Token.Register(Dispose);
}
protected abstract string DocumentPath { get; }
// ReSharper disable once MemberCanBeProtected.Global
public virtual async UniTask InitializeAsync()
{
if(_initialized)return;
if(IsInitialized)return;
var asset =await ModService.LoadAsset<VisualTreeAsset>(DocumentPath);
var root= RootVisualElement = UXService.Root.As<VisualElement>().Create(asset);
@@ -40,12 +39,12 @@ namespace BITKit.UX
root.style.right = 0;
UXUtils.Inject(this);
_initialized = true;
IsInitialized = true;
}
public virtual void Dispose()
{
if(RootVisualElement is null)return;
_initialized = false;
IsInitialized = false;
RootVisualElement.RemoveFromHierarchy();
RootVisualElement = null;
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using BITKit.Mod;
using Cysharp.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
@@ -17,10 +18,12 @@ namespace BITKit.UX
{
private readonly IAfterTicker _ticker;
private readonly IServiceProvider _serviceProvider;
public UXService(IAfterTicker ticker, IServiceProvider serviceProvider)
private readonly CancellationTokenSource _cancellationTokenSource;
public UXService(IAfterTicker ticker, IServiceProvider serviceProvider, CancellationTokenSource cancellationTokenSource)
{
_ticker = ticker;
_serviceProvider = serviceProvider;
_cancellationTokenSource = cancellationTokenSource;
_entryGroup.OnEntry += OnEntry;
_ticker.Add(OnTick);
}
@@ -74,6 +77,12 @@ namespace BITKit.UX
var gameObject = new GameObject("UXService");
Object.DontDestroyOnLoad(gameObject);
_cancellationTokenSource.Token.Register(() =>
{
Object.Destroy(gameObject);
});
var document = gameObject.AddComponent<UIDocument>();
try
{

View File

@@ -83,17 +83,9 @@ namespace BITKit
{
handle.Dispose();
}
private async void OnTick(float deltaTime)
private void OnTick(float deltaTime)
{
switch (_initializationState)
{
case InitializationState.None:
_initializationState = InitializationState.Initializing;
await InitializeAsync();
break;
case InitializationState.Initializing:
return;
}
if(_initializationState is not InitializationState.Initialized)return;
while (_initializedHandles.TryDequeue(out var handle))
{
var container = _container.Create(_handleTemplate);