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

99 lines
2.5 KiB
C#
Raw Normal View History

2023-08-23 01:59:26 +08:00
using System;
using BITKit.UX;
using Cysharp.Threading.Tasks;
using UnityEngine;
2024-07-29 09:39:22 +08:00
using UnityEngine.UIElements;
2023-08-23 01:59:26 +08:00
namespace BITKit.Apps
{
public class UXApplicationService : MonoBehaviour
{
2024-07-29 09:39:22 +08:00
[SerializeField] private bool externalDownload;
2023-08-23 01:59:26 +08:00
[SerializeField, SerializeReference, SubclassSelector]
private IApplicationService applicationService;
2024-07-29 09:39:22 +08:00
[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;
2023-08-23 01:59:26 +08:00
2024-07-29 09:39:22 +08:00
private void Start()
2023-08-23 01:59:26 +08:00
{
2024-07-29 09:39:22 +08:00
UXUtils.Inject(this);
2023-08-23 01:59:26 +08:00
applicationService.OnLatestVersionCheck += OnLatestVersionCheck;
applicationService.OnDownloadLatest+= OnDownloadLatest;
applicationService.OnDownloadProgress += OnDownloadProgress;
applicationService.OnDownloadComplete += OnDownloadComplete;
2024-07-29 09:39:22 +08:00
_downloadButton.clicked+=ConfirmDownload;
_cancelDownloadButton.clicked+=OnCancelDownload;
destroyCancellationToken.Register(Dispose);
2025-04-14 15:39:28 +08:00
_container.Navigate("entry-container");
2023-08-23 01:59:26 +08:00
}
2024-07-29 09:39:22 +08:00
private void Dispose()
2023-08-23 01:59:26 +08:00
{
applicationService.OnLatestVersionCheck -= OnLatestVersionCheck;
applicationService.OnDownloadLatest-= OnDownloadLatest;
applicationService.OnDownloadProgress -= OnDownloadProgress;
applicationService.OnDownloadComplete -= OnDownloadComplete;
}
private void OnDownloadLatest(string obj)
{
2025-04-14 15:39:28 +08:00
_container.Navigate("download-container");
2023-08-23 01:59:26 +08:00
}
private void ConfirmDownload()
{
2024-07-29 09:39:22 +08:00
if (externalDownload)
{
Application.OpenURL(applicationService.DownloadLatestUrl);
}
else
{
applicationService.DownloadLatestVersionAsync().Forget();
}
2023-08-23 01:59:26 +08:00
}
private void OnDownloadComplete(string obj)
{
2025-04-14 15:39:28 +08:00
_container.Navigate("complete-container");
2023-08-23 01:59:26 +08:00
}
private void OnDownloadProgress(float obj)
{
2024-07-29 09:39:22 +08:00
//设置为百分比
_downloadBar.value = obj;
//保留两位数小数点
_downloadBar.title = $"{obj * 100:0.00}%";
2023-08-23 01:59:26 +08:00
}
private void OnLatestVersionCheck(string obj)
{
if (Application.version != obj)
{
2024-07-29 09:39:22 +08:00
_latestVersionLabel.text =obj;
2025-04-14 15:39:28 +08:00
_container.Navigate("entryDownload-container");
2023-08-23 01:59:26 +08:00
}
else
{
2025-04-14 15:39:28 +08:00
_container.Navigate(null);
2023-08-23 01:59:26 +08:00
}
}
private void OnCancelDownload()
{
2025-04-14 15:39:28 +08:00
_container.Navigate(null);
2023-08-23 01:59:26 +08:00
}
}
}