5#include "CoreMinimal.h"
6#include "GameFramework/Actor.h"
9#include "Engine/DataTable.h"
10#include "Engine/DataAsset.h"
11#include "WeakInterfacePtr.h"
12#include "WaveSpawner.generated.h"
16class UAfflictionInstance;
22 GENERATED_USTRUCT_BODY()
25 UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (MustImplement =
"ISpawnInterface"))
26 TArray<AActor*> SpawnersToActivate;
28 UPROPERTY(EditAnywhere, BlueprintReadWrite)
29 bool bEndWaveIfAllEnemiesKilled = false;
31 UPROPERTY(EditAnywhere, BlueprintReadWrite)
32 float RespawnGroupSize = INDEX_NONE;
34 UPROPERTY(EditAnywhere, BlueprintReadWrite)
35 float RespawnDelay = 10.0f;
37 UPROPERTY(EditAnywhere, BlueprintReadWrite)
38 bool bStaggeredRespawns = true;
40 UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = "!bEndWaveIfAllEnemiesKilled"))
41 float NumEnemiesKilledToEndWave = INDEX_NONE;
43 UPROPERTY(EditAnywhere, BlueprintReadWrite)
44 float TimeToEndWave = INDEX_NONE;
46 UPROPERTY(EditAnywhere, BlueprintReadWrite)
47 float WaveCooldownOverride = INDEX_NONE;
49 UPROPERTY(EditAnywhere, BlueprintReadWrite)
50 float WaveFailureTime = INDEX_NONE;
53 TArray<TWeakObjectPtr<AActor>> CachedSpawnerWeakPtrs;
54 int32 CompletedSpawns = 0;
56 bool IsWaveSpawningComplete()
const {
return CompletedSpawns >= SpawnersToActivate.Num(); }
82 GENERATED_USTRUCT_BODY()
85 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
86 USoundCue* WaveCue = NULL;
87 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
88 FString AnnouncerVoiceToPlay = "";
89 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
90 FText WaveNarrativeMessage;
91 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
100 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
102 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Customization)
103 bool bDisplayKillProgress = false;
104 UPROPERTY(EditAnywhere,BlueprintReadWrite, Category = Cusomtization)
105 FText KillDescriptionText;
120 UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (EditCondition =
"!bExecutesOnBeginPlay"))
121 bool bExecuteOnMatchStart = true;
123 UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (EditCondition = "!bExecuteOnMatchStart"))
124 bool bExecutesOnBeginPlay = false;
126 UPROPERTY(BlueprintReadWrite, EditAnywhere)
127 float StartTimeDelay = 0.0f;
129 UPROPERTY(BlueprintReadWrite, EditAnywhere)
130 float WaveCooldownTime = 15.0f;
132 UPROPERTY(BlueprintReadWrite, EditAnywhere)
133 bool bEndGameWithVictoryIfAllWavesCompleted = false;
135 UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (MustImplement = "
ISpawnInterface"))
136 TSubclassOf<AActor> RespawnActor =
nullptr;
138 UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (EditCondition = "
bDebug"))
139 int32 EnemyTeam = 99;
141 UPROPERTY(BlueprintReadWrite, EditAnywhere)
144 UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (EditCondition = "
bDebug"))
145 bool bVerboseDebug = false;
147 UPROPERTY(BlueprintReadWrite, EditAnywhere)
150 UPROPERTY(BlueprintReadWrite, EditAnywhere)
151 bool bPrimarySpawner = false;
152 UPROPERTY(BlueprintReadOnly)
153 float SurviveTimeMultiplier = 1.0f;
154 UPROPERTY(BlueprintReadOnly)
155 float WaveFailureTimeMultiplier = 1.0f;
159 UFUNCTION(BlueprintPure)
160 FORCEINLINE int32 GetCurrentWave()
const {
return CurrentWave; }
161 UFUNCTION(BlueprintPure)
162 FORCEINLINE int32 GetTotalWaves()
const {
return Waves.Num(); }
163 UFUNCTION(BlueprintPure)
164 FORCEINLINE int32 GetTotalKills()
const {
return TotalMobsKilled; }
165 UFUNCTION(BlueprintPure)
166 FORCEINLINE
float GetWaveProgress()
const {
return (
float)GetCurrentWave() / (float)GetTotalWaves(); }
167 UFUNCTION(BlueprintPure)
169 UFUNCTION(BlueprintPure)
170 FORCEINLINE
bool IsADefeatEnemyWave(int32 Wave)
const {
return Waves.IsValidIndex(Wave) ? Waves[Wave].bEndWaveIfAllEnemiesKilled :
false;}
171 UFUNCTION(BlueprintPure)
172 int32 GetNumberOfEnemiesNeededToProgress(int32 Wave)
const;
173 UFUNCTION(BlueprintCallable)
174 virtual void SpawnWave();
175 UFUNCTION(BlueprintCallable)
176 virtual void EndWave();
178 UFUNCTION(BlueprintPure)
179 static void GetWaveSpawnerStateFromPackedInt(
const int32 Data, int32& Wave,
EWaveSpawnerState& State);
182 virtual int32 GetPackedWaveState();
184 virtual void BroadcastWaveStateToPlayer(APlayerController*
const SpecificPlayer);
185 virtual void NextWave();
190 virtual void RespawnMobs(
const FVector Location, TArray<TSubclassOf<AActor>> MobList);
191 virtual void CancelRespawns();
192 virtual void GameOver(
const bool bVictory);
193 virtual int32 GetPlayerTeam()
const;
194 virtual void WipeMobs();
195 bool HasWaveBeenDefeated()
const;
196 bool EnemiesRemainingToEndWave()
const;
199 void RespawnerFinsished(AActor* Actor, EEndPlayReason::Type EndPlayReason);
201 void EventComplete(
bool bSuccess);
207 void OnSpawnerCompleted(UObject* Spawner);
208 void ApplyWaveAffliction();
209 UPROPERTY(BlueprintAssignable)
210 FWaveSpawnerCompletedSignature OnWaveSpawnerEventsCompletedEvent;
211 UPROPERTY(BlueprintAssignable)
212 FWaveSpawnerCompletedSignature OnWaveCompletedEvent;
213 UPROPERTY(BlueprintAssignable)
214 FWaveSpawnerWaveStartedSignature OnWaveStartedEvent;
215 UPROPERTY(BlueprintAssignable)
216 FWaveSpawnerMobDefeatedSignature OnMobsDefeatedEvent;
217 UPROPERTY(BlueprintAssignable)
218 FWaveSpawnerCompletedSignature OnTimedWaveCompletedEvent;
219 UPROPERTY(BlueprintAssignable)
220 FWaveSpawnerMobCountUpdatedSignature OnMobCountUpdatedSignature;
221 UPROPERTY(BlueprintAssignable)
222 FWaveSpawnerWaveStartedSignature OnWaveProgress;
226 UPROPERTY(EditAnywhere, BlueprintReadWrite)
227 TSubclassOf<UAfflictionInstance> SpawnedCharacterAffliction = NULL;
229 UPROPERTY(EditAnywhere, BlueprintReadWrite)
230 float CharacterAfflictionTriggerPercentage = 0.5f;
234 int32 CurrentWave = 0;
235 int32 TotalMobsKilled = 0;
236 int32 TotalMobsSpawned = 0;
237 bool bAppliedWaveAffliction = false;
238 TArray<TWeakObjectPtr<AActor>> ActiveRespawners;
239 TArray<TSubclassOf<AActor>> MobRespawnList;
242 uint32 QueuedRespawns = 0;
EWaveTimerType
Definition: WaveSpawner.h:72
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FWaveSpawnerMobCountUpdatedSignature, AWaveSpawner *const, WaveSpawner, int32, TotalMobCount, int32, DefeatedMobCount)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaveSpawnerWaveStartedSignature, AWaveSpawner *const, WaveSpawner)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FWaveSpawnerCompletedSignature, AWaveSpawner *const, WaveSpawner, bool, bSuccess)
EWaveSpawnerState
Definition: WaveSpawner.h:61
Definition: ProjectXCharacter.h:128
Definition: ProjectXSpawnerObjective.h:53
bool bDebug
Definition: ProjectXSpawnerObjective.h:133
virtual void BeginSpawning_Implementation() override
Definition: ProjectXSpawnerObjective.cpp:86
virtual void BeginPlay() override
Definition: ProjectXSpawnerObjective.cpp:28
Definition: WaveSpawner.h:115
virtual bool ImplementsSpawnCompleteCallback() const override
Definition: WaveSpawner.h:189
Definition: ReactsToMatchEvents.h:16
virtual void MatchStarted()
Definition: ReactsToMatchEvents.cpp:11
Definition: SpawnInterface.h:24
Definition: WaveSpawner.h:97
Definition: WaveSpawner.h:21
Definition: WaveSpawner.h:81