using System.Collections; using Cysharp.Threading.Tasks; using AlicizaX.Resource.Runtime; using AlicizaX; using UnityEngine; using YooAsset; namespace Unity.Startup.Procedure { internal sealed class ProcedureDownloadWebFiles : StateBase { protected override void OnEnter() { // GameApp.Event.Fire(this, AssetPatchStatesChangeEventArgs.Create(EPatchStates.DownloadWebFiles)); BeginDownload().Forget(); } private async UniTaskVoid BeginDownload() { var downloader = StartupSetting.Downloader; // 注册下载回调 void DownloaderOnDownloadErrorCallback(DownloadErrorData data) { Log.Error($"PackagegName:{data.PackageName} FileName:{data.FileName} Error:{data.ErrorInfo}"); SwitchState(UpdateProcedureState.ProcedureCreateDownloader); } downloader.DownloadErrorCallback = DownloaderOnDownloadErrorCallback; downloader.DownloadUpdateCallback = OnDownloadProgressCallback; downloader.BeginDownload(); await downloader; // 检测下载结果 if (downloader.Status != EOperationStatus.Succeed) { Log.Error("资源更新失败!"); return; } SwitchState(UpdateProcedureState.ProcedurePatchDone); } private void OnDownloadProgressCallback(DownloadUpdateData data) { GameApp.Event.Fire(this, AssetDownloadProgressUpdateEventArgs.Create(data.PackageName, data.TotalDownloadCount, data.CurrentDownloadCount, data.TotalDownloadBytes, data.CurrentDownloadBytes)); } } }