2024-10-15 18:26:52 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
using HotMain.SHGame.YooAsset;
|
|
|
|
|
using HotMain.SHGame.YooAsset.StreamingAssetsHelper;
|
2024-10-14 20:31:57 +08:00
|
|
|
|
using SHFrame;
|
|
|
|
|
using SHFrame.FSM;
|
|
|
|
|
using YooAsset;
|
|
|
|
|
|
2024-10-15 18:26:52 +08:00
|
|
|
|
namespace HotMain.SHGame.Procedure
|
2024-10-14 20:31:57 +08:00
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 初始化资源包
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class ProcedureInitializePackage : ProcedureBase
|
|
|
|
|
{
|
|
|
|
|
|
2024-10-15 18:26:52 +08:00
|
|
|
|
public static EPlayMode PlayMode = EPlayMode.HostPlayMode;
|
2024-10-14 20:31:57 +08:00
|
|
|
|
public static string RawFilePackageName = "RawFilePackage";
|
|
|
|
|
public static string DefaultPackageName = "DefaultPackage";
|
|
|
|
|
|
2024-10-15 02:12:55 +08:00
|
|
|
|
|
|
|
|
|
//热更新的dll名称
|
|
|
|
|
public static readonly string[] HotDllName =
|
|
|
|
|
{
|
2024-10-16 02:48:23 +08:00
|
|
|
|
"HotSamples.dll",
|
2024-10-15 02:12:55 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public static readonly string[] AotMetaAssemblyFiles =
|
|
|
|
|
{
|
|
|
|
|
"mscorlib.dll",
|
|
|
|
|
"System.dll",
|
|
|
|
|
"System.Core.dll",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnEnter(IFsm<IProcedureManager> procedureOwner)
|
2024-10-14 20:31:57 +08:00
|
|
|
|
{
|
|
|
|
|
base.OnEnter(procedureOwner);
|
|
|
|
|
InitPackage(procedureOwner).Forget();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async UniTask InitPackage(IFsm<IProcedureManager> procedureOwner)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Log.Debug($"YooAssets 开始初始化");
|
|
|
|
|
|
|
|
|
|
// 1.初始化资源系统
|
|
|
|
|
YooAssets.Initialize();
|
|
|
|
|
|
|
|
|
|
var rawFilePackage = await InitYooPackage(RawFilePackageName, true);
|
|
|
|
|
var defaultPackage = await InitYooPackage(DefaultPackageName, false);
|
|
|
|
|
Log.Debug($"YooAssets 初始化完成");
|
|
|
|
|
|
|
|
|
|
// 设置该资源包为默认的资源包,可以使用YooAssets相关加载接口加载该资源包内容。
|
|
|
|
|
YooAssets.SetDefaultPackage(defaultPackage);
|
|
|
|
|
|
|
|
|
|
// 切换到更新资源清单
|
|
|
|
|
ChangeState<ProcedureUpdatePackageManifest>(procedureOwner);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async UniTask<ResourcePackage> InitYooPackage(string packageName, bool isRaw)
|
|
|
|
|
{
|
|
|
|
|
// 创建资源包
|
|
|
|
|
var package = YooAssets.TryGetPackage(packageName) ?? YooAssets.CreatePackage(packageName);
|
|
|
|
|
|
|
|
|
|
InitializationOperation initOperation = null;
|
|
|
|
|
switch (PlayMode)
|
|
|
|
|
{
|
|
|
|
|
case EPlayMode.EditorSimulateMode:
|
|
|
|
|
// 编辑器模拟模式
|
|
|
|
|
EDefaultBuildPipeline buildPipeline = isRaw ? EDefaultBuildPipeline.RawFileBuildPipeline : EDefaultBuildPipeline.ScriptableBuildPipeline;
|
2024-10-15 02:12:55 +08:00
|
|
|
|
var initParametersEditorSimulateMode = new EditorSimulateModeParameters
|
|
|
|
|
{
|
|
|
|
|
SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(buildPipeline, packageName)
|
|
|
|
|
};
|
2024-10-14 20:31:57 +08:00
|
|
|
|
initOperation = package.InitializeAsync(initParametersEditorSimulateMode);
|
|
|
|
|
break;
|
|
|
|
|
case EPlayMode.OfflinePlayMode:
|
|
|
|
|
// 单机模式
|
2024-10-15 02:12:55 +08:00
|
|
|
|
var initParametersOfflinePlayMode = new OfflinePlayModeParameters
|
2024-10-14 20:31:57 +08:00
|
|
|
|
{
|
2024-10-15 02:12:55 +08:00
|
|
|
|
DecryptionServices = new FileStreamDecryption()
|
2024-10-14 20:31:57 +08:00
|
|
|
|
};
|
2024-10-15 02:12:55 +08:00
|
|
|
|
initOperation = package.InitializeAsync(initParametersOfflinePlayMode);
|
2024-10-14 20:31:57 +08:00
|
|
|
|
break;
|
|
|
|
|
case EPlayMode.HostPlayMode:
|
2024-10-15 18:26:52 +08:00
|
|
|
|
//联机运行模式
|
|
|
|
|
// 注意:GameQueryServices.cs 太空战机的脚本类,详细见StreamingAssetsHelper.cs
|
|
|
|
|
string HostServer = $"http://ngame.jisol.cn/JNGame2/{packageName}";
|
|
|
|
|
var createParameters = new HostPlayModeParameters();
|
|
|
|
|
createParameters.DecryptionServices = new FileStreamDecryption();
|
|
|
|
|
createParameters.BuildinQueryServices = new GameQueryServices();
|
|
|
|
|
createParameters.RemoteServices = new RemoteServices(HostServer, HostServer);
|
|
|
|
|
initOperation = package.InitializeAsync(createParameters);
|
2024-10-14 20:31:57 +08:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-15 02:12:55 +08:00
|
|
|
|
await initOperation.ToUniTask();
|
2024-10-14 20:31:57 +08:00
|
|
|
|
|
|
|
|
|
return package;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|