14#include "CarSimMovementComponent.h"
24 Vehicle->SetCarlaMovementComponent(CarSimManagerComponent);
25 CarSimManagerComponent->RegisterComponent();
27 UE_LOG(LogCarla, Warning, TEXT(
"Error: CarSim plugin is not enabled") );
38 UE_LOG(LogCarla, Warning, TEXT(
"Error: Owner is not properly set for UCarSimManagerComponent") );
43 FActorSpawnParameters SpawnParams;
44 SpawnParams.SpawnCollisionHandlingOverride =
45 ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
50 CarSimMovementComponent = NewObject<UCarSimMovementComponent>(OffsetActor);
53 CarlaVehicle->GetVehicleMovementComponent()->SetComponentTickEnabled(
false);
54 CarlaVehicle->GetVehicleMovementComponent()->Deactivate();
55 CarSimMovementComponent->DisableVehicle =
false;
56 CarSimMovementComponent->VsConfigFile =
SimfilePath;
57 CarSimMovementComponent->Activate();
58 CarSimMovementComponent->RegisterComponent();
60 CarSimMovementComponent->ResetVsVehicle(
false);
62 CarSimMovementComponent->SyncVsVehicleLocOri();
63 CarSimMovementComponent->SetComponentTickEnabled(
true);
65 CarlaVehicle->GetMesh()->PhysicsTransformUpdateMode = EPhysicsTransformUpdateMode::ComponentTransformIsKinematic;
66 auto * Bone =
CarlaVehicle->GetMesh()->GetBodyInstance(NAME_None);
69 Bone->SetInstanceSimulatePhysics(
false);
75 CarlaVehicle->GetMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_WorldStatic, ECollisionResponse::ECR_Overlap);
78 CarlaVehicle->GetMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_Visibility, ECollisionResponse::ECR_Overlap);
81 CarlaVehicle->AttachToActor(OffsetActor, FAttachmentTransformRules::KeepWorldTransform);
83 UE_LOG(LogCarla, Warning, TEXT(
"Error: CarSim plugin is not enabled") );
96 CarSimMovementComponent->SetSteeringInput(
Control.
Steer);
100 CarSimMovementComponent->SetBrakeInput(
Control.
Brake + 1.0);
102 Control.
Gear = CarSimMovementComponent->GetCurrentGear();
111 CarlaVehicle->GetMesh()->SetPhysicsLinearVelocity(FVector(0,0,0),
false,
"Vehicle_Base");
112 CarlaVehicle->GetVehicleMovementComponent()->SetComponentTickEnabled(
true);
113 CarlaVehicle->GetVehicleMovementComponent()->Activate();
114 CarlaVehicle->GetMesh()->PhysicsTransformUpdateMode = EPhysicsTransformUpdateMode::SimulationUpatesComponentTransform;
115 auto * Bone =
CarlaVehicle->GetMesh()->GetBodyInstance(NAME_None);
118 Bone->SetInstanceSimulatePhysics(
true);
124 CarlaVehicle->GetMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_WorldStatic, ECollisionResponse::ECR_Block);
125 CarlaVehicle->GetMesh()->SetCollisionProfileName(
"Vehicle");
137 FVector NormalImpulse,
138 const FHitResult &Hit)
147 int32 OtherBodyIndex,
149 const FHitResult & SweepResult)
151 if (OtherComp->GetCollisionResponseToChannel(
152 ECollisionChannel::ECC_WorldDynamic) ==
153 ECollisionResponse::ECR_Block)
162 int32 OtherBodyIndex)
169 CarSimMovementComponent->UseVehicleSimRoad = bEnabled;
170 CarSimMovementComponent->ResetVsVehicle(
false);
171 CarSimMovementComponent->SyncVsVehicleLocOri();
181 OffsetActor->Destroy();
186 UE_LOG(LogCarla, Warning, TEXT(
"Error: Owner is not properly set for UCarSimManagerComponent") );
201 return GetOwner()->GetActorForwardVector() * CarSimMovementComponent->GetForwardSpeed();
210 return CarSimMovementComponent->GetCurrentGear();
219 return CarSimMovementComponent->GetForwardSpeed();
UE_LOG(LogCarla, Log, TEXT("UActorDispatcher::Destroying actor: '%s' %x"), *Id, Actor)
TSharedPtr< const FActorInfo > carla::rpc::ActorState UWorld Actor
void RestoreVehiclePhysicsControl()
ACarlaWheeledVehicle * CarlaVehicle
void DisableCarSimPhysics()
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
int32 GetVehicleCurrentGear() const override
void OnCarSimEndOverlap(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex)
void OnCarSimHit(AActor *Actor, AActor *OtherActor, FVector NormalImpulse, const FHitResult &Hit)
float GetVehicleForwardSpeed() const override
void ProcessControl(FVehicleControl &Control) override
void OnCarSimOverlap(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
static void CreateCarsimComponent(ACarlaWheeledVehicle *Vehicle, FString Simfile)
virtual void DisableSpecialPhysics() override
void UseCarSimRoad(bool bEnabled)
virtual void BeginPlay() override
FVector GetVelocity() const override
static void CreateDefaultMovementComponent(ACarlaWheeledVehicle *Vehicle)
static void log_warning(Args &&... args)