21#include <util/ue-header-guard-begin.h>
22#include "Components/SkinnedMeshComponent.h"
23#include "GameFramework/CharacterMovementComponent.h"
24#include <util/ue-header-guard-end.h>
33 const FTransform ActorToWorld = Actor->GetActorTransform();
35 TArray<UActorComponent *> Components;
36 Actor->GetComponents(Components);
37 for (UActorComponent *ActorComponent : Components)
40 USceneComponent *SceneComponent = Cast<USceneComponent>(ActorComponent);
41 if (SceneComponent ==
nullptr)
47 SceneComponent->GetComponentTransform().GetRelativeTransform(ActorToWorld));
51 TArray<FComponentSocketDescription> Sockets;
52 SceneComponent->QuerySupportedSockets(Sockets);
53 for (
const FComponentSocketDescription &Socket : Sockets)
55 if (Socket.Type != EComponentSocketType::Socket)
61 SceneComponent->GetSocketTransform(Socket.Name, ERelativeTransformSpace::RTS_Actor));
65 TArray<USkinnedMeshComponent *> SkinnedMeshComponents;
66 Actor->GetComponents<USkinnedMeshComponent>(SkinnedMeshComponents);
67 for (USkinnedMeshComponent *SkinnedMeshComponent : SkinnedMeshComponents)
69 const FTransform ComponentToWorld = SkinnedMeshComponent->GetComponentTransform();
71 SkinnedMeshComponent->GetBoneNames(
BoneNames);
74 const int32 NumBones = FMath::Min(
BoneNames.Num(), SkinnedMeshComponent->GetNumBones());
75 for (int32 BoneIndex = 0; BoneIndex < NumBones; ++BoneIndex)
79 SkinnedMeshComponent->GetBoneTransform(BoneIndex, ComponentToWorld)
80 .GetRelativeTransform(ActorToWorld));
90 SpawnTransform.AddToTranslation(FVector(0,0,15));
97 FTransform Transform = Actor->GetTransform();
100 Scale = Transform.GetScale3D();
101 UPrimitiveComponent* Component = Cast<UPrimitiveComponent>(Actor->GetRootComponent());
117 UPrimitiveComponent* Component = Cast<UPrimitiveComponent>(Actor->GetRootComponent());
120 Component->SetPhysicsLinearVelocity(
122 Component->SetPhysicsAngularVelocityInDegrees(
125 auto*
Character = Cast<ACharacter>(Actor);
126 auto* CarlaVehicle = Cast<ACarlaWheeledVehicle>(Actor);
128 if (CarlaVehicle !=
nullptr){
141 auto RootComponent = Component;
142 if (RootComponent !=
nullptr)
145 RootComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
170 auto Controller = Cast<AWheeledVehicleAIController>(
Vehicle->GetController());
191 Vehicle->ApplyVehicleControl(
Control, EVehicleInputPriority::Client);
198 auto Controller = Cast<AWheeledVehicleAIController>(
Vehicle->GetController());
210 auto Walker = Cast<AWalkerBase>(Actor);
211 auto Controller = Walker !=
nullptr ? Cast<AWalkerController>(Walker->GetController()) :
nullptr;
212 if (Controller !=
nullptr)
223 auto Walker = Cast<ACharacter>(Actor);
224 auto Controller = Walker !=
nullptr ? Cast<AWalkerController>(Walker->GetController()) :
nullptr;
225 if (Controller !=
nullptr)
229 auto CharacterMovement = Cast<UCharacterMovementComponent>(Walker->GetCharacterMovement());
236 FActorSpawnParameters SpawnParams;
237 SpawnParams.SpawnCollisionHandlingOverride =
238 ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
249 Model = Actor->GetClass();
251 USignComponent* TrafficSignComponent =
252 Cast<USignComponent>(TrafficSign->FindComponentByClass<USignComponent>());
253 if (TrafficSignComponent)
255 SignModel = TrafficSignComponent->GetClass();
256 SignId = TrafficSignComponent->GetSignId();
265 USignComponent* SignComponent =
266 NewObject<USignComponent>(Actor,
SignModel);
267 SignComponent->SetSignId(
SignId);
268 SignComponent->RegisterComponent();
269 SignComponent->AttachToComponent(
270 Actor->GetRootComponent(),
271 FAttachmentTransformRules::KeepRelativeTransform);
273 SignComponent->InitializeSign(GameMode->
GetMap().value());
280 FActorSpawnParameters SpawnParams;
281 SpawnParams.SpawnCollisionHandlingOverride =
282 ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
293 Model = Actor->GetClass();
295 UTrafficLightComponent* Component =
TrafficLight->GetTrafficLightComponent();
296 SignId = Component->GetSignId();
308 UTrafficLightComponent* Component =
TrafficLight->GetTrafficLightComponent();
309 Component->SetSignId(
SignId);
313 Component->InitializeSign(GameMode->
GetMap().value());
323 ASensor* Sensor = Cast<ASensor>(Actor);
331 ASensor* Sensor = Cast<ASensor>(Actor);
Base class for the CARLA Game Mode.
const std::optional< carla::road::Map > & GetMap() const
Base class for CARLA wheeled vehicles.
void SetDataStream(FDataStream InStream)
Replace the FDataStream associated with this sensor.
FDataStream MoveDataStream()
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode)
virtual AActor * RespawnActor(UCarlaEpisode *CarlaEpisode, const FActorInfo &Info)
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode)
FTransform GetLocalTransform(UCarlaEpisode *CarlaEpisode) const
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
A view over an actor and its properties.
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
ETrafficLightState LightState
UTrafficLightController * Controller
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
TSubclassOf< AActor > Model
virtual AActor * RespawnActor(UCarlaEpisode *CarlaEpisode, const FActorInfo &Info) override
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
TSubclassOf< UObject > SignModel
virtual AActor * RespawnActor(UCarlaEpisode *CarlaEpisode, const FActorInfo &Info) override
TSubclassOf< AActor > Model
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
bool bAckermannControlActive
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
FVehicleLightState LightState
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
carla::rpc::VehicleFailureState FailureState
FVehicleAckermannControl AckermannControl
FAckermannControllerSettings AckermannControllerSettings
FVehiclePhysicsControl PhysicsControl
carla::rpc::WalkerControl WalkerControl
virtual void RestoreActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
virtual void RecordActorData(FCarlaActor *CarlaActor, UCarlaEpisode *CarlaEpisode) override
FIntVector GetCurrentMapOrigin() const
AActor * SpawnActor(const FTransform &Transform, FActorDescription ActorDescription)
Spawns an actor based on ActorDescription at Transform.
AActor * ReSpawnActorWithInfo(const FTransform &Transform, FActorDescription thisActorDescription)
Spawns an actor based on ActorDescription at Transform.
static ACarlaGameModeBase * GetGameMode(const UObject *WorldContextObject)
void RemoveCarlaActorTrafficLight(FCarlaActor *CarlaActor)
const FTrafficLightStage & GetCurrentState() const
void AddCarlaActorTrafficLight(FCarlaActor *CarlaActor)
void AddTrafficLight(UTrafficLightComponent *TrafficLight)
void RemoveTrafficLight(UTrafficLightComponent *TrafficLight)
A view over an actor and its properties.
FActorDescription Description
TArray< FString > SocketNames
TArray< FTransform > ComponentTransforms
TArray< FString > ComponentNames
TArray< FTransform > BoneTransforms
TArray< FString > BoneNames
static FActorRigSnapshot FromActor(const AActor *Actor)
TArray< FTransform > SocketTransforms