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);
if (BlasterPlayer)
{
BlasterPlayer->OnMatchStateSet(MatchState);
BlasterPlayer->OnMatchStateSet(MatchState, bTeamsMatch);
}
}
}

View File

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

View File

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

View File

@ -15,6 +15,7 @@ class BLASTER_API ATeamsGameMode : public ABlasterGameMode
GENERATED_BODY()
public:
ATeamsGameMode();
virtual void PostLogin(APlayerController* NewPlayer) override;
virtual void Logout(AController* Exiting) 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()
{

View File

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

View File

@ -4,6 +4,7 @@
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Components/Border.h"
#include "Components/Image.h"
#include "CharacterOverlay.generated.h"
@ -32,6 +33,18 @@ public:
UPROPERTY(meta = (BindWidget))
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))
UTextBlock* DefeatsValue;

View File

@ -71,6 +71,72 @@ void ABlasterPlayerController::GetLifetimeReplicatedProps(TArray<FLifetimeProper
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
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)
@ -156,6 +222,18 @@ void ABlasterPlayerController::ShowReturnToMainMenu()
}
}
void ABlasterPlayerController::OnRep_ShowTeamScores()
{
if (bShowTeamScores)
{
InitTeamScores();
}
else
{
HideTeamScores();
}
}
// Is the ping to high?
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;
if (MatchState == MatchState::InProgress)
{
HandleMatchHasStarted();
HandleMatchHasStarted(bTeamsMatch);
}
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;
if (BlasterHUD)
{
@ -588,6 +668,16 @@ void ABlasterPlayerController::HandleMatchHasStarted()
if (BlasterHUD->Announcement)
{
BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Hidden);
if (!HasAuthority()) return;
if (bTeamsMatch)
{
InitTeamScores();
}
else
{
HideTeamScores();
}
}
}
}

View File

@ -23,6 +23,10 @@ public:
virtual void OnPossess(APawn* InPawn) override;
virtual void ReceivedPlayer() override; // Sync with server clock as soon as possible
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 SetDebugMsg2(FString Key, FString Value);
@ -45,7 +49,7 @@ public:
// Synced with server world clock
virtual float GetServerTime();
void OnMatchStateSet(FName State);
void OnMatchStateSet(FName State, bool bTeamsMatch = false);
void HandleCooldown();
float SingleTripTime = 0.f;
@ -58,7 +62,7 @@ protected:
virtual void SetupInputComponent() override;
virtual void BeginPlay() override;
void CheckTimeSync(float DeltaTime);
void HandleMatchHasStarted();
void HandleMatchHasStarted(bool bTeamsMatch = false);
void SetHUDTime();
void PollInit();
@ -94,6 +98,12 @@ protected:
UFUNCTION(Client, Reliable)
void ClientElimAnnouncement(APlayerState* Attacker, APlayerState* Victim);
UPROPERTY(ReplicatedUsing = OnRep_ShowTeamScores)
bool bShowTeamScores = false;
UFUNCTION()
void OnRep_ShowTeamScores();
private:
UPROPERTY()
class UDebugWidget* DebugWidget;