From 51fde10129ea634ba14033919fe25df5f18aacc6 Mon Sep 17 00:00:00 2001 From: JavierGR Date: Thu, 3 Aug 2023 14:25:44 +0200 Subject: [PATCH] Fixing replayer crash when running in multi gpu mode --- .../Carla/Source/Carla/Game/FrameData.cpp | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/FrameData.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/FrameData.cpp index 999ef9510..4d4dbaa4d 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/FrameData.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/FrameData.cpp @@ -420,43 +420,37 @@ void FFrameData::AddVehicleWheelsAnimation(FCarlaActor *CarlaActor) return; if (CarlaActor->GetActorType() != FCarlaActor::ActorType::Vehicle) return; + ACarlaWheeledVehicle* CarlaVehicle = Cast(CarlaActor->GetActor()); - check(CarlaVehicle != nullptr) + if (CarlaVehicle == nullptr) + return; + USkeletalMeshComponent* SkeletalMesh = CarlaVehicle->GetMesh(); - check(SkeletalMesh != nullptr) + if (SkeletalMesh == nullptr) + return; + UVehicleAnimInstance* VehicleAnim = Cast(SkeletalMesh->GetAnimInstance()); - check(VehicleAnim != nullptr) + if (VehicleAnim == nullptr) + return; + const UWheeledVehicleMovementComponent* WheeledVehicleMovementComponent = VehicleAnim->GetWheeledVehicleMovementComponent(); - check(WheeledVehicleMovementComponent != nullptr) + if (WheeledVehicleMovementComponent == nullptr) + return; CarlaRecorderAnimWheels Record; Record.DatabaseId = CarlaActor->GetActorId(); + Record.WheelValues.reserve(WheeledVehicleMovementComponent->Wheels.Num()); - WheelInfo FL; - FL.Location = EVehicleWheelLocation::FL_Wheel; - FL.SteeringAngle = CarlaVehicle->GetWheelSteerAngle(FL.Location); - FL.TireRotation = WheeledVehicleMovementComponent->Wheels[static_cast(FL.Location)]->GetRotationAngle(); - - WheelInfo FR; - FR.Location = EVehicleWheelLocation::FR_Wheel; - FR.SteeringAngle = CarlaVehicle->GetWheelSteerAngle(FR.Location); - FR.TireRotation = WheeledVehicleMovementComponent->Wheels[static_cast(FR.Location)]->GetRotationAngle(); - - WheelInfo BL; - BL.Location = EVehicleWheelLocation::BL_Wheel; - BL.SteeringAngle = CarlaVehicle->GetWheelSteerAngle(BL.Location); - BL.TireRotation = WheeledVehicleMovementComponent->Wheels[static_cast(BL.Location)]->GetRotationAngle(); - - WheelInfo BR; - BR.Location = EVehicleWheelLocation::BR_Wheel; - BR.SteeringAngle = CarlaVehicle->GetWheelSteerAngle(BR.Location); - BR.TireRotation = WheeledVehicleMovementComponent->Wheels[static_cast(BR.Location)]->GetRotationAngle(); - - Record.WheelValues.reserve(4); - Record.WheelValues.push_back(FL); - Record.WheelValues.push_back(FR); - Record.WheelValues.push_back(BL); - Record.WheelValues.push_back(BR); + uint8 i = 0; + for (auto Wheel : WheeledVehicleMovementComponent->Wheels) + { + WheelInfo Info; + Info.Location = static_cast(i); + Info.SteeringAngle = CarlaVehicle->GetWheelSteerAngle(Info.Location); + Info.TireRotation = Wheel->GetRotationAngle(); + Record.WheelValues.push_back(Info); + ++i; + } AddAnimVehicleWheels(Record);