52 const FTransform &SpawnAtTransform,
57 auto *
World = GetWorld();
61 UE_LOG(LogCarla, Error, TEXT
62 (
"AStaticMeshFactory: cannot spawn mesh into an empty world."));
68 float Scale = ABFL::RetrieveActorAttributeToFloat(
"scale", ActorDescription.
Variations, 1.0f);
70 FTransform ScaledTransform(SpawnAtTransform);
72 ScaledTransform.SetScale3D(FVector(Scale));
75 FActorSpawnParameters SpawnParameters;
77 SpawnParameters.SpawnCollisionHandlingOverride =
78 ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
80 auto *StaticMeshActor =
World->SpawnActor<AStaticMeshActor>(
81 ActorDescription.
Class, ScaledTransform, SpawnParameters);
84 auto *StaticMeshComponent = Cast<UStaticMeshComponent>(
85 StaticMeshActor->GetRootComponent());
87 if (StaticMeshComponent)
90 if (ActorDescription.
Variations.Contains(
"mesh_path"))
93 FString MeshPath = ABFL::ActorAttributeToString(
97 UStaticMesh *Mesh = LoadObject<UStaticMesh>(
nullptr, *MeshPath);
99 StaticMeshComponent->SetMobility(EComponentMobility::Movable);
101 if (!StaticMeshComponent->SetStaticMesh(Mesh))
102 UE_LOG(LogCarla, Warning, TEXT(
"Failed to set the mesh"));
104 StaticMeshComponent->SetMobility(EComponentMobility::Static);
107 if (ActorDescription.
Variations.Contains(
"mass"))
110 float Mass = ABFL::RetrieveActorAttributeToFloat(
"mass", ActorDescription.
Variations, 0.0f);
114 StaticMeshComponent->SetMobility(EComponentMobility::Movable);
116 StaticMeshComponent->SetSimulatePhysics(
true);
118 StaticMeshComponent->SetCollisionProfileName(
"PhysicsActor");
120 StaticMeshComponent->SetMassOverrideInKg(
"", Mass);
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)