BITKit/Src/Unity/Scripts/Application/UXApplicationService.cs

99 lines
2.5 KiB
C#

using System;
using BITKit.UX;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UIElements;
namespace BITKit.Apps
{
public class UXApplicationService : MonoBehaviour
{
[SerializeField] private bool externalDownload;
[SerializeField, SerializeReference, SubclassSelector]
private IApplicationService applicationService;
[SerializeField] private UIDocument document;
[UXBindPath("container")]
private VisualElement _container;
[UXBindPath("download-button")]
private Button _downloadButton;
[UXBindPath("cancel-download-button")]
private Button _cancelDownloadButton;
[UXBindPath("install-button")]
private Button _installButton;
[UXBindPath("latest-version-label")]
private Label _latestVersionLabel;
[UXBindPath("download-bar")]
private ProgressBar _downloadBar;
private void Start()
{
UXUtils.Inject(this);
applicationService.OnLatestVersionCheck += OnLatestVersionCheck;
applicationService.OnDownloadLatest+= OnDownloadLatest;
applicationService.OnDownloadProgress += OnDownloadProgress;
applicationService.OnDownloadComplete += OnDownloadComplete;
_downloadButton.clicked+=ConfirmDownload;
_cancelDownloadButton.clicked+=OnCancelDownload;
destroyCancellationToken.Register(Dispose);
_container.Navigate("entry-container");
}
private void Dispose()
{
applicationService.OnLatestVersionCheck -= OnLatestVersionCheck;
applicationService.OnDownloadLatest-= OnDownloadLatest;
applicationService.OnDownloadProgress -= OnDownloadProgress;
applicationService.OnDownloadComplete -= OnDownloadComplete;
}
private void OnDownloadLatest(string obj)
{
_container.Navigate("download-container");
}
private void ConfirmDownload()
{
if (externalDownload)
{
Application.OpenURL(applicationService.DownloadLatestUrl);
}
else
{
applicationService.DownloadLatestVersionAsync().Forget();
}
}
private void OnDownloadComplete(string obj)
{
_container.Navigate("complete-container");
}
private void OnDownloadProgress(float obj)
{
//设置为百分比
_downloadBar.value = obj;
//保留两位数小数点
_downloadBar.title = $"{obj * 100:0.00}%";
}
private void OnLatestVersionCheck(string obj)
{
if (Application.version != obj)
{
_latestVersionLabel.text =obj;
_container.Navigate("entryDownload-container");
}
else
{
_container.Navigate(null);
}
}
private void OnCancelDownload()
{
_container.Navigate(null);
}
}
}