LEAP Documentation 40220
Documentation for the LEAP project
ProjectXGameStateHorde.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2022. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "WaveSpawner.h"
8#include "ProjectXGameStateHorde.generated.h"
9
10class AWaveSpawner;
12
13USTRUCT(BlueprintType)
15{
16 GENERATED_USTRUCT_BODY()
18
19 UPROPERTY(BlueprintReadWrite)
20 int32 Kills = 0;
21 UPROPERTY(BlueprintReadWrite)
22 int32 Spawns = 0;
23};
24
25USTRUCT(BlueprintType)
27{
28 GENERATED_USTRUCT_BODY()
30
31 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
32 TMap<TSubclassOf<AActor>, TSubclassOf<AActor>> AIReplacements;
33 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
34 float EXPMultiplier = 1.0f;
35 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
36 float SurviveTimeMultiplier = 1.0f;
37 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
38 float MissionTimeMultiplier = 1.0f;
39 /* For any value > 0, when there's only 1 player, we'll switch for a lives-based system */
40 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
41 int SoloLivesCount = 0;
42};
43
44USTRUCT(BlueprintType)
46{
47 GENERATED_USTRUCT_BODY()
49
50 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
51 TMap<EWaveTimerType, FText> WaveTimerText;
52
53};
54
55UENUM(BlueprintType)
56enum class EHordePlayerStatus : uint8
57{
58 Joined = 0,
59 Alive = 1,
60 Dead = 2
61};
62
63DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaveFailedSignature, uint8, CurrentFailureCount);
64DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FActivePlayersUpdatedSignature,const TArray<AProjectXPlayerState*>&, ActivePlayers);
65DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPrimarySpawnerUpdatedSignature, const AWaveSpawner*, WaveSpawner);
66DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnMobKilledSignature,const AProjectXCharacter*, Character);
67DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMobKillsUpdatedSignature,const FWaveInfo&, WaveInfo);
68DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnDifficultyUpdatedSignature, EDifficultyLevel, DifficultyLevel);
69DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnLivesAvailableChangedSignature, uint8, LivesAvailable);
70
71UCLASS()
73{
74 GENERATED_BODY()
75
76 virtual const FText GetTimerText();
77
78public:
79 UPROPERTY(EditDefaultsOnly)
80 TMap<EDifficultyLevel, FDifficultyInfo> DifficultyLevels;
81 UPROPERTY(EditDefaultsOnly)
82 TMap<uint8, FWaveTimerTextInfo> WaveTimerTextOverrides;
83
84 UFUNCTION(BlueprintCallable)
85 AWaveSpawner* K2_GetPrimaryWaveSpawner() const;
86 UFUNCTION(BlueprintCallable)
87 const FWaveInfo& GetCurrentWaveInfo() const {return CurrentWaveInfo;}
88 UFUNCTION(BlueprintCallable)
89 const uint8 GetAvailableLives() const { return AvailableLives; }
90 UFUNCTION(BlueprintCallable)
91 int GetNumConnectedPlayers() const;
92 UFUNCTION(BlueprintCallable)
93 const uint8 GetMaxAvaliableLives() const;
94 UFUNCTION(BlueprintCallable)
95 void ConsumeAvailableLife();
96 UFUNCTION(BlueprintCallable, Category = "Horde")
97 EDifficultyLevel GetCurrentDifficultyLevel() const { return DifficultyLevel; }
98
99 FText GetRevivePromptOverride_Implementation(const AProjectXPlayerState* Target, const AProjectXPlayerState* ReviveInstigator) const override;
100 AProjectXCharacter* const GetLivingPlayer() const;
101 const FDifficultyInfo* GetCurrentDifficultyInfo() const;
102 const TMap<TWeakObjectPtr<AProjectXPlayerState>, EHordePlayerStatus>& GetPlayerOwnedPlayerStates() const { return PlayerOwnedPlayerStates;};
103 const TWeakObjectPtr<AWaveSpawner> GetPrimaryWaveSpawner() const { return PrimaryWaveSpawner; }
104
105 virtual void BeginPlay() override;
106 virtual void AddPlayerState(APlayerState* PlayerState) override;
107 virtual void RemovePlayerState(APlayerState* PlayerState) override;
108 virtual void UpdatePlayerStateStatus(AProjectXPlayerState* const PlayerState, EHordePlayerStatus Status);
109 virtual bool HasSoloPlayerThatCanBeRevived();
110
111 virtual TSubclassOf<AActor> CheckForActorReplacement(TSubclassOf<AActor> Actor) override;
112 void SetPrimaryWaveSpawner(AWaveSpawner* const WaveSpawer);
113
114 UFUNCTION()
115 virtual void OnTimedWaveComplete(AWaveSpawner* const WaveSpawner, bool bSuccess);
116 UFUNCTION(BlueprintCallable, Category = "Horde")
117 void SetDifficultyLevel(EDifficultyLevel NewDifficultyLevel);
118
119 UFUNCTION(NetMulticast, Reliable)
120 void Multicast_DisplayKillCounter();
121
122 UFUNCTION(BlueprintImplementableEvent)
123 void ShowKillCounter();
124
125 UPROPERTY(BlueprintAssignable)
126 FOnPrimarySpawnerUpdatedSignature OnPrimarySpawnerUpdatedEvent;
127 UPROPERTY(BlueprintAssignable)
128 FOnMobKilledSignature OnMobKilledEvent;
129 UPROPERTY(BlueprintAssignable)
130 FMobKillsUpdatedSignature OnWaveKillsUpdatedEvent;
131 UPROPERTY(BlueprintAssignable)
132 FOnDifficultyUpdatedSignature OnDifficultyUpdateEvent;
133 UPROPERTY(BlueprintAssignable)
134 FOnLivesAvailableChangedSignature OnLivesAvailableChanged;
135
136protected:
137 UFUNCTION()
138 virtual void UpdateWaveProgress(AWaveSpawner* const WaveSpawner, int32 WaveSize, int32 WaveKills);
139 UFUNCTION()
140 virtual void UpdateCurrentWave(AWaveSpawner* const Spawner);
141
142 UFUNCTION()
143 void OnRep_WaveInfo();
144 UFUNCTION()
145 void OnRep_DifficultyLevel();
146 UFUNCTION()
147 void OnRep_AvailableLives();
148
149 TMap<TWeakObjectPtr<AProjectXPlayerState>, EHordePlayerStatus> PlayerOwnedPlayerStates = TMap<TWeakObjectPtr<AProjectXPlayerState>, EHordePlayerStatus>();
150 TWeakObjectPtr<AWaveSpawner> PrimaryWaveSpawner;
151
152 UPROPERTY(ReplicatedUsing = OnRep_WaveInfo)
153 FWaveInfo CurrentWaveInfo = FWaveInfo();
154 UPROPERTY(Replicated)
155 uint8 CurrentWave = 0;
156 UPROPERTY(ReplicatedUsing=OnRep_DifficultyLevel)
158 UPROPERTY(ReplicatedUsing = OnRep_AvailableLives)
159 uint8 AvailableLives = 0;
160};
EDifficultyLevel
Definition: ProjectXGameState.h:54
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWaveFailedSignature, uint8, CurrentFailureCount)
EHordePlayerStatus
Definition: ProjectXGameStateHorde.h:57
EWaveTimerType
Definition: WaveSpawner.h:72
Definition: ProjectXCharacter.h:128
Definition: ProjectXGameStateHorde.h:73
const TMap< TWeakObjectPtr< AProjectXPlayerState >, EHordePlayerStatus > & GetPlayerOwnedPlayerStates() const
Definition: ProjectXGameStateHorde.h:102
const TWeakObjectPtr< AWaveSpawner > GetPrimaryWaveSpawner() const
Definition: ProjectXGameStateHorde.h:103
Definition: ProjectXGameState.h:158
Definition: ProjectXPlayerState.h:238
uint16 Kills
Definition: ProjectXPlayerState.h:708
virtual void BeginPlay() override
Definition: ProjectXPlayerState.cpp:122
float EXPMultiplier
Definition: ProjectXPlayerState.h:784
Definition: WaveSpawner.h:115
Definition: ProjectXGameStateHorde.h:27
Definition: ProjectXGameStateHorde.h:15
Definition: ProjectXGameStateHorde.h:46