Do not register player as agent

This commit is contained in:
nsubiron 2018-03-06 16:18:06 +01:00
parent ffe8b932f9
commit 494102d1ea
3 changed files with 33 additions and 2 deletions

View File

@ -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);
}

View File

@ -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;
};

View File

@ -11,6 +11,12 @@
#include "Vehicle/CarlaWheeledVehicle.h"
static bool IsPlayer(const ACarlaWheeledVehicle &Vehicle)
{
auto *Controller = Cast<AWheeledVehicleAIController>(Vehicle.GetController());
return (Controller != nullptr) && Controller->IsPossessingThePlayer();
}
UVehicleAgentComponent::UVehicleAgentComponent(const FObjectInitializer &ObjectInitializer)
: Super(ObjectInitializer) {}
@ -19,5 +25,8 @@ void UVehicleAgentComponent::BeginPlay()
WheeledVehicle = Cast<ACarlaWheeledVehicle>(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();
}