5#include "CoreMinimal.h"
6#include "GameFramework/GameMode.h"
7#include "ProjectXGameMode.generated.h"
14class UVehicleSeatComponent;
19 extern PROJECTX_API
const FName
WarmUp;
22class AProjectXPlayerStateTeam;
27 GENERATED_USTRUCT_BODY()
30 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
31 int32 StartingTicketCount = INDEX_NONE;
33 TArray<class APlayerStart*> PlayerStarts;
70 GENERATED_USTRUCT_BODY()
73 FEndGameEvent(
const int32 InWinningTeam) : WinningTeam(InWinningTeam) {}
74 int32 WinningTeam = INDEX_NONE;
80 GENERATED_USTRUCT_BODY()
83 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
84 TSubclassOf<class AActor> SpawnableActor =
nullptr;
86 UPROPERTY(EditInstanceOnly, BlueprintReadWrite, meta = (ClampMin = "-1.0", ClampMax = "1000.0", UIMin = "-1.0", UIMax = "1000.0"))
87 float SpawnWeight = 100.0f;
89 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
90 bool bSpawnIndefinitely = true;
92 UPROPERTY(EditInstanceOnly, BlueprintReadWrite)
93 bool bAuthorityOnly = false;
95 UPROPERTY(EditInstanceOnly, BlueprintReadWrite, meta = (EditCondition = "!bSpawnIndefinitely"))
96 FVector2D SpawnMinMax = FVector2D(1.0f, 2.0f);
98 FORCEINLINE const
float GetMaxSpawn()
const {
return SpawnMinMax.Y; }
99 FORCEINLINE
const float GetMinSpawn()
const {
return SpawnMinMax.X; }
110 uint32 SpawnedCount = 0;
116 GENERATED_UCLASS_BODY()
119 FORCEINLINE TSubclassOf<AHUD>
GetHUDClass()
const {
return HUDClass; }
122 int32 GetMaxPlayers()
const;
131 UFUNCTION(BlueprintPure, Category =
GameMode, meta = (WorldContext =
"WorldContextObject"))
132 static
AProjectXGameMode* GetGameModeDefaultObject(const UObject* WorldContextObject);
134 UFUNCTION(BlueprintPure)
135 bool AreLoadoutsEnabled()
const {
return bLoadoutsEnabled;}
137 const TMap<uint8, FTeamInfo>&
GetTeamConfig()
const {
return TeamStartingConfig; }
138 virtual APawn* SpawnDefaultPawnAtTransform_Implementation(AController* NewPlayer,
const FTransform& SpawnTransform)
override;
145 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
146 float RestartMatchTime = 5.0f;
148 virtual
void InitGame(const FString&
MapName, const FString& Options, FString& ErrorMessage) override;
149 virtual
void Tick(
float DeltaSeconds) override;
150 virtual
void InitGameState() override;
151 virtual
void UpdateNetDriver();
152 virtual
void StartPlay() override;
153 virtual
void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
154 virtual
void OnDeath(AController* Killed, AController* Killer, TSubclassOf<class
UProjectXDamageType> DamageType,
bool bWasHeadshot);
155 virtual
void OnTeamKill(APlayerController* Killer, APlayerController* Killed);
156 virtual
void StartMatch() override;
157 virtual
void EndWarmUp();
158 virtual
void RequestServerRestart();
159 virtual
bool IsMatchInProgress() const override;
160 virtual
void OnMatchStateSet() override;
161 virtual
void EndMatch();
162 virtual
void SetNextMapOverrideByName(const FName& NextMapName);
164 virtual
void MatchStartRequest();
165 virtual
bool CanRestart() const;
167 virtual
bool IsMatchInWarmUp() const;
170 virtual
void EndMatchTimer();
172 UFUNCTION(BlueprintCallable, Category =
GameMode)
173 virtual
bool RequestServerTravel(const FString& URL);
175 virtual
void RestartPlayer(AController* NewPlayer) override;
176 virtual
void FinishRestartPlayer(AController* NewPlayer, const FRotator& StartRotation);
178 virtual
void PreLogin(const FString& Options, const FString& Address, const FUniqueNetIdRepl& UniqueId, FString& ErrorMessage) override;
179 virtual APlayerController* Login(UPlayer* NewPlayer, ENetRole InRemoteRole, const FString& Portal, const FString& Options, const FUniqueNetIdRepl& UniqueId, FString& ErrorMessage) override;
180 virtual
void PostLogin(APlayerController* NewPlayer) override;
181 virtual
void Logout(AController* Exiting) override;
183 virtual AActor* ChoosePlayerStart_Implementation(AController* Player) override;
184 virtual UClass* GetDefaultPawnClassForController_Implementation(AController* Player) override;
185 virtual UClass* GetDefaultHUDClassForController(APlayerController* Player) const;
187 virtual
void InitializeHUDForPlayer_Implementation(APlayerController* NewPlayer) override;
189 void RegisterPostGameLineup(AActor* PostGamePodium);
191 float GetPassiveUltChargeAmount();
195 FORCEINLINE int32 GetPlayerMaxDeployables()
const {
return MaxPlayerDeployables; }
197 UFUNCTION(BlueprintCallable)
198 virtual bool ConsumeTicket(int32
Team, int32 Amount = 1);
205 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
206 int32 MaxPlayers = 16;
208 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Config, Category =
GameMode)
209 int32 MaxSpectators = 8;
211 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Config, Category =
GameMode)
212 int32 MaxTeamImbalance = 1;
214 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
215 float MatchStartTime = 5.0f;
217 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
218 float MatchStartTimeEditor = 3.0f;
220 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
221 float MatchLength = -1.0f;
223 UPROPERTY(EditDefaultsOnly, Config, BlueprintReadOnly, Category =
GameMode)
224 bool bLoadoutsEnabled = true;
225 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
GameMode, meta = (DisplayName = "Minimum Redeploy Respawn Delay"))
226 float RedeployRespawnTime = 10.0f;
227 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
GameMode)
228 bool bCanSwapTeams = true;
230 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
GameMode)
231 int32 MaxPlayerDeployables = 1;
232 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
GameMode)
233 float ReviveDuration = 30.0f;
235 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
GameMode)
236 bool bPreventIdleKickWhileDead = false;
238 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Classes, meta = (DisplayName = "Spectator
HUD Class"))
239 TSubclassOf<AHUD> SpectatorHUDClass = NULL;
240 UPROPERTY(EditDefaultsOnly, Config, Category =
GameMode)
243 UPROPERTY(EditDefaultsOnly, Config, BlueprintReadOnly, Category =
GameMode)
244 float ServerRestartTime = 0.f;
246 UPROPERTY(EditDefaultsOnly, globalconfig, Category = Classes)
247 TSubclassOf<class ULocalMessage> GameModeBroadcastMessage;
248 UPROPERTY(EditDefaultsOnly, globalconfig, Category = Classes)
249 TSubclassOf<class ULocalMessage> KillBroadcastMessage;
250 UPROPERTY(EditDefaultsOnly, globalconfig, Category = Classes)
251 TSubclassOf<class ULocalMessage> HeadshotKillBroadcastMessage;
252 UPROPERTY(EditDefaultsOnly, globalconfig, Category = Classes)
253 TSubclassOf<class ULocalMessage> MatchStartRequestMessage;
256 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Classes, meta = (DisplayName = "
Experience Event
Class"))
258 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = Classes, meta = (DisplayName = "
Experience Message
Class"))
259 TSubclassOf<ULocalMessage> ExperienceEventMessageClass = NULL;
262 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
264 int32 MaxTeamSize = 0;
266 UPROPERTY(GlobalConfig)
267 int32 TeamKillsToWarning = 2;
268 UPROPERTY(GlobalConfig)
269 int32 TeamKillsToKick = 5;
270 UPROPERTY(GlobalConfig)
271 int32 TeamKillsToSessionKick = 8;
273 float MatchLengthOverride = -1.0f;
275 float MaxPlayersOverride = -1.0f;
277 int32 MaxPlayerDeployablesOverride = -1;
279 TArray<int32> StartingTicketCountOverride;
282 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode)
283 UCurveFloat* ChargeRateCurve;
285 UPROPERTY(EditDefaultsOnly, Category = Classes)
286 TSubclassOf<class ULocalMessage> TeamGameBroadcastMessage = NULL;
288 FTimerHandle WarmUpTimer;
289 FTimerHandle MatchTimer;
290 FTimerHandle ServerResetTimer;
292 TArray<APlayerStart*> LobbyPlayerStarts;
293 TArray<APlayerStart*> MatchPlayerStarts;
295 virtual TSubclassOf<AGameSession> GetGameSessionClass() const override;
296 virtual
void HandleMatchIsWaitingToStart() override;
297 virtual
void HandleMatchHasStarted() override;
298 virtual
void HandleMatchWarmupEnded();
301 virtual
void CalculateTicketWinCondition();
302 virtual
void CalculateTimeOutWinCondition();
303 virtual int32 GetWinningTeamByTickets();
305 virtual
void AssignPlayerTeam(APlayerController* PlayerController, const FString& Options);
306 virtual
bool AssignPlayerTeamFromTarget(const FString& Target, APlayerController* PlayerController);
307 virtual
void AutoAssignPlayerTeam(APlayerController* PlayerController);
309 virtual
void CollectGamePlayObjects();
311 void OnAntiCheatKickRequired(APlayerController* Player, const FString& KickReason);
312 void OnAntiCheatMessageToClient(APlayerController* Recipient, TArrayView<const uint8> Message);
317 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode, meta = (AllowPrivateAccess = true))
318 bool bUseMapRotation = true;
319 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
GameMode, meta = (AllowPrivateAccess = true))
320 TSubclassOf<AActor> PodiumClass;
322 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category =
GameMode, meta = (AllowPrivateAccess = true))
323 FVector PodiumSpawnLocation = FVector(0, 20000, 0);
324 TMap<uint8, TArray<class APlayerStart*>> TeamStartLocations;
326 TWeakObjectPtr<
ULevelInfo> NextMapOverride = NULL;
327 TArray<
float> FrameRateList;
328 int32 AverageFrameRate = 0;
329 int32 LowestFrameRate = MAX_int32;
330 int32 HighestFrameRate = 0;
331 float ShortestFrame = MAX_FLT;
332 float LongestFrame = 0.0f;
333 bool bIsAntiCheatServerSessionActive = false;
ETeamGameEvent
Definition: ProjectXGameMode.h:51
EEndGameEvent
Definition: ProjectXGameMode.h:59
ETeamJoinResponse
Definition: ProjectXGameMode.h:38
Definition: ProjectXGameMode.h:115
FORCEINLINE TSubclassOf< class ULocalMessage > GetExperienceEventMessageClass() const
Definition: ProjectXGameMode.h:121
FORCEINLINE int32 GetAverageFramerate() const
Definition: ProjectXGameMode.h:123
float GetRedeployRespawnTime() const
Definition: ProjectXGameMode.h:139
FORCEINLINE int32 GetLowestAverageFramerate() const
Definition: ProjectXGameMode.h:125
float GetReviveDuration() const
Definition: ProjectXGameMode.h:140
FORCEINLINE int32 GetLongestFrame() const
Definition: ProjectXGameMode.h:127
TArray< FActorSpawnInfo > GetWorldDropsOverrideArray() const
Definition: ProjectXGameMode.h:202
FORCEINLINE int32 GetHighestAverageFramerate() const
Definition: ProjectXGameMode.h:124
const TMap< uint8, FTeamInfo > & GetTeamConfig() const
Definition: ProjectXGameMode.h:137
FORCEINLINE int32 GetShortestFrame() const
Definition: ProjectXGameMode.h:126
FORCEINLINE TSubclassOf< AHUD > GetHUDClass() const
Definition: ProjectXGameMode.h:119
FORCEINLINE TSubclassOf< AHUD > GetSpectatorHUDClass() const
Definition: ProjectXGameMode.h:120
bool GetPreventsIdleKickWhileDead() const
Definition: ProjectXGameMode.h:141
Definition: ProjectXGameState.h:158
Definition: ProjectXPlayerController.h:83
Definition: ProjectXPlayerState.h:238
Definition: ProjectXVehicle.h:56
Definition: ExperienceConfiguration.h:15
Definition: LevelInfo.h:14
Definition: ProjectXDamageType.h:62
Definition: ProjectXGameMode.cpp:47
const FName WarmUp
Definition: ProjectXGameMode.cpp:48
Definition: ProjectXGameMode.h:79
uint32 SpawnedCount
Definition: ProjectXGameMode.h:110
bool bSpawnIndefinitely
Definition: ProjectXGameMode.h:90
TSubclassOf< class AActor > SpawnableActor
Definition: ProjectXGameMode.h:84
float SpawnWeight
Definition: ProjectXGameMode.h:87
FORCEINLINE const float GetMinSpawn() const
Definition: ProjectXGameMode.h:99
bool operator==(const FActorSpawnInfo &rhs) const
Definition: ProjectXGameMode.h:105
bool operator!=(const FActorSpawnInfo &rhs) const
Definition: ProjectXGameMode.h:101
Definition: ProjectXGameMode.h:69
FEndGameEvent(const int32 InWinningTeam)
Definition: ProjectXGameMode.h:73
Definition: ProjectXGameMode.h:26