22#include "Engine/GameViewportClient.h"
35 FSoftObjectPath SensorMapDataAssetPath(TEXT(
"/Game/Agrarsense/Data/Sensors/SensorMap"));
41 UE_LOG(LogTemp, Warning, TEXT(
"USensorFactory.cpp: Loaded SensorMapDataAsset successfully."));
45 UE_LOG(LogTemp, Warning, TEXT(
"USensorFactory.cpp: Loading SensorMapDataAsset failed."));
66 bool generateIdentifier = sensorIdentifier.IsEmpty();
67 bool generateName = sensorName.IsEmpty();
69 FString generatedSensorIdentifier;
73 if (generateIdentifier)
84 sensor->
SetSensorIdentifier(generateIdentifier ? generatedSensorIdentifier : sensorIdentifier);
95 ALidar* LidarSensor =
nullptr;
96 LidarSensor = SpawnSensor<ALidar>(transform, sensorIdentifier, sensorName,
true, Parent);
99 LidarSensor->
Init(lidarParameters, SimulateSensor);
108 RGBCamera = SpawnSensor<ACamera>(transform, sensorIdentifier, sensorName,
true, Parent);
111 RGBCamera->Init(cameraParameters, SimulateSensor);
120 ThermalCamera = SpawnSensor<AThermalCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
123 ThermalCamera->ThermalInit(thermalCameraParameters, SimulateSensor);
132 DepthCamera = SpawnSensor<ADepthCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
135 DepthCamera->DepthInit(depthCameraParameters, SimulateSensor);
156 DVSCamera = SpawnSensor<ADVSCamera>(transform, sensorIdentifier, sensorName,
true, Parent);
159 DVSCamera->DVSInit(DVSCameraParameters, SimulateSensor);
167 ARadar* RadarSensor =
nullptr;
168 RadarSensor = SpawnSensor<ARadar>(transform, sensorIdentifier, sensorName,
true, Parent);
171 RadarSensor->
Init(radarParameters, SimulateSensor);
182 CollisionSensor = SpawnSensor<ACollisionSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
185 CollisionSensor->
Init(Owner, SimulateSensor);
186 CollisionSensor->AttachToActor(Owner, FAttachmentTransformRules::KeepWorldTransform);
190 return CollisionSensor;
198 TransformSensor = SpawnSensor<ATransformSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
201 TransformSensor->
Init(Parameters, SimulateSensor);
202 TransformSensor->AttachToActor(Parameters.
OwningActor, FAttachmentTransformRules::KeepWorldTransform);
206 return TransformSensor;
212 OverlapSensor = SpawnSensor<AOverlapSensor>(transform, sensorIdentifier, sensorName,
false, Parent);
215 OverlapSensor->
Init(Parameters);
218 return OverlapSensor;
236 TSubclassOf<ASensorModel> modelClass =
nullptr;
242 if (matchFound && sensorData)
262 return createdModelActor;
265 UWorld* World =
nullptr;
266 if (GEngine && GEngine->GameViewport)
268 World = GEngine->GameViewport->GetWorld();
273 FVector sensorLocation = attachTo->GetActorLocation();
274 createdModelActor = World->SpawnActor<
ASensorModel>(modelClass);
276 if (createdModelActor)
278 createdModelActor->AttachToActor(attachTo, FAttachmentTransformRules::SnapToTargetIncludingScale);
286 return createdModelActor;
290T*
USensorFactory::SpawnSensor(
const FTransform& transform,
const FString& sensorIdentifier,
const FString& sensorName,
bool SpawnSensorModel, AActor* Parent)
292 UWorld* World =
nullptr;
294 if (GEngine && GEngine->GameViewport)
297 World = GEngine->GameViewport->GetWorld();
304 Sensor = World->SpawnActorDeferred<T>(T::StaticClass(), transform);
311 Sensor->SetParentActorPtr(Parent);
314 Sensor->FinishSpawning(transform);
316 if (SpawnSensorModel)
@ SemanticSegmentationCamera
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 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)