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