using System; 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 ProcedureUpdateManifest : ProcedureBase { protected override async void OnEnter(IFsm procedureOwner) { base.OnEnter(procedureOwner); if (GameApp.Resource.GamePlayMode == EPlayMode.OfflinePlayMode) { var buildInOperation = GameApp.Resource.UpdatePackageManifestAsync(GameApp.Resource.PackageVersion); await buildInOperation.ToUniTask(); ChangeState(procedureOwner); return; } GameApp.Event.Fire(this, AssetPatchStatesChangeEventArgs.Create(ResourceComponent.BuildInPackageName, EPatchStates.UpdateManifest)); UpdateManifest(procedureOwner).Forget(); } private async UniTaskVoid UpdateManifest(IFsm procedureOwner) { await UniTask.Delay(TimeSpan.FromSeconds(0.5f)); UpdatePackageManifestOperation buildInOperation; if (GameApp.Resource.GamePlayMode == EPlayMode.EditorSimulateMode) { buildInOperation = GameApp.Resource.UpdatePackageManifestAsync("Simulate"); } else { buildInOperation = GameApp.Resource.UpdatePackageManifestAsync(GameApp.Resource.PackageVersion); } await buildInOperation.ToUniTask(); if (buildInOperation.Status == EOperationStatus.Succeed) { //更新成功 ChangeState(procedureOwner); } else { //更新失败 Debug.LogError(buildInOperation.Error); GameApp.Event.Fire(this, AssetPatchManifestUpdateFailedEventArgs.Create(ResourceComponent.BuildInPackageName, buildInOperation.Error)); //询问是否重试 //ChangeState(procedureOwner); } } } }