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); } } }