116 lines
3.4 KiB
C++
116 lines
3.4 KiB
C++
// CARLA, Copyright (C) 2017 Computer Vision Center (CVC)
|
|
|
|
#pragma once
|
|
|
|
#include "Util/ActorWithRandomEngine.h"
|
|
#include "WalkerSpawnerBase.generated.h"
|
|
|
|
class AWalkerSpawnPoint;
|
|
class AWalkerSpawnPointBase;
|
|
class UBoxComponent;
|
|
|
|
/// Base class for spawning walkers. Implement SpawnWalker in derived
|
|
/// blueprints.
|
|
///
|
|
/// Walkers are spawned at a random AWalkerSpawnPoint present in the level, and
|
|
/// walk until its destination is reached at another random AWalkerSpawnPoint.
|
|
UCLASS(Abstract)
|
|
class CARLA_API AWalkerSpawnerBase : public AActorWithRandomEngine
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
// ===========================================================================
|
|
/// @name Constructor and destructor
|
|
// ===========================================================================
|
|
/// @{
|
|
public:
|
|
|
|
AWalkerSpawnerBase(const FObjectInitializer& ObjectInitializer);
|
|
|
|
/// @}
|
|
// ===========================================================================
|
|
/// @name Overriden from AActor
|
|
// ===========================================================================
|
|
/// @{
|
|
protected:
|
|
|
|
virtual void BeginPlay() override;
|
|
|
|
public:
|
|
|
|
virtual void Tick(float DeltaTime) override;
|
|
|
|
/// @}
|
|
// ===========================================================================
|
|
/// @name Blueprintable functions
|
|
// ===========================================================================
|
|
/// @{
|
|
protected:
|
|
|
|
UFUNCTION(BlueprintImplementableEvent)
|
|
void SpawnWalker(const FTransform &SpawnTransform, ACharacter *&SpawnedCharacter);
|
|
|
|
/// @}
|
|
// ===========================================================================
|
|
/// @name Other member functions
|
|
// ===========================================================================
|
|
/// @{
|
|
public:
|
|
|
|
void SetNumberOfWalkers(int32 Count);
|
|
|
|
int32 GetCurrentNumberOfWalkers() const
|
|
{
|
|
return Walkers.Num() + WalkersBlackList.Num();
|
|
}
|
|
|
|
const TArray<ACharacter *> &GetWalkersWhiteList() const {
|
|
return Walkers;
|
|
}
|
|
|
|
const TArray<ACharacter *> &GetWalkersBlackList() const {
|
|
return WalkersBlackList;
|
|
}
|
|
|
|
private:
|
|
|
|
const AWalkerSpawnPointBase &GetRandomSpawnPoint();
|
|
|
|
bool TryGetValidDestination(const FVector &Origin, FVector &Destination);
|
|
|
|
bool TryToSpawnWalkerAt(const AWalkerSpawnPointBase &SpawnPoint);
|
|
|
|
bool TrySetDestination(ACharacter &Walker);
|
|
|
|
/// @}
|
|
|
|
private:
|
|
|
|
/** If false, no walker will be spawned at all. */
|
|
UPROPERTY(Category = "Walker Spawner", EditAnywhere)
|
|
bool bSpawnWalkers = true;
|
|
|
|
/** If false, no walker will be spawned at begin play. */
|
|
UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers))
|
|
bool bSpawnWalkersAtBeginPlay = true;
|
|
|
|
/** Number of walkers to be present within the volume. */
|
|
UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers, ClampMin = "1"))
|
|
int32 NumberOfWalkers = 10;
|
|
|
|
/** Minimum walk distance in centimeters. */
|
|
UPROPERTY(Category = "Walker Spawner", EditAnywhere, meta = (EditCondition = bSpawnWalkers))
|
|
float MinimumWalkDistance = 1500.0f;
|
|
|
|
UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay)
|
|
TArray<AWalkerSpawnPoint *> SpawnPoints;
|
|
|
|
UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay)
|
|
TArray<ACharacter *> Walkers;
|
|
|
|
UPROPERTY(Category = "Walker Spawner", VisibleAnywhere, AdvancedDisplay)
|
|
TArray<ACharacter *> WalkersBlackList;
|
|
|
|
uint32 CurrentIndexToCheck = 0u;
|
|
};
|