219 - Updating Team Scores

This commit is contained in:
Kingsmedia 2022-05-30 21:18:34 +02:00
parent 5d3c2aacf7
commit efbb1d9269
10 changed files with 142 additions and 7 deletions

View File

@ -67,7 +67,7 @@ void ABlasterGameMode::OnMatchStateSet()
ABlasterPlayerController* BlasterPlayer = Cast<ABlasterPlayerController>(*It); ABlasterPlayerController* BlasterPlayer = Cast<ABlasterPlayerController>(*It);
if (BlasterPlayer) if (BlasterPlayer)
{ {
BlasterPlayer->OnMatchStateSet(MatchState); BlasterPlayer->OnMatchStateSet(MatchState, bTeamsMatch);
} }
} }
} }

View File

@ -41,6 +41,8 @@ public:
float LevelStartingTime = 0.f; float LevelStartingTime = 0.f;
bool bTeamsMatch = false;
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
virtual void OnMatchStateSet() override; virtual void OnMatchStateSet() override;

View File

@ -6,6 +6,11 @@
#include "Blaster/GameState/BlasterGameState.h" #include "Blaster/GameState/BlasterGameState.h"
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
ATeamsGameMode::ATeamsGameMode()
{
bTeamsMatch = true;
}
void ATeamsGameMode::PostLogin(APlayerController* NewPlayer) void ATeamsGameMode::PostLogin(APlayerController* NewPlayer)
{ {
Super::PostLogin(NewPlayer); Super::PostLogin(NewPlayer);

View File

@ -15,6 +15,7 @@ class BLASTER_API ATeamsGameMode : public ABlasterGameMode
GENERATED_BODY() GENERATED_BODY()
public: public:
ATeamsGameMode();
virtual void PostLogin(APlayerController* NewPlayer) override; virtual void PostLogin(APlayerController* NewPlayer) override;
virtual void Logout(AController* Exiting) override; virtual void Logout(AController* Exiting) override;
virtual float CalculateDamage(AController* Attacker, AController* Victim, float BaseDamage) override; virtual float CalculateDamage(AController* Attacker, AController* Victim, float BaseDamage) override;

View File

@ -34,6 +34,16 @@ void ABlasterGameState::UpdateTopScore(ABlasterPlayerState* ScoringPlayer)
} }
} }
void ABlasterGameState::RedTeamScores()
{
++RedTeamScore;
}
void ABlasterGameState::BlueTeamScores()
{
++BlueTeamScore;
}
void ABlasterGameState::OnRep_RedTeamScore() void ABlasterGameState::OnRep_RedTeamScore()
{ {

View File

@ -22,6 +22,10 @@ public:
TArray<ABlasterPlayerState*> TopScoringPlayers; TArray<ABlasterPlayerState*> TopScoringPlayers;
// Teams // Teams
void RedTeamScores();
void BlueTeamScores();
TArray<ABlasterPlayerState*> RedTeam; TArray<ABlasterPlayerState*> RedTeam;
TArray<ABlasterPlayerState*> BlueTeam; TArray<ABlasterPlayerState*> BlueTeam;

View File

@ -4,6 +4,7 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Blueprint/UserWidget.h" #include "Blueprint/UserWidget.h"
#include "Components/Border.h"
#include "Components/Image.h" #include "Components/Image.h"
#include "CharacterOverlay.generated.h" #include "CharacterOverlay.generated.h"
@ -31,7 +32,19 @@ public:
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
UTextBlock* ScoreValue; UTextBlock* ScoreValue;
UPROPERTY(meta = (BindWidget))
UBorder* RedTeamScoreBorder;
UPROPERTY(meta = (BindWidget))
UTextBlock* RedTeamScore;
UPROPERTY(meta = (BindWidget))
UBorder* BlueTeamScoreBorder;
UPROPERTY(meta = (BindWidget))
UTextBlock* BlueTeamScore;
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
UTextBlock* DefeatsValue; UTextBlock* DefeatsValue;

View File

@ -71,6 +71,72 @@ void ABlasterPlayerController::GetLifetimeReplicatedProps(TArray<FLifetimeProper
Super::GetLifetimeReplicatedProps(OutLifetimeProps); Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ABlasterPlayerController, MatchState); DOREPLIFETIME(ABlasterPlayerController, MatchState);
DOREPLIFETIME(ABlasterPlayerController, bShowTeamScores);
}
void ABlasterPlayerController::HideTeamScores()
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->RedTeamScore &&
BlasterHUD->CharacterOverlay->RedTeamScoreBorder &&
BlasterHUD->CharacterOverlay->BlueTeamScore &&
BlasterHUD->CharacterOverlay->BlueTeamScoreBorder;
if (bHUDValid)
{
BlasterHUD->CharacterOverlay->RedTeamScore->SetText(FText());
BlasterHUD->CharacterOverlay->RedTeamScoreBorder->SetVisibility(ESlateVisibility::Hidden);
BlasterHUD->CharacterOverlay->BlueTeamScore->SetText(FText());
BlasterHUD->CharacterOverlay->BlueTeamScoreBorder->SetVisibility(ESlateVisibility::Hidden);
}
}
void ABlasterPlayerController::InitTeamScores()
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->RedTeamScore &&
BlasterHUD->CharacterOverlay->RedTeamScoreBorder &&
BlasterHUD->CharacterOverlay->BlueTeamScore &&
BlasterHUD->CharacterOverlay->BlueTeamScoreBorder;
if (bHUDValid)
{
FString Zero("0");
BlasterHUD->CharacterOverlay->RedTeamScore->SetText(FText::FromString(Zero));
BlasterHUD->CharacterOverlay->RedTeamScoreBorder->SetVisibility(ESlateVisibility::Visible);
BlasterHUD->CharacterOverlay->BlueTeamScore->SetText(FText::FromString(Zero));
BlasterHUD->CharacterOverlay->BlueTeamScoreBorder->SetVisibility(ESlateVisibility::Visible);
}
}
void ABlasterPlayerController::SetHUDRedTeamScore(int32 RedScore)
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->RedTeamScore &&
BlasterHUD->CharacterOverlay->RedTeamScoreBorder;
if (bHUDValid)
{
const FString ScoreText = FString::Printf(TEXT("%d"), RedScore);
BlasterHUD->CharacterOverlay->RedTeamScore->SetText(FText::FromString(ScoreText));
}
}
void ABlasterPlayerController::SetHUDBlueTeamScore(int32 BlueScore)
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->BlueTeamScore &&
BlasterHUD->CharacterOverlay->BlueTeamScoreBorder;
if (bHUDValid)
{
const FString ScoreText = FString::Printf(TEXT("%d"), BlueScore);
BlasterHUD->CharacterOverlay->BlueTeamScore->SetText(FText::FromString(ScoreText));
}
} }
void ABlasterPlayerController::SetDebugMsg1(FString Key, FString Value) void ABlasterPlayerController::SetDebugMsg1(FString Key, FString Value)
@ -156,6 +222,18 @@ void ABlasterPlayerController::ShowReturnToMainMenu()
} }
} }
void ABlasterPlayerController::OnRep_ShowTeamScores()
{
if (bShowTeamScores)
{
InitTeamScores();
}
else
{
HideTeamScores();
}
}
// Is the ping to high? // Is the ping to high?
void ABlasterPlayerController::ServerReportPingStatus_Implementation(bool bHighPing) void ABlasterPlayerController::ServerReportPingStatus_Implementation(bool bHighPing)
{ {
@ -553,13 +631,13 @@ void ABlasterPlayerController::ReceivedPlayer()
} }
} }
void ABlasterPlayerController::OnMatchStateSet(FName State) void ABlasterPlayerController::OnMatchStateSet(FName State, bool bTeamsMatch)
{ {
MatchState = State; MatchState = State;
if (MatchState == MatchState::InProgress) if (MatchState == MatchState::InProgress)
{ {
HandleMatchHasStarted(); HandleMatchHasStarted(bTeamsMatch);
} }
else if (MatchState == MatchState::Cooldown) else if (MatchState == MatchState::Cooldown)
{ {
@ -579,8 +657,10 @@ void ABlasterPlayerController::OnRep_MatchState()
} }
} }
void ABlasterPlayerController::HandleMatchHasStarted() void ABlasterPlayerController::HandleMatchHasStarted(bool bTeamsMatch)
{ {
if (HasAuthority()) bShowTeamScores = bTeamsMatch;
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD; BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
if (BlasterHUD) if (BlasterHUD)
{ {
@ -588,6 +668,16 @@ void ABlasterPlayerController::HandleMatchHasStarted()
if (BlasterHUD->Announcement) if (BlasterHUD->Announcement)
{ {
BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Hidden); BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Hidden);
if (!HasAuthority()) return;
if (bTeamsMatch)
{
InitTeamScores();
}
else
{
HideTeamScores();
}
} }
} }
} }

View File

@ -23,7 +23,11 @@ public:
virtual void OnPossess(APawn* InPawn) override; virtual void OnPossess(APawn* InPawn) override;
virtual void ReceivedPlayer() override; // Sync with server clock as soon as possible virtual void ReceivedPlayer() override; // Sync with server clock as soon as possible
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override; virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
void HideTeamScores();
void InitTeamScores();
void SetHUDRedTeamScore(int32 RedScore);
void SetHUDBlueTeamScore(int32 BlueScore);
void SetDebugMsg1(FString Key, FString Value); void SetDebugMsg1(FString Key, FString Value);
void SetDebugMsg2(FString Key, FString Value); void SetDebugMsg2(FString Key, FString Value);
void SetDebugMsg3(FString Key, FString Value); void SetDebugMsg3(FString Key, FString Value);
@ -45,7 +49,7 @@ public:
// Synced with server world clock // Synced with server world clock
virtual float GetServerTime(); virtual float GetServerTime();
void OnMatchStateSet(FName State); void OnMatchStateSet(FName State, bool bTeamsMatch = false);
void HandleCooldown(); void HandleCooldown();
float SingleTripTime = 0.f; float SingleTripTime = 0.f;
@ -58,7 +62,7 @@ protected:
virtual void SetupInputComponent() override; virtual void SetupInputComponent() override;
virtual void BeginPlay() override; virtual void BeginPlay() override;
void CheckTimeSync(float DeltaTime); void CheckTimeSync(float DeltaTime);
void HandleMatchHasStarted(); void HandleMatchHasStarted(bool bTeamsMatch = false);
void SetHUDTime(); void SetHUDTime();
void PollInit(); void PollInit();
@ -93,6 +97,12 @@ protected:
UFUNCTION(Client, Reliable) UFUNCTION(Client, Reliable)
void ClientElimAnnouncement(APlayerState* Attacker, APlayerState* Victim); void ClientElimAnnouncement(APlayerState* Attacker, APlayerState* Victim);
UPROPERTY(ReplicatedUsing = OnRep_ShowTeamScores)
bool bShowTeamScores = false;
UFUNCTION()
void OnRep_ShowTeamScores();
private: private:
UPROPERTY() UPROPERTY()