AlicizaX/Client/Assets/Scripts/Startup/Framework/Procedure/PatchUpdater/ProcedureUpdateManifest.cs
2025-01-24 16:21:00 +08:00

67 lines
2.2 KiB
C#

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<IProcedureManager> procedureOwner)
{
base.OnEnter(procedureOwner);
if (GameApp.Resource.GamePlayMode == EPlayMode.OfflinePlayMode)
{
var buildInOperation = GameApp.Resource.UpdatePackageManifestAsync(GameApp.Resource.PackageVersion);
await buildInOperation.ToUniTask();
ChangeState<ProcedurePatchDone>(procedureOwner);
return;
}
GameApp.Event.Fire(this, AssetPatchStatesChangeEventArgs.Create(EPatchStates.UpdateManifest));
UpdateManifest(procedureOwner).Forget();
}
private async UniTaskVoid UpdateManifest(IFsm<IProcedureManager> 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<ProcedureCreateDownloader>(procedureOwner);
}
else
{
//更新失败
Debug.LogError(buildInOperation.Error);
GameApp.Event.Fire(this, AssetPatchManifestUpdateFailedEventArgs.Create(buildInOperation.Error));
//询问是否重试
//ChangeState<ProcedureUpdateManifest>(procedureOwner);
}
}
}
}