42#include "Kismet/GameplayStatics.h"
43#include "Camera/PlayerCameraManager.h"
44#include "GenericPlatform/GenericPlatformFile.h"
45#include "Serialization/JsonSerializer.h"
46#include "Serialization/JsonWriter.h"
47#include "Misc/DefaultValueHelper.h"
48#include "HAL/PlatformFileManager.h"
49#include "GameFramework/Pawn.h"
50#include "Misc/FileHelper.h"
51#include "Dom/JsonObject.h"
52#include "GameFramework/PlayerController.h"
53#include "CollisionQueryParams.h"
54#include "Engine/GameViewportClient.h"
55#include "Engine/EngineTypes.h"
56#include "Engine/Engine.h"
57#include "Engine/World.h"
66 SimulatorLog::Log(
"SimulatorJsonParser: Spawning objects in main menu is disabled.");
70 if (!FPaths::FileExists(Path))
76 if (!FPaths::GetExtension(Path).Equals(TEXT(
"json"), ESearchCase::IgnoreCase))
78 SimulatorLog::Log(
"SimulatorJsonParser: Invalid file extension. Only .json files are supported.");
83 if (!FFileHelper::LoadFileToString(JsonString, *Path))
89 TSharedPtr<FJsonObject> RootJsonObject = MakeShareable(
new FJsonObject);
90 TSharedRef<TJsonReader<TCHAR>> Reader = TJsonReaderFactory<TCHAR>::Create(JsonString);
91 if (!FJsonSerializer::Deserialize(Reader, RootJsonObject))
97 const TArray<TSharedPtr<FJsonValue>>* JsonObjects;
98 if (!RootJsonObject->TryGetArrayField(
"objects", JsonObjects))
100 SimulatorLog::Log(
"json content doesn't contain 'objects' field. Make sure your json structure is correct.");
105 FString FieldTypeString =
"type";
108 bool JsonContainsSensorType =
false;
109 bool JsonContainsDataCaptureType =
false;
110 TArray<TSharedPtr<FJsonObject>> FilteredJsonObjects;
112 for (
const TSharedPtr<FJsonValue>& JsonObjectValue : *JsonObjects)
114 if (JsonObjectValue->Type != EJson::Object)
119 TSharedPtr<FJsonObject> JsonObject = JsonObjectValue->AsObject();
121 if (!JsonObject->TryGetStringField(FieldTypeString, ObjectType))
127 ObjectType.ToLowerInline();
129 FilteredJsonObjects.Add(JsonObject);
131 if (ObjectType ==
"sensor")
133 JsonContainsSensorType =
true;
135 else if (ObjectType ==
"datacapture")
137 JsonContainsDataCaptureType =
true;
144 IsDataCapture = JsonContainsSensorType && JsonContainsDataCaptureType;
147 for (
const TSharedPtr<FJsonObject>& JsonObject : FilteredJsonObjects)
150 if (!JsonObject->TryGetStringField(FieldTypeString, ObjectType))
155 ObjectType.ToLowerInline();
157 if (ObjectType ==
"vehicle")
161 else if (ObjectType ==
"weather")
165 else if (ObjectType ==
"walker")
169 else if (ObjectType ==
"sensor")
173 else if (ObjectType ==
"prop")
177 else if (ObjectType ==
"foliage")
181 else if (ObjectType ==
"semanticcolors")
185 else if (ObjectType ==
"commands")
189 else if (ObjectType ==
"volumedeletion")
193 else if (ObjectType ==
"datacapture")
210 if (!JsonObject->TryGetStringField(
"model", Model))
217 JsonObject->TryGetStringField(
"name", Name);
218 JsonObject->TryGetStringField(
"id", ID);
224 FTransform SpawnTransform =
ParseTransform(
"spawnPoint", JsonObject);
226 bool DestroyCollidedObjectsOnSpawn =
false;
227 JsonObject->TryGetBoolField(
"destroyOverlappingObjects", DestroyCollidedObjectsOnSpawn);
252 const TArray<TSharedPtr<FJsonValue>>* SensorJsonObjects;
253 if (JsonObject->TryGetArrayField(
"sensors", SensorJsonObjects))
255 for (
const TSharedPtr<FJsonValue>& SensorValue : *SensorJsonObjects)
257 if (SensorValue->Type == EJson::Object)
259 TSharedPtr<FJsonObject> SensorJsonObject = SensorValue->AsObject();
269 if (!JsonObject->TryGetStringField(
"model", Model))
275 bool RandomZRotation =
false;
276 bool SnapToGround =
false;
277 JsonObject->TryGetBoolField(
"snap_to_ground", SnapToGround);
278 JsonObject->TryGetBoolField(
"random_z_rotation", RandomZRotation);
281 JsonObject->TryGetStringField(
"name", Name);
282 JsonObject->TryGetStringField(
"id", ID);
284 FTransform SpawnTransform =
ParseTransform(
"spawnPoint", JsonObject);
286 if (ObjectType.Equals(
"prop", ESearchCase::IgnoreCase))
291 else if (ObjectType.Equals(
"foliage", ESearchCase::IgnoreCase))
300 if (!
Vehicle || !SensorObject.IsValid())
305 USensorsManagerComponent* VehicleSensorManager =
Vehicle->GetSensorsManager();
306 if (!VehicleSensorManager)
311 TSharedPtr<FJsonObject> ParametersObject = SensorObject->GetObjectField(
"parameters");
312 if (!ParametersObject.IsValid())
318 FTransform RelativeTransform =
ParseTransform(
"spawnPoint", SensorObject);
321 FString SensorTypeString;
322 SensorObject->TryGetStringField(
"model", SensorTypeString);
327 FString SensorIdentifier, Name;
328 SensorObject->TryGetStringField(
"name", Name);
329 SensorObject->TryGetStringField(
"id", SensorIdentifier);
331 FString AttachedToComponent;
332 SensorObject->TryGetStringField(
"attachedToComponent", AttachedToComponent);
334 FString AttachedToBoneString;
335 FName AttachedToBone;
336 if (SensorObject->TryGetStringField(
"attachedToBone", AttachedToBoneString))
338 AttachedToBone = FName(*AttachedToBoneString);
343 USceneComponent* AttachToComponent = VehicleSensorManager->GetComponentByHierarchyName(AttachedToComponent);
349 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnLidar(RelativeTransform,
true, SensorIdentifier, Name, ParseParameters<FLidarParameters>(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
353 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnCamera(RelativeTransform,
true, SensorIdentifier, Name, ParseParameters<FCameraBaseParameters>(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
357 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnThermalCamera(RelativeTransform,
true, SensorIdentifier, Name, ParseParameters<FThermalCameraParameters>(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
361 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnDepthCamera(RelativeTransform,
true, SensorIdentifier, Name,
ParseDepthCameraParameters(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
365 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnRadar(RelativeTransform,
true, SensorIdentifier, Name, ParseParameters<FRadarParameters>(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
369 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnSegmentationCamera(RelativeTransform,
true, SensorIdentifier, Name, ParseParameters<FCameraBaseParameters>(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
373 SensorPtr = Cast<ASensor>(VehicleSensorManager->SpawnDVSCamera(RelativeTransform,
true, SensorIdentifier, Name,
ParseDVSCameraParameters(ParametersObject),
true, TempActor, AttachToComponent, AttachedToBone));
385 if (
ACamera* CameraPtr = Cast<ACamera>(SensorPtr))
387 bool UseGimbal =
false;
388 SensorObject->TryGetBoolField(
"useGimbal", UseGimbal);
389 CameraPtr->SetUseGimbal(UseGimbal);
396 if (!SensorObject.IsValid())
401 if (!SensorObject->HasField(
"parameters") || !SensorObject->HasField(
"model"))
406 TSharedPtr<FJsonObject> ParametersObject = SensorObject->GetObjectField(
"parameters");
407 if (!ParametersObject.IsValid())
412 FString SensorTypeString, SensorName, SensorIdentifier;
413 SensorObject->TryGetStringField(
"model", SensorTypeString);
414 SensorObject->TryGetStringField(
"name", SensorName);
415 SensorObject->TryGetStringField(
"id", SensorIdentifier);
417 FTransform SpawnTransform =
ParseTransform(
"spawnPoint", SensorObject);
419 AActor* ActorPtr =
nullptr;
422 UWorld* World =
nullptr;
424 if (GEngine && GEngine->GameViewport)
426 World = GEngine->GameViewport->GetWorld();
430 if (!SimulationLevelManager)
432 SimulatorLog::Log(
"Failed to spawn Sensor. Reason: Coulnd't to find SimulationLevelManager Actor!");
436 USensorsManagerComponent* WorldSensorManager = SimulationLevelManager->
GetSensorsManager();
437 if (!WorldSensorManager)
439 SimulatorLog::Log(
"Failed to spawn Sensor. Reason: Coulnd't to find USensorsManagerComponent Component!");
449 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnLidar(SpawnTransform,
false, SensorIdentifier, SensorName, ParseParameters<FLidarParameters>(ParametersObject),
true, TempActor,
nullptr, NAME_None));
453 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnRadar(SpawnTransform,
false, SensorIdentifier, SensorName, ParseParameters<FRadarParameters>(ParametersObject),
true, TempActor,
nullptr, NAME_None));
457 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnCamera(SpawnTransform,
false, SensorIdentifier, SensorName, ParseParameters<FCameraBaseParameters>(ParametersObject),
true, TempActor,
nullptr, NAME_None));
461 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnThermalCamera(SpawnTransform,
false, SensorIdentifier, SensorName,
ParseThermalCameraParameters(ParametersObject),
true, TempActor,
nullptr, NAME_None));
465 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnDepthCamera(SpawnTransform,
false, SensorIdentifier, SensorName,
ParseDepthCameraParameters(ParametersObject),
true, TempActor,
nullptr, NAME_None));
469 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnSegmentationCamera(SpawnTransform,
false, SensorIdentifier, SensorName, ParseParameters<FCameraBaseParameters>(ParametersObject),
true, TempActor,
nullptr, NAME_None));
473 ActorPtr = Cast<AActor>(WorldSensorManager->SpawnDVSCamera(SpawnTransform,
false, SensorIdentifier, SensorName,
ParseDVSCameraParameters(ParametersObject),
true, TempActor,
nullptr, NAME_None));
482 ACamera* CameraPtr = Cast<ACamera>(ActorPtr);
489 bool AttachToSpectator =
false;
490 SensorObject->TryGetBoolField(
"attachToSpectator", AttachToSpectator);
492 if (AttachToSpectator)
504 if (!JsonObject.IsValid())
506 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: Invalid JsonObject");
510 FString WalkerTypeString;
511 if (!JsonObject->TryGetStringField(
"model", WalkerTypeString))
513 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: Model field is missing");
520 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: Walker is None");
524 TSharedPtr<FJsonObject> ParametersObject = JsonObject->GetObjectField(
"parameters");
525 if (!ParametersObject.IsValid())
527 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: ParametersObject is invalid or missing");
531 FString WalkerActionString;
532 if (!ParametersObject->TryGetStringField(
"walkerAction", WalkerActionString))
534 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: walkerAction field is missing");
541 SimulatorLog::Log(
"SimulatorJsonParser failed to parse Walker json: Roaming Walker requires spawnPoint");
546 FString WalkerEndActionString;
547 ParametersObject->TryGetStringField(
"walkerEndAction", WalkerEndActionString);
562 ParametersObject->TryGetStringField(
"name", Name);
563 ParametersObject->TryGetStringField(
"id", ID);
566 bool StartAutomatically =
true;
567 if (ParametersObject->HasField(
"startAutomatically"))
569 ParametersObject->TryGetBoolField(
"startAutomatically", StartAutomatically);
582 if (ParametersObject->HasField(
"points"))
585 TSharedPtr<FJsonObject> PointsObject = ParametersObject->GetObjectField(
"points");
586 if (PointsObject.IsValid())
591 FString PointName = FString::Printf(TEXT(
"point%d"), PointIndex);
592 if (!PointsObject->HasField(PointName))
597 TSharedPtr<FJsonObject> PointObject = PointsObject->GetObjectField(PointName);
598 if (PointObject.IsValid())
600 FTransform PointTransform =
ParseTransform(PointName, PointsObject);
601 WalkerParams.
Points.Add(PointTransform);
608 else if (ParametersObject->HasField(
"spawnPoint"))
611 FTransform PointTransform =
ParseTransform(
"spawnPoint", ParametersObject);
612 WalkerParams.
Points.Add(PointTransform);
618 if (!JsonObject.IsValid())
623 TSharedPtr<FJsonObject> Parameters = JsonObject->GetObjectField(
"parameters");
624 if (Parameters.IsValid() && GEngine && GEngine->GameViewport)
626 UWorld* World = GEngine->GameViewport->GetWorld();
631 FJsonObjectConverter::JsonObjectToUStruct(Parameters.ToSharedRef(), FWeatherParameters::StaticStruct(), &Params);
658 if (!DronePtr || !JsonObject.IsValid())
663 TSharedPtr<FJsonObject> ParametersObject = JsonObject->GetObjectField(
"parameters");
665 if (ParametersObject.IsValid())
670 FString DroneActionObject = ParametersObject->GetStringField(
"droneAction");
671 if (!DroneActionObject.IsEmpty())
677 FString DroneEndActionObject = ParametersObject->GetStringField(
"droneEndAction");
678 if (!DroneEndActionObject.IsEmpty())
684 TSharedPtr<FJsonObject> PointsObject = ParametersObject->GetObjectField(
"points");
685 if (PointsObject.IsValid())
690 FString PointName = FString::Printf(TEXT(
"point%d"), PointIndex);
691 if (!PointsObject->HasField(PointName))
696 TSharedPtr<FJsonObject> PointObject = PointsObject->GetObjectField(PointName);
697 if (PointObject.IsValid())
699 FTransform PointTransform =
ParseTransform(PointName, PointsObject);
700 DroneParameters.
Points.Add(PointTransform);
707 bool ShowForwardArrow =
false;
708 ParametersObject->TryGetBoolField(
"showForwardArrow", ShowForwardArrow);
717 if (!VehiclePtr || !JsonObject.IsValid() || !JsonObject->HasField(
"parameters"))
726 TSharedPtr<FJsonObject> ParametersObject = JsonObject->GetObjectField(
"parameters");
727 Parameters = ParseParameters<FWheeledVehicleParameters>(ParametersObject);
733 if (!JsonObject.IsValid() || !Actor)
739 bool teleport =
false;
740 JsonObject->TryGetBoolField(
"followObject", follow);
741 JsonObject->TryGetBoolField(
"teleportSpectator", teleport);
743 if (!follow && !teleport)
749 if (GEngine && GEngine->GameViewport)
751 UWorld* World = GEngine->GameViewport->GetWorld();
757 AVehicle* VehiclePtr = Cast<AVehicle>(Actor);
761 if (SimulationLevelManager)
781 if (!ActorPtr || !GEngine || !GEngine->GameViewport)
786 UWorld* World = GEngine->GameViewport->GetWorld();
793 APlayerController* PlayerController = UGameplayStatics::GetPlayerController(World, 0);
794 if (PlayerController && Spectator)
796 APlayerCameraManager* CameraManager = PlayerController->PlayerCameraManager;
799 USceneComponent* CameraRootComponent = CameraManager->GetRootComponent();
800 if (CameraRootComponent)
803 ActorPtr->SetActorLocation(Spectator->GetActorLocation());
804 ActorPtr->SetActorRotation(Spectator->GetActorRotation());
807 ActorPtr->AttachToComponent(CameraRootComponent, FAttachmentTransformRules::SnapToTargetNotIncludingScale);
810 ASensor* SensorPtr = Cast<ASensor>(ActorPtr);
816 SensorModelPtr->Destroy();
826 UWorld* World =
nullptr;
827 if (GEngine && GEngine->GameViewport)
829 World = GEngine->GameViewport->GetWorld();
838 if (!CollectionInstance)
840 SimulatorLog::Log(
"ROSJsonParser.cpp: Failed to load MaterialParameterCollectionInstance!");
845 const TSharedPtr<FJsonObject>* ColorsObjectPtr =
nullptr;
846 if (JsonObject->TryGetObjectField(TEXT(
"colors"), ColorsObjectPtr) && ColorsObjectPtr !=
nullptr)
848 const TSharedPtr<FJsonObject>& ColorsObject = *ColorsObjectPtr;
849 for (
const auto& Elem : ColorsObject->Values)
851 FName Type = FName(*Elem.Key);
852 FString VectorString = Elem.Value->AsString();
855 FVector4 ParsedVector;
856 TArray<FString> ParsedValues;
857 VectorString.ParseIntoArray(ParsedValues, TEXT(
","),
true);
858 if (ParsedValues.Num() == 4)
860 ParsedVector.X = FCString::Atof(*ParsedValues[0]);
861 ParsedVector.Y = FCString::Atof(*ParsedValues[1]);
862 ParsedVector.Z = FCString::Atof(*ParsedValues[2]);
863 ParsedVector.W = FCString::Atof(*ParsedValues[3]);
876 if (!GEngine || !GEngine->GameViewport)
881 UWorld* World = GEngine->GameViewport->GetWorld();
884 const TArray<TSharedPtr<FJsonValue>>* CommandsArray;
885 if (JsonObject->TryGetArrayField(TEXT(
"commands"), CommandsArray))
887 for (
const TSharedPtr<FJsonValue>& CommandValue : *CommandsArray)
890 if (CommandValue->TryGetString(Command))
892 GEngine->Exec(World, *Command);
901 if (!GEngine || !GEngine->GameViewport || !JsonObject.IsValid())
907 FTransform SpawnTransform =
ParseTransform(
"spawnPoint", JsonObject);
910 FTransform TransformBounds =
ParseTransform(
"bounds", JsonObject);
911 FVector Bounds = TransformBounds.GetLocation();
913 bool OnlyDestroyTrees =
true;
914 JsonObject->TryGetBoolField(TEXT(
"onlyDestroyTrees"), OnlyDestroyTrees);
916 UWorld* World = GEngine->GameViewport->GetWorld();
934 if (!JsonObject.IsValid() || !GEngine || !GEngine->GameViewport)
940 TSharedPtr<FJsonObject> ParametersObject = JsonObject->GetObjectField(
"parameters");
941 if (ParametersObject.IsValid())
943 TSharedPtr<FJsonObject> PointsObject = ParametersObject->GetObjectField(
"points");
944 if (PointsObject.IsValid())
949 FString PointName = FString::Printf(TEXT(
"point%d"), PointIndex);
950 if (!PointsObject->HasField(PointName))
955 TSharedPtr<FJsonObject> PointObject = PointsObject->GetObjectField(PointName);
956 if (PointObject.IsValid())
958 FTransform PointTransform =
ParseTransform(PointName, PointsObject);
967 UWorld* World = GEngine->GameViewport->GetWorld();
978 FTransform SpawnTransform;
980 const TSharedPtr<FJsonObject>* SpawnPointObject =
nullptr;
981 if (Object->TryGetObjectField(FieldName, SpawnPointObject))
984 double LocationX = 0.0, LocationY = 0.0, LocationZ = 0.0;
985 double Yaw = 0.0, Pitch = 0.0, Roll = 0.0;
987 auto& SPO = *SpawnPointObject->Get();
990 bool HasLocation = SPO.TryGetNumberField(TEXT(
"x"), LocationX) && SPO.TryGetNumberField(TEXT(
"y"), LocationY) && SPO.TryGetNumberField(TEXT(
"z"), LocationZ);
993 SPO.TryGetNumberField(TEXT(
"yaw"), Yaw);
994 SPO.TryGetNumberField(TEXT(
"pitch"), Pitch);
995 SPO.TryGetNumberField(TEXT(
"roll"), Roll);
999 bool ChangeScale =
false;
1000 if (SPO.HasField(
"scaleX") && SPO.HasField(
"scaleY") && SPO.HasField(
"scaleZ"))
1003 SPO.TryGetNumberField(TEXT(
"scaleX"), Scale.X);
1004 SPO.TryGetNumberField(TEXT(
"scaleY"), Scale.Y);
1005 SPO.TryGetNumberField(TEXT(
"scaleZ"), Scale.Z);
1011 FVector Location(LocationX, LocationY, LocationZ);
1012 FRotator Rotation(Pitch, Yaw, Roll);
1014 SpawnTransform.SetLocation(Location);
1015 SpawnTransform.SetRotation(Rotation.Quaternion());
1019 SpawnTransform.SetScale3D(Scale);
1024 return SpawnTransform;
1030 const TSharedPtr<FJsonObject>* VectorObject;
1032 if (Object->TryGetObjectField(FieldName, VectorObject))
1035 (*VectorObject)->TryGetNumberField(TEXT(
"x"), X);
1036 (*VectorObject)->TryGetNumberField(TEXT(
"y"), Y);
1037 (*VectorObject)->TryGetNumberField(TEXT(
"z"), Z);
1038 (*VectorObject)->TryGetNumberField(TEXT(
"w"), W);
1039 Vector = FVector4(X, Y, Z, W);
1049 if (ParametersObject.IsValid())
1051 FJsonObjectConverter::JsonObjectToUStruct(ParametersObject.ToSharedRef(), FDepthCameraParameters::StaticStruct(), &DepthCameraParams);
1054 return DepthCameraParams;
1061 if (ParametersObject.IsValid())
1067 ParametersObject->TryGetNumberField(TEXT(
"widthResolutionNoise"), ThermalCameraParams.
WidthResolutionNoise);
1068 ParametersObject->TryGetNumberField(TEXT(
"heightResolutionNoise"), ThermalCameraParams.
HeightResolutionNoise);
1071 TSharedPtr<FJsonObject> CameraParametersObject = ParametersObject->GetObjectField(
"cameraParameters");
1072 if (CameraParametersObject.IsValid())
1074 ThermalCameraParams.
CameraParameters = ParseParameters<FCameraBaseParameters>(CameraParametersObject);
1078 return ThermalCameraParams;
1085 if (ParametersObject.IsValid())
1087 FJsonObjectConverter::JsonObjectToUStruct(ParametersObject.ToSharedRef(), FDVSCameraParameters::StaticStruct(), &DVSCameraParams);
1090 return DVSCameraParams;
1095 int Value = Default;
1097 if (JsonObject.IsValid() && JsonObject->HasField(FieldName))
1099 JsonObject->TryGetNumberField(FieldName, Value);
@ SemanticSegmentationCamera
static EDroneEndAction GetDroneEndAction(FString endActionstring)
static EDroneAction GetDroneAction(FString actionstring)
void DestroyOverlappingActors(bool OnlyTrees)
void ChangeOverlapBounds(FVector Bounds)
void ChangeDroneParameters(const FDroneParameters &newParameters)
void SetShowForwardArrow(bool Show)
void SetupPhotoCapture(FCaptureData NewCaptureData)
ASensorModel * GetSensorModel() const
bool TakeManualControlOfVehicle(AVehicle *Vehicle)
USensorsManagerComponent * GetSensorsManager() const
void TeleportSpectator(const FTransform &Transform)
FWheeledVehicleParameters GetVehicleParameters() const
void SetVehicleParameters(FWheeledVehicleParameters NewParameters)
void UpdateWeather(const FWeatherParameters &WeatherParameters, bool updateToROS)
const FWeatherParameters & GetCurrentWeather() const
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
static bool IsPlayingInMainMenu()
static ASpectator * GetSpectator(const UObject *WorldContextObject)
static AWeather * GetWeatherActor(const UObject *WorldContextObject)
static ASimulationLevelManager * GetSimulationLevelManager(const UObject *WorldContextObject)
static AVehicle * SpawnVehicle(EVehicleTypes VehicleType, FTransform SpawnTransform, const FString &ActorName, const FString &ActorID, bool SnapAboveGround=false, float AboveOffset=150.0f, bool DestroyOverlappingActors=false)
static AActor * SpawnProp(EPropTypes PropType, FTransform Transform, FString ActorName="", FString ActorID="", bool RandomZRotation=false, bool SnapToGround=false)
static AWalker * SpawnWalker(FWalkerParameters Parameters, const FString &ActorName="", const FString &ActorID="", bool StartAutomatically=true)
static AActor * SpawnFoliage(EFoliageTypes FoliageType, FTransform Transform, FString ActorName="", FString ActorID="", bool RandomZRotation=true, bool SnapToGround=true)
static EWalkerEndAction ConvertStringToWalkerEndActionType(const FString &String)
static ESensorTypes ConvertStringToSensorType(const FString &String)
static EWalkerAction ConvertStringToWalkerActionType(const FString &String)
static EVehicleTypes ConvertStringToVehicleType(const FString &String)
static EWalkerType ConvertStringToWalkerType(const FString &String)
static EPropTypes ConvertStringToPropType(const FString &String)
static EFoliageTypes ConvertStringToFoliageType(const FString &String)
static bool UpdateMaterialCollectionVectorValue(UMaterialParameterCollectionInstance *MPCInstance, const FName ParameterName, const FVector4 Value)
static UMaterialParameterCollectionInstance * LoadMaterialParameterCollectionInstance(const UObject *WorldContextObject, const FString &Path)
static TArray< ACamera * > SpawnedCameras
static FTransform ParseTransform(const FString &FieldName, const TSharedPtr< FJsonObject > &Object)
static int GetIntValueOrDefault(const TSharedPtr< FJsonObject > &JsonObject, const FString &FieldName, int Default)
static FVector4 ParseVector4(const FString &FieldName, const TSharedPtr< FJsonObject > &Object)
static FDVSCameraParameters ParseDVSCameraParameters(const TSharedPtr< FJsonObject > &ParametersObject)
static void ParseAndSetDroneParameters(APIDDrone *DronePtr, const TSharedPtr< FJsonObject > &JsonObject)
static void ParseAndOperateJSONFile(const FString &Path)
static FThermalCameraParameters ParseThermalCameraParameters(const TSharedPtr< FJsonObject > &ParametersObject)
static void AttachActorToSpectatorCamera(AActor *ActorPtr)
static bool IsDataCapture
static void ParsePropOrFoliage(const TSharedPtr< FJsonObject > &JsonObject, const FString &ObjectType)
static void ParseVehicle(const TSharedPtr< FJsonObject > &JsonObject)
static void ParseAndSetWheeledVehicleParameters(AVehicle *VehiclePtr, const TSharedPtr< FJsonObject > &JsonObject)
static void ParseVolumeDeletion(const TSharedPtr< FJsonObject > &JsonObject)
static void ParseDataCapture(const TSharedPtr< FJsonObject > &JsonObject)
static void HandleSpectatorMovement(const TSharedPtr< FJsonObject > &JsonObject, AActor *Actor, const FTransform &Transform)
static void ParseWalkerSpawnPoints(const TSharedPtr< FJsonObject > &ParametersObject, FWalkerParameters &WalkerParams)
static void ParseCommands(const TSharedPtr< FJsonObject > &JsonObject)
static FDepthCameraParameters ParseDepthCameraParameters(const TSharedPtr< FJsonObject > &ParametersObject)
static void ParseAndSetSemanticColors(const TSharedPtr< FJsonObject > &JsonObject)
static void ChangeWeather(const TSharedPtr< FJsonObject > &JsonObject)
static void SpawnWalker(const TSharedPtr< FJsonObject > &JsonObject)
static void SpawnSensorWorld(const TSharedPtr< FJsonObject > &SensorObject)
static void SpawnSensorToVehicle(AVehicle *Vehicle, const TSharedPtr< FJsonObject > &SensorObject)
TArray< FTransform > CapturePositions
TArray< ACamera * > Cameras
EDroneEndAction DroneEndAction
TArray< FTransform > Points
int32 WidthResolutionNoise
int32 HeightResolutionNoise
FCameraBaseParameters CameraParameters
bool AllowCustomNoiseResolution
EWalkerAction WalkerAction
TArray< FTransform > Points
EWalkerEndAction WalkerEndAction