robotArm
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
using NUnit.Framework.Interfaces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
@@ -9,7 +8,7 @@ using UVC.Core;
|
||||
using UVC.Data;
|
||||
using UVC.Data.Core;
|
||||
using UVC.Data.Mqtt;
|
||||
using UVC.Factory.Component;
|
||||
using Simulator.Config;
|
||||
using UVC.Pool;
|
||||
|
||||
namespace Simulator.Data.Transport
|
||||
@@ -25,6 +24,8 @@ namespace Simulator.Data.Transport
|
||||
private readonly Dictionary<string, string> prefabPaths = new Dictionary<string, string>()
|
||||
{
|
||||
{"agv","prefabs/agv"},
|
||||
{"afl","prefabs/afl"},
|
||||
{"forkLift","prefabs/forkLift"}
|
||||
};
|
||||
|
||||
private GameObjectPool<AGV>? agvPool;
|
||||
@@ -39,9 +40,34 @@ namespace Simulator.Data.Transport
|
||||
return agvPool!;
|
||||
}
|
||||
}
|
||||
private GameObjectPool<AGV>? aflPool;
|
||||
public GameObjectPool<AGV> AFLPool
|
||||
{
|
||||
get
|
||||
{
|
||||
if (aflPool == null)
|
||||
{
|
||||
//Debug.LogError("Pool is not initialized. Please call InitializePoolAsync first.");
|
||||
}
|
||||
return aflPool!;
|
||||
}
|
||||
}
|
||||
private GameObjectPool<AGV>? forkLiftPool;
|
||||
public GameObjectPool<AGV> ForkLiftPool
|
||||
{
|
||||
get
|
||||
{
|
||||
if (forkLiftPool == null)
|
||||
{
|
||||
//Debug.LogError("Pool is not initialized. Please call InitializePoolAsync first.");
|
||||
}
|
||||
return forkLiftPool!;
|
||||
}
|
||||
}
|
||||
private DataMapper agvMoveMapper;
|
||||
private DataMapper agvLoadMapper;
|
||||
private DataMapper agvUnLoadMapper;
|
||||
private Dictionary<string, AGV> agvMap = new Dictionary<string, AGV>();
|
||||
|
||||
protected override void Init()
|
||||
{
|
||||
@@ -51,6 +77,7 @@ namespace Simulator.Data.Transport
|
||||
agvMoveDataMask.ObjectName = "agv"; // AGV 객체의 이름을 설정합니다.
|
||||
agvMoveDataMask.ObjectIdKey = "component_id"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
|
||||
agvMoveDataMask["component_id"] = "";
|
||||
agvMoveDataMask["component_type"] = "";
|
||||
agvMoveDataMask["event_name"] = "";
|
||||
agvMoveDataMask["timestamp"] = new DateTime();
|
||||
agvMoveDataMask["data"] = new DataMask()
|
||||
@@ -72,6 +99,7 @@ namespace Simulator.Data.Transport
|
||||
agvLoadDataMask.ObjectName = "agv"; // AGV 객체의 이름을 설정합니다.
|
||||
agvLoadDataMask.ObjectIdKey = "component_id"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
|
||||
agvLoadDataMask["component_id"] = "";
|
||||
agvLoadDataMask["component_type"] = "";
|
||||
agvLoadDataMask["event_name"] = "";
|
||||
agvLoadDataMask["timestamp"] = new DateTime();
|
||||
agvLoadDataMask["data"] = new DataMask()
|
||||
@@ -87,25 +115,46 @@ namespace Simulator.Data.Transport
|
||||
agvUnLoadDataMask.ObjectName = "agv"; // AGV 객체의 이름을 설정합니다.
|
||||
agvUnLoadDataMask.ObjectIdKey = "component_id"; // AGV의 고유 식별자로 사용할 키를 설정합니다.
|
||||
agvUnLoadDataMask["component_id"] = "";
|
||||
agvUnLoadDataMask["component_type"] = "";
|
||||
agvUnLoadDataMask["event_name"] = "";
|
||||
agvUnLoadDataMask["timestamp"] = new DateTime();
|
||||
agvUnLoadDataMask["data"] = new DataMask()
|
||||
{
|
||||
["component"]="",
|
||||
["component"] = "",
|
||||
["entity_ids"] = new List<string>(),
|
||||
};
|
||||
|
||||
agvUnLoadMapper = new DataMapper(agvUnLoadDataMask);
|
||||
});
|
||||
InitializeAFLPoolAsync().ContinueWith(() => { });
|
||||
InitializeForkLiftPoolAsync().ContinueWith(() => { });
|
||||
}
|
||||
|
||||
public void SpawnAGV(List<AGVData> datas)
|
||||
public void SpawnAGV(List<AGVData> datas, string type)
|
||||
{
|
||||
foreach (var data in datas)
|
||||
{
|
||||
var agv = agvPool.GetItem($"{data.name}");
|
||||
agv.data = data;
|
||||
agv.UpdatePosition(AGVNodeManager.Instance.GetNodePosition(data.initial_node));
|
||||
switch (type)
|
||||
{
|
||||
case "AGV":
|
||||
var agv = agvPool.GetItem($"{data.name}");
|
||||
agv.data = data;
|
||||
agv.UpdatePosition(AGVNodeManager.Instance.GetNodePosition(data.initial_node));
|
||||
agvMap.Add(data.name, agv);
|
||||
break;
|
||||
case "afl":
|
||||
var afl = aflPool.GetItem($"{data.name}");
|
||||
afl.data = data;
|
||||
afl.UpdatePosition(AGVNodeManager.Instance.GetNodePosition(data.initial_node));
|
||||
agvMap.Add(data.name, afl);
|
||||
break;
|
||||
case "forklift":
|
||||
var forkLift = forkLiftPool.GetItem($"{data.name}");
|
||||
forkLift.data = data;
|
||||
forkLift.UpdatePosition(AGVNodeManager.Instance.GetNodePosition(data.initial_node));
|
||||
agvMap.Add(data.name, forkLift);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,7 +186,24 @@ namespace Simulator.Data.Transport
|
||||
|
||||
DataObject? obj = data as DataObject;
|
||||
if (obj == null) return;
|
||||
AGV? agv = agvPool.GetItem(obj.GetString("component_id")!);
|
||||
var componentName = obj.GetString("component_id");
|
||||
AGV agv = agvMap[componentName];
|
||||
/*
|
||||
Debug.Log(obj.GetString("component_id"));
|
||||
Debug.Log(obj.GetString("component_type"));
|
||||
switch (componenttype)
|
||||
{
|
||||
case "agv":
|
||||
agv = agvPool.GetItem(obj.GetString("component_id")!);
|
||||
break;
|
||||
case "afl":
|
||||
agv = aflPool.GetItem(obj.GetString("component_id")!);
|
||||
break;
|
||||
case "forklift":
|
||||
agv = forkLiftPool.GetItem(obj.GetString("component_id")!);
|
||||
break;
|
||||
}
|
||||
*/
|
||||
switch (type)
|
||||
{
|
||||
case AGVDataType.Moving:
|
||||
@@ -147,8 +213,6 @@ namespace Simulator.Data.Transport
|
||||
agv.LoadEntity(obj);
|
||||
break;
|
||||
case AGVDataType.UnLoading:
|
||||
//Debug.Log("unload");
|
||||
//agv.UnLoadEntity(obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -165,5 +229,29 @@ namespace Simulator.Data.Transport
|
||||
}
|
||||
agvPool = new GameObjectPool<AGV>(prefab, transform);
|
||||
}
|
||||
private async UniTask InitializeAFLPoolAsync()
|
||||
{
|
||||
if (aflPool != null) return;
|
||||
|
||||
var prefab = await Resources.LoadAsync<GameObject>(prefabPaths["afl"]) as GameObject;
|
||||
if (prefab == null)
|
||||
{
|
||||
Debug.LogError($"Prefab not found at path: {prefabPaths["afl"]}");
|
||||
return;
|
||||
}
|
||||
aflPool = new GameObjectPool<AGV>(prefab, transform);
|
||||
}
|
||||
private async UniTask InitializeForkLiftPoolAsync()
|
||||
{
|
||||
if (forkLiftPool != null) return;
|
||||
|
||||
var prefab = await Resources.LoadAsync<GameObject>(prefabPaths["forkLift"]) as GameObject;
|
||||
if (prefab == null)
|
||||
{
|
||||
Debug.LogError($"Prefab not found at path: {prefabPaths["forkLift"]}");
|
||||
return;
|
||||
}
|
||||
forkLiftPool = new GameObjectPool<AGV>(prefab, transform);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user