using System.Threading.Tasks; using UnityEngine; namespace Stary.Evo { public class HybridClREntrance : MonoBehaviour { public static HybridClREntrance Global; public StageType stage; public string domain; private FsmLoadSystem _devLoadSystem; private FsmLoadSystem _originalityLoadSystem; /// /// 即将加载的domain场景 /// public string loadDomain; private void Awake() { if (Global == null) { Global = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); return; } _devLoadSystem = new FsmLoadSystem(); // 初始化日志 _devLoadSystem.AddState(new ResStartState(_devLoadSystem)); _devLoadSystem.AddState(new ResEditorSimulateState(_devLoadSystem)); _devLoadSystem.AddState(new ResUpdateLocalState(_devLoadSystem)); _devLoadSystem.AddState(new HotFixState(_devLoadSystem)); _devLoadSystem.AddState(new LoadResState(_devLoadSystem)); //_fsmSystem.AddState(new LoadResMainState(_fsmSystem)); } private void Start() { #if !UNITY_EDITOR if(string.IsNullOrEmpty(domain)) domain = "Main"; #elif UNITY_EDITOR // var immersalSDK = FindObjectOfType(); // immersalSDK.onPoseFound.Invoke(); #endif if (stage == StageType.Developer) { AppConfig.PackageDomainName = domain; } else if (stage == StageType.Originality) { AppConfig.PackageDomainName = "Main"; } _devLoadSystem.SetCurState(nameof(ResStartState)); } private void Update() { if (_devLoadSystem.CurState != null) _devLoadSystem.CurState.OnUpdate(); } public async Task OpenDomain() { AppConfig.PackageDomainName = domain; if (stage == StageType.Developer) { await _devLoadSystem.SetCurState(nameof(ResStartState)); } else if (stage == StageType.Originality) { if (_originalityLoadSystem == null) { _originalityLoadSystem = new FsmLoadSystem(); _originalityLoadSystem.AddState(new ArtResStartState(_originalityLoadSystem)); _originalityLoadSystem.AddState(new ArtResUpdateLocalState(_originalityLoadSystem)); _originalityLoadSystem.AddState(new ArtResEditorSimulateState(_originalityLoadSystem)); } await _originalityLoadSystem.SetCurState(nameof(ArtResStartState)); } } public void OpenDomain(string domain, OpenDomainType openDomainType) { this.domain = domain; _devLoadSystem.SetOpenDomainType(openDomainType); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; _devLoadSystem.SetCurState(nameof(ResStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void OpenDomain(string domain, TransformCtor transformCtor) { this.domain = domain; _devLoadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); _devLoadSystem.SetTransformCtor(transformCtor); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; _devLoadSystem.SetCurState(nameof(ResStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void OpenDomain(string domain, Transform transform) { this.domain = domain; _devLoadSystem.SetOpenDomainType(OpenDomainType.ImageTracked); _devLoadSystem.SetTransformCtor(transform); if (this.domain != AppConfig.PackageDomainName) { AppConfig.PackageDomainName = domain; _devLoadSystem.SetCurState(nameof(ResStartState)); } else { Debug.Log($"domain:{domain} 已打开, 请勿重复打开"); } } public void CloseDomain() { if (_devLoadSystem != null) _devLoadSystem.SetCurState(nameof(DefaultStateAsync)); if (_originalityLoadSystem != null) _originalityLoadSystem.SetCurState(nameof(DefaultStateAsync)); } } /// /// 打开的项目类型 /// DEFAULT:默认打开方式 /// VIOICE:语音打开方式 /// public enum OpenDomainType { Editor, PointCloud, VIOICE, ImageTracked } public enum StageType { /// /// 创意阶段 /// Originality, /// /// 开发者阶段 /// Developer, } }