using Cysharp.Threading.Tasks; using SampleProject.Config; using Simulator.Config; using Simulator.Data.Transport; using System; using System.Collections.Generic; using UnityEngine; using UVC.Core; using UVC.Data; using UVC.Factory; using UVC.Network; namespace Simulator.Data { public class ComponentsManager : SingletonScene { private Dictionary componentDatas = new Dictionary(); public static LogicDetailData logicDetailData; public static Webconfig webconfigData; public SimulatorCodeDataClass codedata; public event Action onProjectNameReceived; public event Action onUserNameReceived; private ComponentPoolManager _poolManager; private ComponentMqttHandler _mqttHandler; protected override void Init() { _poolManager = new ComponentPoolManager(transform); _poolManager.InitializeAllPools(); _mqttHandler = new ComponentMqttHandler(_poolManager); } public async UniTask Request() { var data = await HttpRequester.RequestGet($"{Constants.HTTP_DOMAIN}/simulation/logics/{SimulationConfig.logicId}", null, null, true); SetData(data); } public void RequestFromEvent(string projectId) { Request(projectId).Forget(); } public async UniTask Request(string projectId) { var data = await HttpRequester.RequestGet($"{Constants.HTTP_DOMAIN}/simulation/logics?projectIds={projectId}", null, null, true); SetData(data); } public void SetData(Totaljson totaljson) { var data = totaljson.data.rows[0]; webconfigData = data.webConfig; logicDetailData = data.data; SimulationConfig.userId = int.Parse(data.userId); PathIndexer.Build(logicDetailData); onProjectNameReceived?.Invoke(data.name); onUserNameReceived?.Invoke(data.user.name); componentDatas = _poolManager.SpawnComponents(data.data); if (data.data.camAngle != null) { FactoryCameraController.Instance.SetCamera(data.data.camAngle); } if (logicDetailData.templates != null) { if (logicDetailData.templates.prefabs.Count >= 1) { PrefabManager.Instance.SetPrefabs(logicDetailData.templates.prefabs); } } if (logicDetailData.transport_system != null) { if (logicDetailData.transport_system.node_networks != null && logicDetailData.transport_system.node_networks.Count >= 1) { foreach (var node_network in logicDetailData.transport_system.node_networks) { AGVNodeManager.Instance.SpawnNode(node_network.nodes); AGVNodeManager.Instance.LinkNode(node_network.edges); } } if (logicDetailData.transport_system.transport_managers != null && logicDetailData.transport_system.transport_managers.Count >= 1) { foreach (var transport_manager in logicDetailData.transport_system.transport_managers) { if (transport_manager.vehicle_fleets != null && transport_manager.vehicle_fleets.Count >= 1) { foreach (var vehicle in transport_manager.vehicle_fleets) { AGVManager.Instance.SpawnAGV(vehicle.vehicles, transport_manager.manager_type); } } } } } if (logicDetailData.production_system.conveyors != null && logicDetailData.production_system.conveyors.Count >= 1) { ConveyorManager.Instance.Build(logicDetailData.production_system.conveyors); } } public void SetMQTT(SimulatorCodeDataClass sdata) { codedata = sdata; _mqttHandler.SetMQTT(sdata, logicDetailData); } public void SubscribeTopic() { _mqttHandler.SubscribeTopic(componentDatas); } public ComponentBase GetComponentData(string name) { if (componentDatas.ContainsKey(name)) { return componentDatas[name]; } return null; } } }