From c7ce0eab7a24430c2592dfa18a86b6300b300e4c Mon Sep 17 00:00:00 2001 From: Axel Date: Tue, 20 Jul 2021 09:47:32 +0200 Subject: [PATCH] Fix for StreetLights not registering in UCarlaLightSubsystem. --- .../Carla/Source/Carla/Game/CarlaGameModeBase.cpp | 14 ++++++++++++++ .../Carla/Source/Carla/Lights/CarlaLight.cpp | 6 ++++++ .../Plugins/Carla/Source/Carla/Lights/CarlaLight.h | 2 ++ 3 files changed, 22 insertions(+) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp index 878107d7f..4c912d2df 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Game/CarlaGameModeBase.cpp @@ -7,6 +7,7 @@ #include "Carla.h" #include "Carla/Game/CarlaGameModeBase.h" #include "Carla/Game/CarlaHUD.h" +#include "Carla/Lights/CarlaLight.h" #include "Engine/DecalActor.h" #include "Engine/LevelStreaming.h" #include "Engine/LocalPlayer.h" @@ -196,6 +197,19 @@ void ACarlaGameModeBase::BeginPlay() if (LMManager) { LMManager->RegisterInitialObjects(); } + + // Manually run begin play on lights as it may not run on sublevels + TArray FoundActors; + UGameplayStatics::GetAllActorsOfClass(World, AActor::StaticClass(), FoundActors); + for(AActor* Actor : FoundActors) + { + TArray Lights; + Actor->GetComponents(Lights, false); + for(UCarlaLight* Light : Lights) + { + Light->BeginPlay(); + } + } } void ACarlaGameModeBase::Tick(float DeltaSeconds) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.cpp index 90e184e71..b1803caeb 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.cpp @@ -15,6 +15,11 @@ UCarlaLight::UCarlaLight() void UCarlaLight::BeginPlay() { + if(bRegistered) + { + return; + } + Super::BeginPlay(); UWorld *World = GetWorld(); @@ -23,6 +28,7 @@ void UCarlaLight::BeginPlay() UCarlaLightSubsystem* CarlaLightSubsystem = World->GetSubsystem(); CarlaLightSubsystem->RegisterLight(this); } + bRegistered = true; } void UCarlaLight::OnComponentDestroyed(bool bDestroyingHierarchy) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.h index 29f92a17a..b4774386c 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Lights/CarlaLight.h @@ -104,4 +104,6 @@ protected: private: void RecordLightChange() const; + + bool bRegistered = false; };