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

170 lines
5.3 KiB
C#

using System.Threading.Tasks;
using UnityEngine;
namespace Stary.Evo
{
public class HybridClREntrance : MonoBehaviour
{
public static HybridClREntrance Global;
public StageType stage;
public string domain;
private IFsmSystemAsync _loadSystem;
/// <summary>
/// 即将加载的domain场景
/// </summary>
public string loadDomain;
private async void Awake()
{
if (Global == null)
{
Global = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
return;
}
_loadSystem = new FsmSystemAsync();
// 初始化日志
_loadSystem.AddState(new HotFixStartState(_loadSystem));
_loadSystem.AddState(new ResEditorSimulateState(_loadSystem));
_loadSystem.AddState(new HotFixDllState(_loadSystem));
_loadSystem.AddState(new ResStartState(_loadSystem));
//初始化读取资源配置表
HotfixMainResDomain hotfixMainResDomain = Resources.Load<HotfixMainResDomain>("HotfixMainResDomain");
if (hotfixMainResDomain != null)
{
AppConfig.IpConfig = hotfixMainResDomain.hotfixMainResDomainEntity.ipconfig;
AppConfig.UserName = hotfixMainResDomain.hotfixMainResDomainEntity.username;
AppConfig.PassWord = hotfixMainResDomain.hotfixMainResDomainEntity.password;
AppConfig.ProductName = Application.identifier;
AppConfig.MainDomainVersion = hotfixMainResDomain.hotfixMainResDomainEntity.mainDomainVersion;
}
Debug.Log($"UnityEvo:读取资源配置表成功...{AppConfig.IpConfig}{AppConfig.UserName}{AppConfig.PassWord}");
//登录
string url = AppConfig.IpConfig + "/Authentication/login";
AppConfig.IsLogin = await WebRequestSystem.Login(url, AppConfig.UserName, AppConfig.PassWord);
}
private void Start()
{
#if !UNITY_EDITOR
if(string.IsNullOrEmpty(domain))
domain = "Main";
#elif UNITY_EDITOR
// var immersalSDK = FindObjectOfType<ImmersalSDK>();
// immersalSDK.onPoseFound.Invoke();
#endif
if (stage == StageType.Developer)
{
AppConfig.PackageDomainName = domain;
}
else if (stage == StageType.Originality)
{
AppConfig.PackageDomainName = "Main";
}
_loadSystem.SetCurState(nameof(HotFixStartState));
}
private void Update()
{
if (_loadSystem.CurState != null)
_loadSystem.CurState.OnUpdate();
}
public async Task OpenDomain()
{
AppConfig.PackageDomainName = domain;
await _loadSystem.SetCurState(nameof(HotFixStartState));
}
public async void OpenDomain(string domain, OpenDomainType openDomainType)
{
this.domain = domain;
DomainAssetSystem.SetOpenDomainType(openDomainType);
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
await _loadSystem.SetCurState(nameof(HotFixStartState));
}
else
{
Debug.Log($"domain:{domain} 已打开, 请勿重复打开");
}
}
public void OpenDomain(string domain, TransformCtor transformCtor)
{
this.domain = domain;
DomainAssetSystem.SetOpenDomainType(OpenDomainType.ImageTracked);
DomainAssetSystem.SetTransformCtor(transformCtor);
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
_loadSystem.SetCurState(nameof(HotFixStartState));
}
else
{
Debug.Log($"domain:{domain} 已打开, 请勿重复打开");
}
}
public void OpenDomain(string domain, Transform transform)
{
this.domain = domain;
DomainAssetSystem.SetOpenDomainType(OpenDomainType.ImageTracked);
DomainAssetSystem.SetTransformCtor(transform);
if (this.domain != AppConfig.PackageDomainName)
{
AppConfig.PackageDomainName = domain;
_loadSystem.SetCurState(nameof(HotFixStartState));
}
else
{
Debug.Log($"domain:{domain} 已打开, 请勿重复打开");
}
}
public void CloseDomain()
{
if (_loadSystem != null)
_loadSystem.SetCurState(nameof(DefaultStateAsync));
}
}
/// <summary>
/// 打开的项目类型
/// DEFAULT:默认打开方式
/// VIOICE:语音打开方式
/// </summary>
public enum OpenDomainType
{
Editor,
PointCloud,
VIOICE,
ImageTracked
}
public enum StageType
{
/// <summary>
/// 创意阶段
/// </summary>
Originality,
/// <summary>
/// 开发者阶段
/// </summary>
Developer,
}
}