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 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); } } } }