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(string packageName, string name, string error) { GameApp.Event.Fire(this, AssetWebFileDownloadFailedEventArgs.Create(packageName, name, error)); ChangeState(procedureOwner); } downloader.OnDownloadErrorCallback = DownloaderOnDownloadErrorCallback; downloader.OnDownloadProgressCallback = OnDownloadProgressCallback; downloader.BeginDownload(); await downloader; // 检测下载结果 if (downloader.Status != EOperationStatus.Succeed) { Log.Debug("全部下载完毕!"); return; } ChangeState(procedureOwner); } private void OnDownloadProgressCallback(string packageName, int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes) { GameApp.Event.Fire(this, AssetDownloadProgressUpdateEventArgs.Create(packageName, totalDownloadCount, currentDownloadCount, totalDownloadBytes, currentDownloadBytes)); } } }