From 927ab3aaa1ad849628b3b4aea1edcdb6d4517e05 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Wed, 18 May 2022 00:41:31 +0200 Subject: [PATCH] 128 - Blaster Game State --- .../Character/BP_BlasterCharacter.uasset | Bin 76897 -> 76874 bytes .../GameModes/BP_BlasterGameMode.uasset | Bin 20338 -> 20559 bytes .../GameState/BP_BlasterGameState.uasset | Bin 0 -> 19141 bytes Source/Blaster/Character/BlasterCharacter.cpp | 10 ++++- Source/Blaster/GameMode/BlasterGameMode.cpp | 6 ++- Source/Blaster/GameState/BlasterGameState.cpp | 34 +++++++++++++++++ Source/Blaster/GameState/BlasterGameState.h | 27 ++++++++++++++ .../BlasterPlayerController.cpp | 35 +++++++++++++++++- 8 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 Content/Blueprints/GameState/BP_BlasterGameState.uasset create mode 100644 Source/Blaster/GameState/BlasterGameState.cpp create mode 100644 Source/Blaster/GameState/BlasterGameState.h diff --git a/Content/Blueprints/Character/BP_BlasterCharacter.uasset b/Content/Blueprints/Character/BP_BlasterCharacter.uasset index 38e419de1b347c221f1bb4d385c8bb36c4dc3fae..05ab4a6b0fc772e9395a11f4b7c23316fe1d5bbf 100644 GIT binary patch delta 9133 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 diff --git a/Content/Blueprints/GameModes/BP_BlasterGameMode.uasset b/Content/Blueprints/GameModes/BP_BlasterGameMode.uasset index 55ad2cb0ea74020a47012244b46f23d508a80854..5ec6340d6223fb743d528900405d7821b1987c76 100644 GIT binary patch delta 3853 zcmbW3YfRf!6u|G@*haA^lmcx*1c?=p0YmqoKucR%V2r{x8XVep4HWw7i-~|MC#s$(_^Fgf@jZ0(($zDrTdptU{8HD&2 z!QrT2sPl2wk=V%fXc_Cd`{QvcdSV`k2eOXD<^;Kp1USuqX96H0T?uk(nHHKEyi-Ck zE(C6k;`kCS6?bc5J2$RF>02CXq&r~58pfOX0!dG&N68q(*PloQ6A-bjw>dxGyD1O4$(Ksx}ykTq{t>7tjiFg7%_&qEBO6`-{1IMh73!q+yt|xLO5V4UQ}j< zqn6c69r#2`$JkGn_Wa&FZP*_-kq0WCkPt4GJjFuL{z~D_%4?P6T-`qrBPq|jA=Q;F zU2w9h2!E%mirQ(jX@%B0lk4i76mt7^mb@Rts~l$d{{=Z#P#g3(D$f8bq08I-O#b$?^B4ll(`i4ZTl__iOJUU`(=q#5iCFIns z3Wu+PD}zy!1@_gXd6Y52=YZb?%qWO#5FqA2?L@;rcK1lM~-5 zAA(z4CGlOrh$~GxVbqlo-Vc5bX*KN!`>I&E{erozWMvhUdo5_jST}6IKi^tug&A+J zwVGQ|^Mg`1Ij?nB%Q~p_SPeF&F(8w933>42?b8WnPm#P6i2@4MM4qVkkSjTQ(5}RS zW@mK2Yo&oDDiTR{QHIs~78IXVrl5Z-xE7Gzm&>4R7N`DlY~ z)35z4(X;IMe_5(WQthSqD>TtSxqR7B9T8NU67S@|lvu{{s4J BLK6T0 delta 3659 zcma);T~L%&7=X{g6@ehIU0|2Uff3h*lF;%8*!|euVEGZ)kgOy{Br~K!$8 zzx&;BIeknXxmegyEyO}0MEkCR$57bB5Pqj6MB0~ov8IiwRh29&@G*E2=>X&JEl-Q5Y{b4KeJfK^`@~)(rp_n zOZVHx-pTq&jvdWDCx^S4+s^VAqzAa}i`o!k8`pQRoI>t#3*2wW^(W_sg);anf=?s| zqueBNPbT1cxbG>Jl!!{ooJcG;EW{-QpXNcyL4$k7BKNEXZUX)8MgMw9<(R;I7Pz00 zd(`62elZr*TZy<<3*1Gt_d-IB=l?lY zlGv0GG&;@PBNn;MsW`R%#B50gvW|p0vWceJ9N<<9_H_R}7C=JO9WbBc-URlp;SzAS zF8Yi{uDAs&4GWA`M>Uj$Dqx4b*gcK>4bzyN1|c$0p5gjiUO4E`aky;HE7--|c-M(3 zu5a)`B)AHe~A*&#}h`OGq4;HevoW^1KqDi0Euk0B# z6VTCFsy9WP*_#10lz! z3k}C~W)-H+wBo~x_OiHhR(DF=NXqd6I2SII8XTrv6m%!oL+g(j;Oc8n9 zeh3eQM>a#mTU@FFSTcvje-wH#togmUR;*PjYa4iU+|{=JuS%<`**jK@wYDZ8rItc5u77ycO6)m_D zxQAr#@j#FuEO80aPQ1_1#Vcux-knT2gGx2)8hoo2Pds(TD5nY*jX<+GtN&kUNy4I<*!|p(ztHx-E_@u7}Jkke6!CF}dpEZ@vEero>~W=x-)${^_})+ECjF(EwH)3`2-go<4jsc;JUn{n z)JNmz>tD|qsSa%$D)hmghL}|3b$B(n9a=)3#HqlojXN{z*}t1pq-*m`V_Wo0#w^cP zYw5Ac=<;mj4z&%EFG-|{mgIC(ZQ_Vg_eOJ-Tn}ekG+7Bb>mvXyHKz8YTni^!%Vj5& zw!Wt7V?Vaqq-sEB`%BUfBkdtgg+tMq>vj$|ZV%G!;ZRD*3m41#VMTbg>p|{|-(t8< zuGz+Z+c&{C1D}t+|K$Z=*TKhOXO7u%BOj{Cut!tQ_2-X{u}e8-8GWQkX}0q9 I%N57|16}bFX8-^I diff --git a/Content/Blueprints/GameState/BP_BlasterGameState.uasset b/Content/Blueprints/GameState/BP_BlasterGameState.uasset new file mode 100644 index 0000000000000000000000000000000000000000..c014c0706dd759ae16cfb5c9c42ac25c57842302 GIT binary patch literal 19141 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 GetCharacterMovement()->StopMovementImmediately(); bDisableGameplay = true; + if (Combat) + { + Combat->FireButtonPressed(false); + } // Disable collision GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision); GetMesh()->SetCollisionEnabled(ECollisionEnabled::NoCollision); @@ -152,7 +156,11 @@ void ABlasterCharacter::Destroyed() { EliminationBotComponent->DestroyComponent(); } - if (Combat && Combat->EquippedWeapon) + + ABlasterGameMode* BlasterGameMode = Cast(UGameplayStatics::GetGameMode(this)); + bool bMatchNotInProgress = BlasterGameMode && BlasterGameMode->GetMatchState() != MatchState::InProgress; + + if (Combat && Combat->EquippedWeapon && bMatchNotInProgress) { Combat->EquippedWeapon->Destroy(); } diff --git a/Source/Blaster/GameMode/BlasterGameMode.cpp b/Source/Blaster/GameMode/BlasterGameMode.cpp index 8660896..6596d07 100644 --- a/Source/Blaster/GameMode/BlasterGameMode.cpp +++ b/Source/Blaster/GameMode/BlasterGameMode.cpp @@ -4,6 +4,7 @@ #include "BlasterGameMode.h" #include "Blaster/Character/BlasterCharacter.h" +#include "Blaster/GameState/BlasterGameState.h" #include "Blaster/PlayerController/BlasterPlayerController.h" #include "Blaster/PlayerState/BlasterPlayerState.h" #include "GameFramework/PlayerStart.h" @@ -78,9 +79,12 @@ void ABlasterGameMode::PlayerEliminated(class ABlasterCharacter* EliminatedChara ABlasterPlayerState* AttackerPlayerState = AttackerController ? Cast(AttackerController->PlayerState) : nullptr; ABlasterPlayerState* VictimPlayerState = VictimController ? Cast(VictimController->PlayerState) : nullptr; - if (AttackerPlayerState && AttackerPlayerState != VictimPlayerState) + ABlasterGameState* BlasterGameState = GetGameState(); + + if (AttackerPlayerState && AttackerPlayerState != VictimPlayerState && BlasterGameState) { AttackerPlayerState->IncreaseScore(1.f); + BlasterGameState->UpdateTopScore(AttackerPlayerState); } if (VictimPlayerState) { diff --git a/Source/Blaster/GameState/BlasterGameState.cpp b/Source/Blaster/GameState/BlasterGameState.cpp new file mode 100644 index 0000000..7077045 --- /dev/null +++ b/Source/Blaster/GameState/BlasterGameState.cpp @@ -0,0 +1,34 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "BlasterGameState.h" + +#include "Blaster/PlayerState/BlasterPlayerState.h" +#include "Net/UnrealNetwork.h" + +void ABlasterGameState::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const +{ + Super::GetLifetimeReplicatedProps(OutLifetimeProps); + + DOREPLIFETIME(ABlasterGameState, TopScoringPlayers); +} + +void ABlasterGameState::UpdateTopScore(ABlasterPlayerState* ScoringPlayer) +{ + if (TopScoringPlayers.Num() == 0) + { + TopScoringPlayers.Add(ScoringPlayer); + TopScore = ScoringPlayer->GetScore(); + } + else if (ScoringPlayer->GetScore() == TopScore) + { + TopScoringPlayers.AddUnique(ScoringPlayer); + } + else if (ScoringPlayer->GetScore() < TopScore) + { + TopScoringPlayers.Empty(); + TopScoringPlayers.AddUnique(ScoringPlayer); + TopScore = ScoringPlayer->GetScore(); + } + +} diff --git a/Source/Blaster/GameState/BlasterGameState.h b/Source/Blaster/GameState/BlasterGameState.h new file mode 100644 index 0000000..87cbf98 --- /dev/null +++ b/Source/Blaster/GameState/BlasterGameState.h @@ -0,0 +1,27 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameState.h" +#include "BlasterGameState.generated.h" + +/** + * + */ +UCLASS() +class BLASTER_API ABlasterGameState : public AGameState +{ + GENERATED_BODY() + +public: + virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; + void UpdateTopScore(class ABlasterPlayerState* ScoringPlayer); + + UPROPERTY(Replicated) + TArray TopScoringPlayers; + +private: + + float TopScore = 0.f; +}; diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.cpp b/Source/Blaster/PlayerController/BlasterPlayerController.cpp index 8e494ed..c5d05b5 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.cpp +++ b/Source/Blaster/PlayerController/BlasterPlayerController.cpp @@ -6,10 +6,12 @@ #include "Blaster/Character/BlasterCharacter.h" #include "Blaster/Components/CombatComponent.h" #include "Blaster/GameMode/BlasterGameMode.h" +#include "Blaster/GameState/BlasterGameState.h" #include "Blaster/HUD/Announcement.h" #include "Blaster/HUD/BlasterHUD.h" #include "Blaster/HUD/CharacterOverlay.h" #include "Blaster/HUD/DebugWidget.h" +#include "Blaster/PlayerState/BlasterPlayerState.h" #include "Components/ProgressBar.h" #include "Components/TextBlock.h" #include "GameFramework/GameMode.h" @@ -304,6 +306,7 @@ void ABlasterPlayerController::SetHUDTime() void ABlasterPlayerController::PollInit() { + /* if (BlasterHUD && BlasterHUD->DebugWidget == nullptr) { BlasterHUD->AddDebugWidget(); @@ -312,6 +315,7 @@ void ABlasterPlayerController::PollInit() DebugWidget = BlasterHUD->DebugWidget; } } + */ if (CharacterOverlay == nullptr) { @@ -414,7 +418,36 @@ void ABlasterPlayerController::HandleCooldown() BlasterHUD->Announcement->SetVisibility(ESlateVisibility::Visible); FString AnnouncementText("New match starts in:"); BlasterHUD->Announcement->AnnouncementText->SetText(FText::FromString(AnnouncementText)); - BlasterHUD->Announcement->AnnouncementMessage->SetText(FText()); + + ABlasterGameState* BlasterGameState = Cast(UGameplayStatics::GetGameState(this)); + ABlasterPlayerState* BlasterPlayerState = GetPlayerState(); + if (BlasterGameState && BlasterPlayerState) + { + TArray TopPlayers = BlasterGameState->TopScoringPlayers; + FString InfoTextString; + if (TopPlayers.Num() == 0) + { + InfoTextString = FString("There is no winner."); + } + else if (TopPlayers.Num() == 1 && TopPlayers[0] == BlasterPlayerState) + { + InfoTextString = FString("You are the winner!"); + } + else if (TopPlayers.Num() == 1) + { + InfoTextString = FString::Printf(TEXT("%s won!"), *TopPlayers[0]->GetPlayerName()); + } + else if (TopPlayers.Num() > 1) + { + InfoTextString = FString("Players tied for the win: \n"); + for (auto TiedPlayers : TopPlayers) + { + InfoTextString.Append(FString::Printf(TEXT("%s\n"), *TiedPlayers->GetPlayerName())); + } + } + + BlasterHUD->Announcement->AnnouncementMessage->SetText(FText::FromString(InfoTextString)); + } } } ABlasterCharacter* BlasterCharacter = Cast(GetPawn());