diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp index 78d20e58b..52077cc03 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Traffic/TrafficLightManager.cpp @@ -259,6 +259,29 @@ void ATrafficLightManager::SpawnTrafficLights() TrafficLight->GetRootComponent(), FAttachmentTransformRules::KeepRelativeTransform); + auto ClosestWaypointToSignal = + GetMap()->GetClosestWaypointOnRoad(CarlaTransform.location); + if (ClosestWaypointToSignal) + { + auto SignalDistanceToRoad = + (GetMap()->ComputeTransform(ClosestWaypointToSignal.get()).location - CarlaTransform.location).Length(); + double LaneWidth = GetMap()->GetLaneWidth(ClosestWaypointToSignal.get()); + + if(SignalDistanceToRoad < LaneWidth / 2.0) + { + UE_LOG(LogCarla, Warning, + TEXT("Traffic light %s overlaps a driving lane. Disabling collision..."), + *TrafficLightComponent->GetSignId()); + + TArray Primitives; + TrafficLight->GetComponents(Primitives); + for (auto* Primitive : Primitives) + { + Primitive->SetCollisionProfileName(TEXT("NoCollision")); + } + } + } + RegisterLightComponent(TrafficLightComponent); } } @@ -299,6 +322,29 @@ void ATrafficLightManager::SpawnSignals() FAttachmentTransformRules::KeepRelativeTransform); SignComponent->InitializeSign(GetMap().get()); + auto ClosestWaypointToSignal = + GetMap()->GetClosestWaypointOnRoad(CarlaTransform.location); + if (ClosestWaypointToSignal) + { + auto SignalDistanceToRoad = + (GetMap()->ComputeTransform(ClosestWaypointToSignal.get()).location - CarlaTransform.location).Length(); + double LaneWidth = GetMap()->GetLaneWidth(ClosestWaypointToSignal.get()); + + if(SignalDistanceToRoad < LaneWidth / 2.0) + { + UE_LOG(LogCarla, Warning, + TEXT("Traffic light %s overlaps a driving lane. Disabling collision..."), + *SignComponent->GetSignId()); + + TArray Primitives; + TrafficSign->GetComponents(Primitives); + for (auto* Primitive : Primitives) + { + Primitive->SetCollisionProfileName(TEXT("NoCollision")); + } + } + } + TrafficSignComponents.Add(SignComponent->GetSignId(), SignComponent); TrafficSigns.Add(TrafficSign);