Files
UnrealEngineUWP/Engine/Source/Developer/FunctionalTesting/Classes/FunctionalAITest.h
Mieszko Zielinski 1895e026a2 Added a way to trigger specific subset of functional tests #UE4
When a whole set of functional tests is run as part of summary a "Repro String" is generated. This string can be used as a parameter to RunAllFunctionalTests and if so only indicated tests will be performed.

[CL 2108028 by Mieszko Zielinski in Main branch]
2014-06-17 08:31:02 -04:00

146 lines
4.1 KiB
C++

// Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AITypes.h"
#include "FunctionalAITest.generated.h"
class UWorld;
class AFunctionalAITest;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FFunctionalTestAISpawned, AAIController*, Controller, APawn*, Pawn);
USTRUCT()
struct FAITestSpawnInfo
{
GENERATED_USTRUCT_BODY()
/** Determines AI to be spawned */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
TSubclassOf<class APawn> PawnClass;
/** class to override default pawn's controller class. If None the default will be used*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
TSubclassOf<class AAIController> ControllerClass;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
FGenericTeamId TeamID;
/** if set will be applied to spawned AI */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
class UBehaviorTree* BehaviorTree;
/** Where should AI be spawned */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
AActor* SpawnLocation;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn, meta=(UIMin=1, ClampMin=1))
int32 NumberToSpawn;
/** delay between consecutive spawn attempts */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AISpawn, meta = (UIMin = 0, ClampMin = 0))
float SpawnDelay;
/** Gets filled owning spawn set upon game start */
FName SpawnSetName;
FAITestSpawnInfo() : NumberToSpawn(1)
{}
FORCEINLINE bool IsValid() const { return PawnClass != NULL && SpawnLocation != NULL; }
bool Spawn(AFunctionalAITest* AITest) const;
};
USTRUCT()
struct FPendingDelayedSpawn : public FAITestSpawnInfo
{
GENERATED_USTRUCT_BODY()
uint32 NumberToSpawnLeft;
float TimeToNextSpawn;
bool bFinished;
FPendingDelayedSpawn()
: NumberToSpawnLeft(uint32(-1)), TimeToNextSpawn(FLT_MAX), bFinished(true)
{}
FPendingDelayedSpawn(const FAITestSpawnInfo& Source);
void Tick(float TimeDelta, AFunctionalAITest* AITest);
};
USTRUCT()
struct FAITestSpawnSet
{
GENERATED_USTRUCT_BODY()
/** what to spawn */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
TArray<FAITestSpawnInfo> SpawnInfoContainer;
/** give the set a name to help identify it if need be */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
FName Name;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=AISpawn)
uint32 bEnabled:1;
/** location used for spawning if spawn info doesn't define one */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AISpawn)
AActor* FallbackSpawnLocation;
FAITestSpawnSet() : bEnabled(true)
{}
};
UCLASS(Blueprintable, MinimalAPI)
class AFunctionalAITest : public AFunctionalTest
{
GENERATED_UCLASS_BODY()
protected:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=AITest)
TArray<FAITestSpawnSet> SpawnSets;
UPROPERTY(BlueprintReadOnly, Category=AITest)
TArray<APawn*> SpawnedPawns;
UPROPERTY(BlueprintReadOnly, Category = AITest)
TArray<FPendingDelayedSpawn> PendingDelayedSpawns;
int32 CurrentSpawnSetIndex;
FString CurrentSpawnSetName;
/** Called when a single AI finished spawning */
UPROPERTY(BlueprintAssignable)
FFunctionalTestAISpawned OnAISpawned;
/** Called when a all AI finished spawning */
UPROPERTY(BlueprintAssignable)
FFunctionalTestEventSignature OnAllAISPawned;
uint32 bSingleSetRun:1;
public:
UFUNCTION(BlueprintCallable, Category = "Development")
virtual bool IsOneOfSpawnedPawns(AActor* Actor);
// AActor interface begin
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
// AActor interface end
virtual bool StartTest(const TArray<FString>& Params = TArray<FString>()) override;
virtual void FinishTest(TEnumAsByte<EFunctionalTestResult::Type> TestResult, const FString& Message) override;
virtual bool WantsToRunAgain() const override;
virtual void CleanUp() override;
virtual FString GetAdditionalTestFinishedMessage(EFunctionalTestResult::Type TestResult) const override;
virtual FString GetReproString() const override;
void AddSpawnedPawn(APawn& SpawnedPawn);
protected:
void KillOffSpawnedPawns();
void ClearPendingDelayedSpawns();
};