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

@@ -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
{