From 37ee057440cf577b25286706848f324c33a33a33 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Mon, 30 May 2022 16:54:13 +0200 Subject: [PATCH] 215 - Teams Game Mode --- .../GameModes/BP_TeamsGameMode.uasset | Bin 0 -> 20355 bytes Source/Blaster/GameMode/TeamsGameMode.cpp | 67 ++++++++++++++++++ Source/Blaster/GameMode/TeamsGameMode.h | 30 ++++++++ 3 files changed, 97 insertions(+) create mode 100644 Content/Blueprints/GameModes/BP_TeamsGameMode.uasset create mode 100644 Source/Blaster/GameMode/TeamsGameMode.cpp create mode 100644 Source/Blaster/GameMode/TeamsGameMode.h diff --git a/Content/Blueprints/GameModes/BP_TeamsGameMode.uasset b/Content/Blueprints/GameModes/BP_TeamsGameMode.uasset new file mode 100644 index 0000000000000000000000000000000000000000..753c46e53a1f803fe3202cd81726de24b3d313eb GIT binary patch literal 20355 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 literal 0 HcmV?d00001 diff --git a/Source/Blaster/GameMode/TeamsGameMode.cpp b/Source/Blaster/GameMode/TeamsGameMode.cpp new file mode 100644 index 0000000..95151bf --- /dev/null +++ b/Source/Blaster/GameMode/TeamsGameMode.cpp @@ -0,0 +1,67 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "TeamsGameMode.h" + +#include "Blaster/GameState/BlasterGameState.h" +#include "Kismet/GameplayStatics.h" + +void ATeamsGameMode::PostLogin(APlayerController* NewPlayer) +{ + Super::PostLogin(NewPlayer); + + AssignToTeam(NewPlayer->PlayerState.Get()); +} + +void ATeamsGameMode::Logout(AController* Exiting) +{ + Super::Logout(Exiting); + + BGameState = (BGameState == nullptr) ? Cast(UGameplayStatics::GetGameState(this)) : BGameState; + ABlasterPlayerState* BPState = Exiting->GetPlayerState(); + if (BGameState && BPState) + { + if (BGameState->RedTeam.Contains(BPState)) + { + BGameState->RedTeam.Remove(BPState); + } + if (BGameState->BlueTeam.Contains(BPState)) + { + BGameState->BlueTeam.Remove(BPState); + } + } +} + +void ATeamsGameMode::HandleMatchHasStarted() +{ + Super::HandleMatchHasStarted(); + + BGameState = (BGameState == nullptr) ? Cast(UGameplayStatics::GetGameState(this)) : BGameState; + if (BGameState == nullptr) return; + + for (auto PState : BGameState->PlayerArray) + { + AssignToTeam(PState); + } +} + +void ATeamsGameMode::AssignToTeam(APlayerState* PlayerState) +{ + BGameState = (BGameState == nullptr) ? Cast(UGameplayStatics::GetGameState(this)) : BGameState; + if (PlayerState == nullptr) return; + + ABlasterPlayerState* BPlayerState = Cast(PlayerState); + if (BPlayerState && BPlayerState->GetTeam() == ETeam::ET_NoTeam) + { + if (BGameState->BlueTeam.Num() >= BGameState->RedTeam.Num()) + { + BGameState->RedTeam.AddUnique(BPlayerState); + BPlayerState->SetTeam(ETeam::ET_RedTeam); + } + else + { + BGameState->BlueTeam.AddUnique(BPlayerState); + BPlayerState->SetTeam(ETeam::ET_BlueTeam); + } + } +} diff --git a/Source/Blaster/GameMode/TeamsGameMode.h b/Source/Blaster/GameMode/TeamsGameMode.h new file mode 100644 index 0000000..633ffb1 --- /dev/null +++ b/Source/Blaster/GameMode/TeamsGameMode.h @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "BlasterGameMode.h" +#include "TeamsGameMode.generated.h" + +/** + * + */ +UCLASS() +class BLASTER_API ATeamsGameMode : public ABlasterGameMode +{ + GENERATED_BODY() + +public: + virtual void PostLogin(APlayerController* NewPlayer) override; + virtual void Logout(AController* Exiting) override; + +protected: + virtual void HandleMatchHasStarted() override; + +private: + UPROPERTY() + class ABlasterGameState* BGameState; + + void AssignToTeam(APlayerState* PlayerState); + +};