Updated the information that traffic lights sent to vehicles
This commit is contained in:
parent
e228aa0fff
commit
90c624bc8c
|
@ -1,5 +1,8 @@
|
|||
## Latest
|
||||
|
||||
* Fixed bug at `Vehicle.get_traffic_light_state()` and `Vehicle.is_at_traffic_light()` causing vehicles to temporarily not lose the information of a traffic light if they moved away from it before it turned green.
|
||||
* Fixed bug causing the `Vehicle.get_traffic_light_state()` function not notify about the green to yellow and yellow to red light state changes.
|
||||
* Fixed bug causing the `Vehicle.is_at_traffic_light()` function to return *false* if the traffic light was green.
|
||||
* Fixed bug causing the scene lights to return an incorrect location at large maps.
|
||||
* Fixed bug causing the `world.ground_projection()` function to return an incorrect location at large maps.
|
||||
* Added failure state to vehicles, which can be retrieved by using `Vehicle.get_failure_state()`. Only Rollover failure state is currently supported.
|
||||
|
|
|
@ -78,14 +78,11 @@ void ATrafficLightBase::NotifyWheeledVehicle(ACarlaWheeledVehicle *Vehicle)
|
|||
if (Controller != nullptr)
|
||||
{
|
||||
Controller->SetTrafficLightState(GetTrafficLightState());
|
||||
if (GetTrafficLightState() != ETrafficLightState::Green)
|
||||
{
|
||||
Vehicles.Add(Controller);
|
||||
Controller->SetTrafficLight(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ATrafficLightBase::UnNotifyWheeledVehicle(ACarlaWheeledVehicle *Vehicle)
|
||||
{
|
||||
|
|
|
@ -93,7 +93,8 @@ void UTrafficLightComponent::GenerateTrafficLightBox(const FTransform BoxTransfo
|
|||
const FVector BoxSize)
|
||||
{
|
||||
UBoxComponent* BoxComponent = GenerateTriggerBox(BoxTransform, BoxSize);
|
||||
BoxComponent->OnComponentBeginOverlap.AddDynamic(this, &UTrafficLightComponent::OnOverlapTriggerBox);
|
||||
BoxComponent->OnComponentBeginOverlap.AddDynamic(this, &UTrafficLightComponent::OnBeginOverlapTriggerBox);
|
||||
BoxComponent->OnComponentEndOverlap.AddDynamic(this, &UTrafficLightComponent::OnEndOverlapTriggerBox);
|
||||
AddEffectTriggerVolume(BoxComponent);
|
||||
}
|
||||
|
||||
|
@ -116,17 +117,9 @@ void UTrafficLightComponent::SetLightState(ETrafficLightState NewState)
|
|||
if (Controller != nullptr)
|
||||
{
|
||||
Controller->SetTrafficLightState(LightState);
|
||||
if (LightState == ETrafficLightState::Green)
|
||||
{
|
||||
Controller->SetTrafficLight(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (LightState == ETrafficLightState::Green)
|
||||
{
|
||||
Vehicles.Empty();
|
||||
}
|
||||
}
|
||||
|
||||
ETrafficLightState UTrafficLightComponent::GetLightState() const
|
||||
{
|
||||
|
@ -161,7 +154,7 @@ const UTrafficLightController* UTrafficLightComponent::GetController() const
|
|||
return TrafficLightController;
|
||||
}
|
||||
|
||||
void UTrafficLightComponent::OnOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
void UTrafficLightComponent::OnBeginOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
AActor *OtherActor,
|
||||
UPrimitiveComponent *OtherComp,
|
||||
int32 OtherBodyIndex,
|
||||
|
@ -176,14 +169,29 @@ void UTrafficLightComponent::OnOverlapTriggerBox(UPrimitiveComponent *Overlapped
|
|||
if (VehicleController)
|
||||
{
|
||||
VehicleController->SetTrafficLightState(LightState);
|
||||
if (LightState != ETrafficLightState::Green)
|
||||
{
|
||||
Vehicles.Add(VehicleController);
|
||||
VehicleController->SetTrafficLight(
|
||||
Cast<ATrafficLightBase>(GetOwner()));
|
||||
VehicleController->SetTrafficLight(Cast<ATrafficLightBase>(GetOwner()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UTrafficLightComponent::OnEndOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
AActor *OtherActor,
|
||||
UPrimitiveComponent *OtherComp,
|
||||
int32 OtherBodyIndex)
|
||||
{
|
||||
ACarlaWheeledVehicle * Vehicle = Cast<ACarlaWheeledVehicle>(OtherActor);
|
||||
if (Vehicle)
|
||||
{
|
||||
AWheeledVehicleAIController* VehicleController =
|
||||
Cast<AWheeledVehicleAIController>(Vehicle->GetController());
|
||||
if (VehicleController)
|
||||
{
|
||||
VehicleController->SetTrafficLightState(ETrafficLightState::Green);
|
||||
VehicleController->SetTrafficLight(nullptr);
|
||||
Vehicles.Remove(VehicleController);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UTrafficLightComponent::SetController(UTrafficLightController* Controller)
|
||||
|
|
|
@ -55,13 +55,21 @@ public:
|
|||
protected:
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void OnOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
void OnBeginOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
AActor *OtherActor,
|
||||
UPrimitiveComponent *OtherComp,
|
||||
int32 OtherBodyIndex,
|
||||
bool bFromSweep,
|
||||
const FHitResult &SweepResult);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void OnEndOverlapTriggerBox(UPrimitiveComponent *OverlappedComp,
|
||||
AActor *OtherActor,
|
||||
UPrimitiveComponent *OtherComp,
|
||||
int32 OtherBodyIndex);
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
friend ATrafficLightManager;
|
||||
|
|
Loading…
Reference in New Issue