JisolGame/JNFrame2/Assets/HotMain/SHGame/Procedure/ProcedureUpdatePackageManifest.cs
2024-10-15 02:12:55 +08:00

70 lines
2.5 KiB
C#

using Cysharp.Threading.Tasks;
using SHFrame;
using SHFrame.FSM;
using YooAsset;
namespace Plugins.SHFrame.SHGame.Procedure
{
/// <summary>
/// 更新资源清单
/// </summary>
public class ProcedureUpdatePackageManifest : ProcedureBase
{
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
{
base.OnEnter(procedureOwner);
UpdateManifest(procedureOwner).Forget();
}
private async UniTask UpdateManifest(IFsm<IProcedureManager> procedureOwner)
{
bool result = await UpdatePackageManifest(ProcedureInitializePackage.RawFilePackageName);
if (!result) return;
result = await UpdatePackageManifest(ProcedureInitializePackage.DefaultPackageName);
if (!result) return;
//切换到更新资源版本
ChangeState<ProcedureUpdatePackageVersion>(procedureOwner);
}
/// <summary>
/// 更新资源清单
/// </summary>
/// <returns></returns>
private async UniTask<bool> UpdatePackageManifest(string packageName)
{
ResourcePackage package = YooAssets.GetPackage(packageName);
//2.获取资源版本
UpdatePackageVersionOperation updateVerOperation = package.UpdatePackageVersionAsync(false);
await updateVerOperation.ToUniTask();
// TODO 如果初始化失败弹出提示界面
if (updateVerOperation.Status != EOperationStatus.Succeed)
{
//初始化失败了 弹出提示
Log.Error($"{package.PackageName} 获取远程资源版本信息失败: {updateVerOperation.Error}");
return false;
}
string packageVersion = updateVerOperation.PackageVersion;
Log.Debug($"Init {package.PackageName} version : {packageVersion}");
//3.更新补丁清单
UpdatePackageManifestOperation updateManifestOperation = package.UpdatePackageManifestAsync(packageVersion);
await updateManifestOperation.ToUniTask();
if (updateManifestOperation.Status != EOperationStatus.Succeed)
{
//更新失败了 弹出提示
Log.Error($"{package.PackageName} 更新资源版本清单失败: {updateManifestOperation.Error}");
return false;
}
return true;
}
}
}