Files
plugin-library/Assets/00.StaryEvoTools/Runtime/HybridLoad/Fsm/ResStartState.cs
2026-04-12 16:48:41 +08:00

80 lines
2.9 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using Stary.Evo;
using Stary.Evo.InformationSave;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
namespace Stary.Evo
{
public class ResStartState : AbstractFSMIStateAsync
{
private DomainConfig domainConfig;
public ResStartState(IFsmSystemAsync system) : base(system)
{
}
public override UniTask OnEnterAsync()
{
return UniTask.CompletedTask;
}
public override async UniTask OnEnterAsync<T1, T2>(T1 param1, T2 param2)
{
if (AppConfig.DeveloperMode)
{
domainConfig = param1 as DomainConfig;
Type type = param2 as Type;
GameObject mainPrefab = null;
switch (domainConfig.loadResType)
{
case DomainConfig.LoadResType.Prefab:
mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig);
await DomainAssetSystem.SetTransformInfo(mainPrefab);
if (domainConfig.domainLoadType != DomainConfig.DomainLoadType.Static)
{
DomainAssetSystem.AddDomainNameEntity(domainConfig);
}
else
{
DomainAssetSystem.AddDomainStaticNameEntity(domainConfig);
}
break;
case DomainConfig.LoadResType.Scene:
var package = YooAssets.GetPackage(domainConfig.domain);
var sceneMode = domainConfig.loadSceneMode;
var physicsMode = LocalPhysicsMode.None;
SceneHandle handle =
package.LoadSceneAsync(domainConfig.sceneIdentifier, sceneMode, physicsMode);
await handle;
Scene targetScene = SceneManager.GetSceneByName(handle.SceneName);
SceneManager.SetActiveScene(targetScene);
mainPrefab = await DomainAssetSystem.LoadDomainPrefab(domainConfig);
SceneManager.MoveGameObjectToScene(mainPrefab, targetScene);
break;
}
await DomainAssetSystem.BindableProperty(domainConfig, mainPrefab, type);
}
}
public override async UniTask OnExitAsync()
{
if (domainConfig.loadResType == DomainConfig.LoadResType.Prefab &&
domainConfig.domainLoadType == DomainConfig.DomainLoadType.Single)
{
await DomainAssetSystem.UnloadDomainAsset();
}
else if (domainConfig.loadResType == DomainConfig.LoadResType.Scene)
{
await DomainAssetSystem.UnloadSceneAsset(domainConfig);
}
}
}
}