2025-10-16 10:24:29 +09:00
|
|
|
using Cysharp.Threading.Tasks;
|
2025-11-11 09:42:47 +09:00
|
|
|
using SampleProject.Config;
|
2025-10-16 10:24:29 +09:00
|
|
|
using Simulator.Config;
|
2025-11-04 11:02:02 +09:00
|
|
|
using Simulator.Data.Transport;
|
|
|
|
|
using System;
|
2025-10-16 10:24:29 +09:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UVC.Core;
|
|
|
|
|
using UVC.Data;
|
2026-02-03 11:40:26 +09:00
|
|
|
using UVC.Factory;
|
2025-10-16 10:24:29 +09:00
|
|
|
using UVC.Network;
|
|
|
|
|
|
2025-11-04 11:02:02 +09:00
|
|
|
namespace Simulator.Data
|
2025-10-16 10:24:29 +09:00
|
|
|
{
|
2025-11-04 11:02:02 +09:00
|
|
|
public class ComponentsManager : SingletonScene<ComponentsManager>
|
|
|
|
|
{
|
2026-02-25 16:30:12 +09:00
|
|
|
private Dictionary<string, ComponentBase> componentDatas = new Dictionary<string, ComponentBase>();
|
2025-10-16 10:24:29 +09:00
|
|
|
|
2026-01-16 11:36:54 +09:00
|
|
|
public static LogicDetailData logicDetailData;
|
2026-02-03 11:40:26 +09:00
|
|
|
public static Webconfig webconfigData;
|
2025-11-04 11:02:02 +09:00
|
|
|
public SimulatorCodeDataClass codedata;
|
2025-10-16 10:24:29 +09:00
|
|
|
|
2026-02-25 16:30:12 +09:00
|
|
|
public event Action<string> onProjectNameReceived;
|
|
|
|
|
public event Action<string> onUserNameReceived;
|
2025-10-16 10:24:29 +09:00
|
|
|
|
2026-02-25 16:30:12 +09:00
|
|
|
private ComponentPoolManager _poolManager;
|
|
|
|
|
private ComponentMqttHandler _mqttHandler;
|
2025-12-11 18:26:09 +09:00
|
|
|
|
2025-11-04 11:02:02 +09:00
|
|
|
protected override void Init()
|
|
|
|
|
{
|
2026-02-25 16:30:12 +09:00
|
|
|
_poolManager = new ComponentPoolManager(transform);
|
|
|
|
|
_poolManager.InitializeAllPools();
|
|
|
|
|
_mqttHandler = new ComponentMqttHandler(_poolManager);
|
2025-11-04 11:02:02 +09:00
|
|
|
}
|
2025-10-16 10:24:29 +09:00
|
|
|
|
2026-02-25 16:30:12 +09:00
|
|
|
public async UniTask Request()
|
2025-10-16 10:24:29 +09:00
|
|
|
{
|
2025-12-08 10:59:29 +09:00
|
|
|
var data = await HttpRequester.RequestGet<Totaljson>($"{Constants.HTTP_DOMAIN}/simulation/logics/{SimulationConfig.logicId}", null, null, true);
|
2026-02-24 14:07:57 +09:00
|
|
|
SetData(data);
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-25 16:30:12 +09:00
|
|
|
public void RequestFromEvent(string projectId)
|
|
|
|
|
{
|
|
|
|
|
Request(projectId).Forget();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public async UniTask Request(string projectId)
|
2026-02-24 14:07:57 +09:00
|
|
|
{
|
|
|
|
|
var data = await HttpRequester.RequestGet<Totaljson>($"{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;
|
2026-02-25 16:30:12 +09:00
|
|
|
SimulationConfig.userId = int.Parse(data.userId);
|
2025-12-24 17:36:01 +09:00
|
|
|
PathIndexer.Build(logicDetailData);
|
2026-02-25 16:30:12 +09:00
|
|
|
onProjectNameReceived?.Invoke(data.name);
|
|
|
|
|
onUserNameReceived?.Invoke(data.user.name);
|
|
|
|
|
|
|
|
|
|
componentDatas = _poolManager.SpawnComponents(data.data);
|
|
|
|
|
|
2026-02-24 14:07:57 +09:00
|
|
|
if (data.data.camAngle != null)
|
2026-02-03 11:40:26 +09:00
|
|
|
{
|
2026-02-24 14:07:57 +09:00
|
|
|
FactoryCameraController.Instance.SetCamera(data.data.camAngle);
|
2026-02-03 11:40:26 +09:00
|
|
|
}
|
2025-12-11 18:26:09 +09:00
|
|
|
if (logicDetailData.templates != null)
|
|
|
|
|
{
|
|
|
|
|
if (logicDetailData.templates.prefabs.Count >= 1)
|
|
|
|
|
{
|
|
|
|
|
PrefabManager.Instance.SetPrefabs(logicDetailData.templates.prefabs);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-11 09:42:47 +09:00
|
|
|
if (logicDetailData.transport_system != null)
|
|
|
|
|
{
|
|
|
|
|
if (logicDetailData.transport_system.node_networks != null && logicDetailData.transport_system.node_networks.Count >= 1)
|
|
|
|
|
{
|
2026-02-03 11:40:26 +09:00
|
|
|
foreach (var node_network in logicDetailData.transport_system.node_networks)
|
|
|
|
|
{
|
|
|
|
|
AGVNodeManager.Instance.SpawnNode(node_network.nodes);
|
2026-02-10 17:01:25 +09:00
|
|
|
AGVNodeManager.Instance.LinkNode(node_network.edges);
|
2026-02-03 11:40:26 +09:00
|
|
|
}
|
2025-11-11 09:42:47 +09:00
|
|
|
}
|
2025-12-08 10:59:29 +09:00
|
|
|
if (logicDetailData.transport_system.transport_managers != null && logicDetailData.transport_system.transport_managers.Count >= 1)
|
2025-11-11 09:42:47 +09:00
|
|
|
{
|
2025-12-08 10:59:29 +09:00
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-11 09:42:47 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (logicDetailData.production_system.conveyors != null && logicDetailData.production_system.conveyors.Count >= 1)
|
|
|
|
|
{
|
|
|
|
|
ConveyorManager.Instance.Build(logicDetailData.production_system.conveyors);
|
|
|
|
|
}
|
2025-11-05 11:53:37 +09:00
|
|
|
}
|
|
|
|
|
|
2025-12-08 10:59:29 +09:00
|
|
|
public void SetMQTT(SimulatorCodeDataClass sdata)
|
2025-11-05 11:53:37 +09:00
|
|
|
{
|
2025-11-11 09:42:47 +09:00
|
|
|
codedata = sdata;
|
2026-02-25 16:30:12 +09:00
|
|
|
_mqttHandler.SetMQTT(sdata, logicDetailData);
|
2025-11-04 11:02:02 +09:00
|
|
|
}
|
2025-10-16 10:24:29 +09:00
|
|
|
|
2025-11-11 09:42:47 +09:00
|
|
|
public void SubscribeTopic()
|
2025-10-16 10:24:29 +09:00
|
|
|
{
|
2026-02-25 16:30:12 +09:00
|
|
|
_mqttHandler.SubscribeTopic(componentDatas);
|
2025-10-16 10:24:29 +09:00
|
|
|
}
|
2026-02-04 15:51:59 +09:00
|
|
|
|
|
|
|
|
public ComponentBase GetComponentData(string name)
|
|
|
|
|
{
|
|
|
|
|
if (componentDatas.ContainsKey(name))
|
|
|
|
|
{
|
|
|
|
|
return componentDatas[name];
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2025-10-16 10:24:29 +09:00
|
|
|
}
|
2026-02-25 16:30:12 +09:00
|
|
|
}
|