using System; using Cysharp.Threading.Tasks; using AlicizaX.Resource.Runtime; using AlicizaX; using Unity.Startup.UI; using YooAsset; namespace Unity.Startup.Procedure { internal sealed class ProcedureUpdateManifest : StateBase { private int maxFailedCount = 0; protected override async void OnEnter() { if (GameApp.Resource.PlayMode == EPlayMode.OfflinePlayMode) { var buildInOperation = GameApp.Resource.UpdatePackageManifestAsync(GameApp.Resource.PackageVersion); await buildInOperation.ToUniTask(); SwitchState(UpdateProcedureState.ProcedurePatchDone); return; } // GameApp.Event.Fire(this, AssetPatchStatesChangeEventArgs.Create(EPatchStates.UpdateManifest)); UpdateManifest().Forget(); } private async UniTaskVoid UpdateManifest() { await UniTask.Delay(TimeSpan.FromSeconds(0.5f)); UpdatePackageManifestOperation buildInOperation; if (GameApp.Resource.PlayMode == EPlayMode.EditorSimulateMode) { buildInOperation = GameApp.Resource.UpdatePackageManifestAsync("Simulate"); } else { buildInOperation = GameApp.Resource.UpdatePackageManifestAsync(GameApp.Resource.PackageVersion); } await buildInOperation.ToUniTask(); if (buildInOperation.Status == EOperationStatus.Succeed) { //更新成功 SwitchState(UpdateProcedureState.ProcedureCreateDownloader); } else { maxFailedCount++; Log.Error(buildInOperation.Error); if (maxFailedCount >= 3) { UILoadTipWindow.ShowUILoadTip(buildInOperation.Error).Forget(); return; } SwitchState(UpdateProcedureState.ProcedureUpdateManifest); } } } }