Files
XRLib/Assets/Scripts/Simulator/Components/ComponentsManager.cs

127 lines
4.6 KiB
C#
Raw Normal View History

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
}