From 494102d1ea71c20866d022c8f1ebc61e5f9a7406 Mon Sep 17 00:00:00 2001 From: nsubiron Date: Tue, 6 Mar 2018 16:18:06 +0100 Subject: [PATCH] Do not register player as agent --- .../Carla/Source/Carla/Agent/AgentComponent.cpp | 14 ++++++++++++-- .../Carla/Source/Carla/Agent/AgentComponent.h | 12 ++++++++++++ .../Source/Carla/Agent/VehicleAgentComponent.cpp | 9 +++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp index 547081e2a..93b285d8b 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.cpp @@ -37,11 +37,21 @@ void UAgentComponent::AcceptVisitor(IAgentComponentVisitor &Visitor) const void UAgentComponent::BeginPlay() { Super::BeginPlay(); - GetDataRouter(GetWorld()).RegisterAgent(this); + + if (bRegisterAgentComponent) + { + GetDataRouter(GetWorld()).RegisterAgent(this); + bAgentComponentIsRegistered = true; + } } void UAgentComponent::EndPlay(const EEndPlayReason::Type EndPlayReason) { - GetDataRouter(GetWorld()).DeregisterAgent(this); + if (bAgentComponentIsRegistered) + { + GetDataRouter(GetWorld()).DeregisterAgent(this); + bAgentComponentIsRegistered = false; + } + Super::EndPlay(EndPlayReason); } diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h index 7262e1e89..c9b241ec8 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/AgentComponent.h @@ -36,4 +36,16 @@ protected: virtual void BeginPlay() override; virtual void EndPlay(EEndPlayReason::Type EndPlayReason) override; + +protected: + + /** If true, this component will be registered at BeginPlay. */ + UPROPERTY(Category = "Agent Component", EditAnywhere) + bool bRegisterAgentComponent = true; + +private: + + /** Whether this component has been registered. */ + UPROPERTY(Category = "Agent Component", VisibleAnywhere, AdvancedDisplay) + bool bAgentComponentIsRegistered = false; }; diff --git a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp index be045161c..b5be052b7 100644 --- a/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp +++ b/Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Agent/VehicleAgentComponent.cpp @@ -11,6 +11,12 @@ #include "Vehicle/CarlaWheeledVehicle.h" +static bool IsPlayer(const ACarlaWheeledVehicle &Vehicle) +{ + auto *Controller = Cast(Vehicle.GetController()); + return (Controller != nullptr) && Controller->IsPossessingThePlayer(); +} + UVehicleAgentComponent::UVehicleAgentComponent(const FObjectInitializer &ObjectInitializer) : Super(ObjectInitializer) {} @@ -19,5 +25,8 @@ void UVehicleAgentComponent::BeginPlay() WheeledVehicle = Cast(GetOwner()); checkf(WheeledVehicle != nullptr, TEXT("UVehicleAgentComponent can only be attached to ACarlaWheeledVehicle")); + // We only want to register non-player agents. + bRegisterAgentComponent = !IsPlayer(*WheeledVehicle); + Super::BeginPlay(); }