23#include "Engine/GameViewportClient.h"
36 FSoftObjectPath SensorMapDataAssetPath(TEXT(
"/Game/Agrarsense/Data/Sensors/SensorMap"));
42 UE_LOG(LogTemp, Warning, TEXT(
"USensorFactory.cpp: Loaded SensorMapDataAsset successfully."));
46 UE_LOG(LogTemp, Warning, TEXT(
"USensorFactory.cpp: Loading SensorMapDataAsset failed."));
67 bool generateIdentifier = sensorIdentifier.IsEmpty();
68 bool generateName = sensorName.IsEmpty();
70 FString generatedSensorIdentifier;
74 if (generateIdentifier)
85 sensor->
SetSensorIdentifier(generateIdentifier ? generatedSensorIdentifier : sensorIdentifier);
96 ALidar* LidarSensor =
nullptr;
97 LidarSensor = SpawnSensor<ALidar>(transform, sensorIdentifier, sensorName,
true, Parent);
100 LidarSensor->
Init(lidarParameters, SimulateSensor);
109 RGBCamera = SpawnSensor<ACamera>(transform, sensorIdentifier, sensorName,
true, Parent);
112 RGBCamera->Init(cameraParameters, SimulateSensor);
121 ThermalCamera = SpawnSensor<AThermalCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
124 ThermalCamera->ThermalInit(thermalCameraParameters, SimulateSensor);
133 DepthCamera = SpawnSensor<ADepthCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
136 DepthCamera->DepthInit(depthCameraParameters, SimulateSensor);
169 DVSCamera = SpawnSensor<ADVSCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
172 DVSCamera->DVSInit(DVSCameraParameters, SimulateSensor);
180 ARadar* RadarSensor =
nullptr;
181 RadarSensor = SpawnSensor<ARadar>(transform, sensorIdentifier, sensorName,
true, Parent);
184 RadarSensor->
Init(radarParameters, SimulateSensor);
195 CollisionSensor = SpawnSensor<ACollisionSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
198 CollisionSensor->
Init(Owner, SimulateSensor);
199 CollisionSensor->AttachToActor(Owner, FAttachmentTransformRules::KeepWorldTransform);
203 return CollisionSensor;
211 TransformSensor = SpawnSensor<ATransformSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
214 TransformSensor->
Init(Parameters, SimulateSensor);
215 TransformSensor->AttachToActor(Parameters.
OwningActor, FAttachmentTransformRules::KeepWorldTransform);
219 return TransformSensor;
225 OverlapSensor = SpawnSensor<AOverlapSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
228 OverlapSensor->
Init(Parameters);
231 return OverlapSensor;
249 TSubclassOf<ASensorModel> modelClass =
nullptr;
255 if (matchFound && sensorData)
275 return createdModelActor;
278 UWorld* World =
nullptr;
279 if (GEngine && GEngine->GameViewport)
281 World = GEngine->GameViewport->GetWorld();
286 FVector sensorLocation = attachTo->GetActorLocation();
287 createdModelActor = World->SpawnActor<
ASensorModel>(modelClass);
289 if (createdModelActor)
291 createdModelActor->AttachToActor(attachTo, FAttachmentTransformRules::SnapToTargetIncludingScale);
299 return createdModelActor;
303T*
USensorFactory::SpawnSensor(
const FTransform& transform,
const FString& sensorIdentifier,
const FString& sensorName,
bool SpawnSensorModel, AActor* Parent)
305 UWorld* World =
nullptr;
307 if (GEngine && GEngine->GameViewport)
310 World = GEngine->GameViewport->GetWorld();
317 Sensor = World->SpawnActorDeferred<T>(T::StaticClass(), transform);
324 Sensor->SetParentActorPtr(Parent);
327 Sensor->FinishSpawning(transform);
329 if (SpawnSensorModel)
@ SemanticSegmentationCamera
@ InstanceSegmentationCamera
void Init(AActor *NewOwner, bool SimulateSensor=true)
void Init(FLidarParameters parameters, bool SimulateSensor=true)
void Init(FOverlapSensorParameters InParameters)
void Init(FRadarParameters parameters, bool SimulateSensor=true)
void SetAttachedToSensor(ASensor *NewAttachedToSensor)
void SetSensorModel(ASensorModel *NewSensorModel)
void SetSensorName(const FString newName)
FString GetSensorIdentifier() const
virtual ESensorTypes GetSensorType() const
void SetSensorIdentifier(const FString newIdentifier)
static FString ConvertSensorTypeToString(ESensorTypes Sensortype)
TSubclassOf< ASensorModel > ModelClass
static void SetSensorIdentifierAndNameWithFallbacks(ASensor *sensor, const FString &sensorIdentifier, const FString &sensorName)
static ASensorModel * SpawnModelClassForSensor(ASensor *attachTo)
static TWeakObjectPtr< USensorMapDataAsset > SensorMapDataAsset
static T * SpawnSensor(const FTransform &transform, const FString &sensorIdentifier, const FString &sensorName, bool SpawnSensorModel=true, AActor *Parent=nullptr)
static ASemanticSegmentationCamera * SpawnSegmentationCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ARadar * SpawnRadar(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FRadarParameters radarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ADVSCamera * SpawnDVSCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDVSCameraParameters DVSCameraParameters, bool SimulateSensor, AActor *Parent=nullptr)
static USensorMapDataAsset * GetSensorMapDataAsset()
static AOverlapSensor * SpawnOverlapSensor(const FTransform &transform, FOverlapSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, AActor *Parent=nullptr)
static AInstanceSegmentationCamera * SpawnInstanceSegmentationCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ALidar * SpawnLidarSensor(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FLidarParameters lidarParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ACamera * SpawnCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FCameraBaseParameters cameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ADepthCamera * SpawnDepthCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FDepthCameraParameters depthCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ASensorModel * SpawnModelClass(TSubclassOf< ASensorModel > modelClass, ASensor *attachTo)
static ATransformSensor * SpawnTransformSensor(const FTransform &transform, FTransformSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
static AThermalCamera * SpawnThermalCamera(const FTransform &transform, const FString sensorIdentifier, const FString sensorName, FThermalCameraParameters thermalCameraParameters, bool SimulateSensor=true, AActor *Parent=nullptr)
static ACollisionSensor * SpawnCollisionSensor(const FTransform &transform, AActor *Owner, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
USensorDataAsset * GetAssetDataBySensorType(ESensorTypes SensorType, bool &MatchFound)