Agrarsense
Static Public Member Functions | Static Private Member Functions | Static Private Attributes | List of all members
USensorFactory Class Reference

#include <SensorFactory.h>

Inheritance diagram for USensorFactory:
Inheritance graph
[legend]
Collaboration diagram for USensorFactory:
Collaboration graph
[legend]

Static Public Member Functions

static USensorMapDataAssetGetSensorMapDataAsset ()
 
static ALidarSpawnLidarSensor (const FSensorSpawnParameters SpawnParameters, FLidarParameters SensorParameters)
 
static ACameraSpawnCamera (const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static AThermalCameraSpawnThermalCamera (const FSensorSpawnParameters SpawnParameters, FThermalCameraParameters SensorParameters)
 
static ADepthCameraSpawnDepthCamera (const FSensorSpawnParameters SpawnParameters, FDepthCameraParameters SensorParameters)
 
static ASemanticSegmentationCameraSpawnSegmentationCamera (const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static AInstanceSegmentationCameraSpawnInstanceSegmentationCamera (const FSensorSpawnParameters SpawnParameters, FCameraBaseParameters SensorParameters)
 
static ADVSCameraSpawnDVSCamera (const FSensorSpawnParameters SpawnParameters, FDVSCameraParameters SensorParameters)
 
static ARadarSpawnRadar (const FSensorSpawnParameters SpawnParameters, FRadarParameters SensorParameters)
 
static ACollisionSensorSpawnCollisionSensor (const FSensorSpawnParameters SpawnParameters)
 
static ATransformSensorSpawnTransformSensor (const FSensorSpawnParameters SpawnParameters, FTransformSensorParameters SensorParameters)
 
static AOverlapSensorSpawnOverlapSensor (const FSensorSpawnParameters SpawnParameters, FOverlapSensorParameters SensorParameters)
 

Static Private Member Functions

template<typename T >
static T * SpawnSensor (const FSensorSpawnParameters &SpawnParameters, bool SpawnSensorModel=true)
 
static void SetSensorIdentifierAndNameWithFallbacks (ASensor *Sensor, const FString &SensorIdentifier, const FString &SensorName)
 
static ASensorModelSpawnModelClassForSensor (ASensor *attachTo)
 
static ASensorModelSpawnModelClass (TSubclassOf< ASensorModel > ModelClass, ASensor *AttachTo)
 
static void Initialize ()
 
static UWorld * GetGameWorld ()
 Gets the current game world from the viewport. More...
 

Static Private Attributes

static TWeakObjectPtr< USensorMapDataAssetSensorMapDataAsset
 

Detailed Description

SensorFactory is a UBlueprintFunctionLibrary based class in charge of spawning sensors. Sensors should only be spawned through this class to ensure proper setup (settings params, spawning visual model etc). Note. This only works during runtime, don't call these functions in Editor without play mode on.

Definition at line 68 of file SensorFactory.h.

Member Function Documentation

◆ GetGameWorld()

UWorld * USensorFactory::GetGameWorld ( )
staticprivate

Gets the current game world from the viewport.

Returns
Pointer to the current UWorld, or nullptr if unavailable.

Definition at line 279 of file SensorFactory.cpp.

280{
281 return (GEngine && GEngine->GameViewport) ? GEngine->GameViewport->GetWorld() : nullptr;
282}

Referenced by SpawnModelClass(), and SpawnSensor().

◆ GetSensorMapDataAsset()

USensorMapDataAsset * USensorFactory::GetSensorMapDataAsset ( )
static

Definition at line 52 of file SensorFactory.cpp.

53{
54 Initialize();
55
56 return SensorMapDataAsset.Get();
57}
static void Initialize()
static TWeakObjectPtr< USensorMapDataAsset > SensorMapDataAsset

References Initialize(), and SensorMapDataAsset.

Referenced by SpawnModelClassForSensor().

◆ Initialize()

void USensorFactory::Initialize ( )
staticprivate

Initialize the factory. Should be called before using data or calling functions

Definition at line 29 of file SensorFactory.cpp.

30{
31 if (SensorMapDataAsset.IsValid())
32 {
33 return;
34 }
35
36 SensorMapDataAsset.Reset();
37 FSoftObjectPath SensorMapDataAssetPath(TEXT("/Game/Agrarsense/Data/Sensors/SensorMap"));
38 SensorMapDataAsset = Cast<USensorMapDataAsset>(SensorMapDataAssetPath.TryLoad());
39
40#if WITH_EDITOR
41 if (SensorMapDataAsset.IsValid())
42 {
43 UE_LOG(LogTemp, Warning, TEXT("USensorFactory.cpp: Loaded SensorMapDataAsset successfully."));
44 }
45 else
46 {
47 UE_LOG(LogTemp, Warning, TEXT("USensorFactory.cpp: Loading SensorMapDataAsset failed."));
48 }
49#endif
50}

References SensorMapDataAsset.

Referenced by GetSensorMapDataAsset().

◆ SetSensorIdentifierAndNameWithFallbacks()

void USensorFactory::SetSensorIdentifierAndNameWithFallbacks ( ASensor Sensor,
const FString &  SensorIdentifier,
const FString &  SensorName 
)
staticprivate

Set sensor name and identifier but fallback to default values if sensor name and/or sensor identifier are empty.

Parameters
sensorSensor which name and identifier to change
sensorIdentifierSensor new identifier (empty identifier not accepted)
sensorNameSensor new name (empty name not accepted)

Definition at line 188 of file SensorFactory.cpp.

189{
190 bool generateIdentifier = SensorIdentifier.IsEmpty();
191 bool generateName = SensorName.IsEmpty();
192
193 FString generatedSensorIdentifier;
194
195 // If ID not given, use ESensorTypes as the ID
196 // and let the ActorInformation-interface handle the numbering after that
197 if (generateIdentifier)
198 {
199 generatedSensorIdentifier = UEnumUtilities::ConvertSensorTypeToString(Sensor->GetSensorType());
200 }
201
202 // If not using generated name -> set the given sensor name
203 if (!generateName)
204 {
205 Sensor->SetSensorName(SensorName);
206 }
207
208 Sensor->SetSensorIdentifier(generateIdentifier ? generatedSensorIdentifier : SensorIdentifier);
209
210 // If using generated name -> use the identifier as the name too
211 if (generateName)
212 {
213 Sensor->SetSensorName(Sensor->GetSensorIdentifier());
214 }
215}
void SetSensorName(const FString newName)
Definition: Sensor.h:123
FString GetSensorIdentifier() const
Definition: Sensor.h:75
virtual ESensorTypes GetSensorType() const
Definition: Sensor.h:65
void SetSensorIdentifier(const FString newIdentifier)
Definition: Sensor.h:85
static FString ConvertSensorTypeToString(ESensorTypes Sensortype)

References UEnumUtilities::ConvertSensorTypeToString(), ASensor::GetSensorIdentifier(), ASensor::GetSensorType(), ASensor::SetSensorIdentifier(), and ASensor::SetSensorName().

Referenced by SpawnSensor().

◆ SpawnCamera()

ACamera * USensorFactory::SpawnCamera ( const FSensorSpawnParameters  SpawnParameters,
FCameraBaseParameters  SensorParameters 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
ACamera pointer or nullptr

Definition at line 68 of file SensorFactory.cpp.

69{
70 ACamera* Sensor = SpawnSensor<ACamera>(SpawnParameters, true);
71 if (!Sensor) return nullptr;
72
73 Sensor->Init(SensorParameters);
74 return Sensor;
75}
Definition: Camera.h:53
virtual void Init(FCameraBaseParameters parameters, bool SimulateSensor=true)
Definition: Camera.cpp:83

References ACamera::Init().

◆ SpawnCollisionSensor()

ACollisionSensor * USensorFactory::SpawnCollisionSensor ( const FSensorSpawnParameters  SpawnParameters)
static

Spawn new Collision sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
Returns
ACollisionSensor pointer or nullptr

Definition at line 131 of file SensorFactory.cpp.

132{
133 ACollisionSensor* Sensor = SpawnSensor<ACollisionSensor>(SpawnParameters, false);
134 if (!Sensor) return nullptr;
135
136 Sensor->Init(SpawnParameters.Parent, SpawnParameters.SimulateSensor);
137 return Sensor;
138}
void Init(AActor *NewOwner, bool SimulateSensor=true)

References ACollisionSensor::Init(), FSensorSpawnParameters::Parent, and FSensorSpawnParameters::SimulateSensor.

Referenced by AVehicle::BeginPlay().

◆ SpawnDepthCamera()

ADepthCamera * USensorFactory::SpawnDepthCamera ( const FSensorSpawnParameters  SpawnParameters,
FDepthCameraParameters  SensorParameters 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
ADepthCamera pointer or nullptr

Definition at line 86 of file SensorFactory.cpp.

87{
88 ADepthCamera* Sensor = SpawnSensor<ADepthCamera>(SpawnParameters, true);
89 if (!Sensor) return nullptr;
90
91 Sensor->DepthInit(SensorParameters, SpawnParameters.SimulateSensor);
92 return Sensor;
93}
void DepthInit(FDepthCameraParameters Parameters, bool SimulateSensor=true)
Definition: DepthCamera.cpp:17

References ADepthCamera::DepthInit(), and FSensorSpawnParameters::SimulateSensor.

◆ SpawnDVSCamera()

ADVSCamera * USensorFactory::SpawnDVSCamera ( const FSensorSpawnParameters  SpawnParameters,
FDVSCameraParameters  SensorParameters 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
ADVSCamera pointer or nullptr

Definition at line 113 of file SensorFactory.cpp.

114{
115 ADVSCamera* Sensor = SpawnSensor<ADVSCamera>(SpawnParameters, true);
116 if (!Sensor) return nullptr;
117
118 Sensor->DVSInit(SensorParameters, SpawnParameters.SimulateSensor);
119 return Sensor;
120}
void DVSInit(FDVSCameraParameters Parameters, bool SimulateSensor=true)
Definition: DVSCamera.cpp:39

References ADVSCamera::DVSInit(), and FSensorSpawnParameters::SimulateSensor.

◆ SpawnInstanceSegmentationCamera()

AInstanceSegmentationCamera * USensorFactory::SpawnInstanceSegmentationCamera ( const FSensorSpawnParameters  SpawnParameters,
FCameraBaseParameters  SensorParameters 
)
static

Spawn new Instance Segmentation Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
ASemanticSegmentationCamera pointer

Definition at line 104 of file SensorFactory.cpp.

105{
106 AInstanceSegmentationCamera* Sensor = SpawnSensor<AInstanceSegmentationCamera>(SpawnParameters, true);
107 if (!Sensor) return nullptr;
108
109 Sensor->Init(SensorParameters);
110 return Sensor;
111}
void Init(FCameraBaseParameters parameters, bool SimulateSensor=true) override

References AInstanceSegmentationCamera::Init().

◆ SpawnLidarSensor()

ALidar * USensorFactory::SpawnLidarSensor ( const FSensorSpawnParameters  SpawnParameters,
FLidarParameters  SensorParameters 
)
static

Spawn new Lidar sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FLidarParametersFLidarParameters parameters struct
Returns
ALidar pointer or nullptr

Definition at line 59 of file SensorFactory.cpp.

60{
61 ALidar* Sensor = SpawnSensor<ALidar>(SpawnParameters, true);
62 if (!Sensor) return nullptr;
63
64 Sensor->Init(SensorParameters);
65 return Sensor;
66}
Definition: Lidar.h:35
void Init(FLidarParameters parameters, bool SimulateSensor=true)
Definition: Lidar.cpp:42

References ALidar::Init().

◆ SpawnModelClass()

ASensorModel * USensorFactory::SpawnModelClass ( TSubclassOf< ASensorModel ModelClass,
ASensor AttachTo 
)
staticprivate

Spawn sensor visual model (3D model) class attaching it to the given sensor actor.

Parameters
ModelClassASensorModel class for the sensor's model's class
AttachToAttach to this sensor
Returns
Spawned model actor or nullptr

Definition at line 252 of file SensorFactory.cpp.

253{
254 ASensorModel* createdModelActor = nullptr;
255
256 if (!attachTo)
257 {
258 return createdModelActor;
259 }
260
261 if (UWorld* World = GetGameWorld())
262 {
263 FVector sensorLocation = attachTo->GetActorLocation();
264 createdModelActor = World->SpawnActor<ASensorModel>(modelClass);
265
266 if (createdModelActor)
267 {
268 createdModelActor->AttachToActor(attachTo, FAttachmentTransformRules::SnapToTargetIncludingScale);
269
270 attachTo->SetSensorModel(createdModelActor);
271 createdModelActor->SetAttachedToSensor(attachTo);
272 createdModelActor->InitAfterSpawn();
273 }
274 }
275
276 return createdModelActor;
277}
void InitAfterSpawn()
void SetAttachedToSensor(ASensor *NewAttachedToSensor)
Definition: SensorModel.h:38
static UWorld * GetGameWorld()
Gets the current game world from the viewport.

References GetGameWorld(), ASensorModel::InitAfterSpawn(), ASensorModel::SetAttachedToSensor(), and ASensor::SetSensorModel().

Referenced by SpawnModelClassForSensor().

◆ SpawnModelClassForSensor()

ASensorModel * USensorFactory::SpawnModelClassForSensor ( ASensor attachTo)
staticprivate

Spawn sensor model (3D model) class attaching it to the given actor

Parameters
attachToSensor to attach to
Returns
Spawned model actor or nullptr

Definition at line 217 of file SensorFactory.cpp.

218{
219 ASensorModel* SpawnedModel = nullptr;
220
221 if (!AttachTo)
222 {
223 return SpawnedModel;
224 }
225
227
228 if (SensorMap)
229 {
230 ESensorTypes sensorType = AttachTo->GetSensorType();
231
232 TSubclassOf<ASensorModel> modelClass = nullptr;
233
234 bool matchFound;
235
236 USensorDataAsset* sensorData = SensorMap->GetAssetDataBySensorType(sensorType, matchFound);
237
238 if (matchFound && sensorData)
239 {
240 modelClass = sensorData->ModelClass;
241 }
242
243 if (modelClass)
244 {
245 SpawnedModel = SpawnModelClass(modelClass, AttachTo);
246 }
247 }
248
249 return SpawnedModel;
250}
ESensorTypes
Definition: SensorTypes.h:15
TSubclassOf< ASensorModel > ModelClass
static ASensorModel * SpawnModelClass(TSubclassOf< ASensorModel > ModelClass, ASensor *AttachTo)
static USensorMapDataAsset * GetSensorMapDataAsset()
USensorDataAsset * GetAssetDataBySensorType(ESensorTypes SensorType, bool &MatchFound)

References USensorMapDataAsset::GetAssetDataBySensorType(), GetSensorMapDataAsset(), ASensor::GetSensorType(), USensorDataAsset::ModelClass, and SpawnModelClass().

Referenced by SpawnSensor().

◆ SpawnOverlapSensor()

AOverlapSensor * USensorFactory::SpawnOverlapSensor ( const FSensorSpawnParameters  SpawnParameters,
FOverlapSensorParameters  SensorParameters 
)
static

Spawn new Overlap sensor. BlueprintCallable. This is spawned by default on every vehicle

Parameters
FSensorSpawnParametersSpawnparameters
FOverlapSensorParameters*Overlap sensor parameters
Returns
AOverlapSensor pointer or nullptr

Definition at line 150 of file SensorFactory.cpp.

151{
152 AOverlapSensor* Sensor = SpawnSensor<AOverlapSensor>(SpawnParameters, false);
153 if (!Sensor) return nullptr;
154
155 Sensor->Init(SensorParameters);
156 return Sensor;
157}
void Init(FOverlapSensorParameters InParameters)

References AOverlapSensor::Init().

Referenced by ASpectator::BeginPlay(), APIDDrone::BeginPlay(), AVehicle::BeginPlay(), and APIDDrone::ChangeDroneParameters().

◆ SpawnRadar()

ARadar * USensorFactory::SpawnRadar ( const FSensorSpawnParameters  SpawnParameters,
FRadarParameters  SensorParameters 
)
static

Spawn new Radar sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FRadarParametersFRadarParameters parameters struct
Returns
ARadar pointer or nullptr

Definition at line 122 of file SensorFactory.cpp.

123{
124 ARadar* Sensor = SpawnSensor<ARadar>(SpawnParameters, true);
125 if (!Sensor) return nullptr;
126
127 Sensor->Init(SensorParameters, SpawnParameters.SimulateSensor);
128 return Sensor;
129}
Definition: Radar.h:26
void Init(FRadarParameters parameters, bool SimulateSensor=true)
Definition: Radar.cpp:22

References ARadar::Init(), and FSensorSpawnParameters::SimulateSensor.

◆ SpawnSegmentationCamera()

ASemanticSegmentationCamera * USensorFactory::SpawnSegmentationCamera ( const FSensorSpawnParameters  SpawnParameters,
FCameraBaseParameters  SensorParameters 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
ASemanticSegmentationCamera pointer

Definition at line 95 of file SensorFactory.cpp.

96{
97 ASemanticSegmentationCamera* Sensor = SpawnSensor<ASemanticSegmentationCamera>(SpawnParameters, true);
98 if (!Sensor) return nullptr;
99
100 Sensor->Init(SensorParameters, SpawnParameters.SimulateSensor);
101 return Sensor;
102}
void Init(FCameraBaseParameters parameters, bool SimulateSensor=true) override

References ASemanticSegmentationCamera::Init(), and FSensorSpawnParameters::SimulateSensor.

◆ SpawnSensor()

template<typename T >
T * USensorFactory::SpawnSensor ( const FSensorSpawnParameters SpawnParameters,
bool  SpawnSensorModel = true 
)
staticprivate

Definition at line 160 of file SensorFactory.cpp.

161{
162 T* Sensor = nullptr;
163
164 if (UWorld* World = GetGameWorld())
165 {
166 Sensor = World->SpawnActorDeferred<T>(T::StaticClass(), SpawnParameters.Transform);
167 if (Sensor)
168 {
169 SetSensorIdentifierAndNameWithFallbacks(Sensor, SpawnParameters.SensorIdentifier, SpawnParameters.SensorName);
170
171 if (SpawnParameters.Parent)
172 {
173 Sensor->SetParentActorPtr(SpawnParameters.Parent);
174 }
175
176 Sensor->FinishSpawning(SpawnParameters.Transform);
177
178 if (SpawnSensorModel)
179 {
180 SpawnModelClassForSensor(Cast<ASensor>(Sensor));
181 }
182 }
183 }
184
185 return Sensor;
186}
static ASensorModel * SpawnModelClassForSensor(ASensor *attachTo)
static void SetSensorIdentifierAndNameWithFallbacks(ASensor *Sensor, const FString &SensorIdentifier, const FString &SensorName)

References GetGameWorld(), FSensorSpawnParameters::Parent, FSensorSpawnParameters::SensorIdentifier, FSensorSpawnParameters::SensorName, SetSensorIdentifierAndNameWithFallbacks(), SpawnModelClassForSensor(), and FSensorSpawnParameters::Transform.

◆ SpawnThermalCamera()

AThermalCamera * USensorFactory::SpawnThermalCamera ( const FSensorSpawnParameters  SpawnParameters,
FThermalCameraParameters  SensorParameters 
)
static

Spawn new Camera sensor. BlueprintCallable.

Parameters
FSensorSpawnParametersSpawnparameters
FCameraBaseParametersFCameraBaseParameters parameters struct
Returns
AThermalCamera pointer or nullptr

Definition at line 77 of file SensorFactory.cpp.

78{
79 AThermalCamera* Sensor = SpawnSensor<AThermalCamera>(SpawnParameters, true);
80 if (!Sensor) return nullptr;
81
82 Sensor->ThermalInit(SensorParameters, SpawnParameters.SimulateSensor);
83 return Sensor;
84}
void ThermalInit(FThermalCameraParameters Parameters, bool SimulateSensor=true)

References FSensorSpawnParameters::SimulateSensor, and AThermalCamera::ThermalInit().

◆ SpawnTransformSensor()

ATransformSensor * USensorFactory::SpawnTransformSensor ( const FSensorSpawnParameters  SpawnParameters,
FTransformSensorParameters  SensorParameters 
)
static

Spawn new Tranform sensor. BlueprintCallable. This is spawned by default on every vehicle

Parameters
FSensorSpawnParametersSpawnparameters
FTransformSensorParametersTransform sensor parameters
Returns
ATransformSensor pointer or nullptr

Definition at line 140 of file SensorFactory.cpp.

141{
142 ATransformSensor* Sensor = SpawnSensor<ATransformSensor>(SpawnParameters, false);
143 if (!Sensor) return nullptr;
144
145 Sensor->Init(SensorParameters, SpawnParameters.SimulateSensor);
146 Sensor->AttachToActor(SensorParameters.OwningActor, FAttachmentTransformRules::KeepWorldTransform);
147 return Sensor;
148}
void Init(FTransformSensorParameters Params, bool SimulateSensor=true)

References ATransformSensor::Init(), FTransformSensorParameters::OwningActor, and FSensorSpawnParameters::SimulateSensor.

Referenced by ASensor::BeginPlay(), APIDDrone::BeginPlay(), AVehicle::BeginPlay(), and AWalker::BeginPlay().

Member Data Documentation

◆ SensorMapDataAsset

TWeakObjectPtr< USensorMapDataAsset > USensorFactory::SensorMapDataAsset
staticprivate

Sensor map data asset to hold sensor specific base data

Definition at line 226 of file SensorFactory.h.

Referenced by GetSensorMapDataAsset(), and Initialize().


The documentation for this class was generated from the following files: