From 1eaa5ffca527a09eac4a53da974baaf290735061 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Mon, 9 May 2022 17:16:41 +0200 Subject: [PATCH] 108 - Defeats --- .../HUD/WBP_CharacterOverlay.uasset | Bin 32717 -> 37204 bytes .../Blaster/Character/BlasterAnimInstance.h | 3 +- Source/Blaster/Character/BlasterCharacter.cpp | 9 +++-- Source/Blaster/Character/BlasterCharacter.h | 5 ++- Source/Blaster/Components/CombatComponent.h | 3 ++ Source/Blaster/GameMode/BlasterGameMode.cpp | 4 ++ Source/Blaster/HUD/BlasterHUD.h | 3 +- Source/Blaster/HUD/CharacterOverlay.h | 3 ++ .../BlasterPlayerController.cpp | 19 ++++++++- .../BlasterPlayerController.h | 2 + .../PlayerState/BlasterPlayerState.cpp | 36 ++++++++++++++++++ .../Blaster/PlayerState/BlasterPlayerState.h | 10 +++++ Source/Blaster/Weapon/Projectile.h | 1 + 13 files changed, 89 insertions(+), 9 deletions(-) diff --git a/Content/Blueprints/HUD/WBP_CharacterOverlay.uasset b/Content/Blueprints/HUD/WBP_CharacterOverlay.uasset index 1d7f645c008705aae7fcc83e24beda23a04c3499..514fc0af156177ab665a7bd571e758613e20791f 100644 GIT binary patch literal 37204 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 delta 8967 zcmds6dvH|M8NW9qX%Pzsr8hp8w{nNF)6P*Gb8Vhh!O?1RyWinWY0Qrimj`<;8v&E4$XWT`aM_M16- z&iT&oe6RDqd*yh@#XIW0mj@oqSClYCQ3~qoDk%$9PV9esO#TomZm}s!0_A_dPf<=M zDT+$v4avl(R61NyLaNr)v^+g>`cK+^|I06{u6{lIjpm)vIgjK%S9x>Wr9;=VfQOtD ztWceuaG84i+Dlaf-64YhjqPXEUxl#4p(*X}hEBG$r$il8*&oI_m})KeJ|Q|hDe}*# z(@s$?G6>r&$~z1=*{3_)b&|I?usp9K1p;^=Fi^*RN;noI?&%(J6tYi9;GQ0VigJx` z+k(Vx4-&Ue4q100gyQ`{3jA)6xPt=c?MdSqfvgAGd6m^nHG&YD4XYLLh{w-ds# zJxD1tgp|MeL*N$juTzDQJP2Yr`~1VHt^Gn&W)HK#$k6^d$Huia9e;!$E zg;*kxG*?3^=j(N4fFZhOFlPgYCAi$qfds*3DLs=0H26cLXA%;zQkN1PK*}+HNLMKn zR&gm8-P(Lb$2FUB8ob(+X0$a=!ee4S{Q*?HNj}$XSe`@3qntdrAp<8CVL?M&%98qrDsKft4 zTaV!K?E9jE>9hyoC;D(B&8ZnFeOp?>sTdDEvvHSb;buTwL z3tjjg7hS#tER(eibvt3NgkS_Dq|7UAWNE`(UNpfR1Rv87Wh5wR80p8vVwW$H#UK(dp<)nLY zpoV+IAIyF>HaqmmWJO_g<(yAs#sHLj9ScM z=4M3VIF=;&kI&7p8~Hf`u!5aiFqC=gBL=Jx9CI_LBKLt+P_h3g*XC z2yT?w0=W9al7G`xS8kB5j$9D0j$(@!*}AtftytKshZ8%bbO>!Z_#yhg8lUo#cz@5a z--!WWdwAXLAa9|mYF2`6A`2layfmNur(Je(ItH>qT?`k0~CwZ6Y>@;n! z?;g^*@NSf0;k~%kmTa_SiBKnZmP}D!3Ln%8wq;3-Cq?l1a};GMz(=_MtikO;LeZ@g z{>R1f6Q%bu;{38@gx@36Om*SnV$?MZ_7TZ2%+RXJw-E-5tQE7&3Y%xTXv-5hE=!yi zioA&Jsd9VVqDH3!CkexyjMETyvSO0uVNt7QpI0nb^E)RH+qu-5WwcT5z_@?9JQp&; zvn!__wLj2zL~d=Q8E+2DtaVs02p~M_ZDBWPsxPEcCOc9)A{D(xA3FYjIhv$cRr^RFrM!`OykcYOt-`Yt=50E1{rx&f>B^f-Qf#bY*%01W zlaR!IyKJW8E~0PIqt8}WK?a4IZC(*Eev+_GpHA-(;~S5`o6CL204o)QyMLSdXh&<* zoWi3wH~iv@15tTqJd-hCv#Kjofju+z`76)XwiTRckA3~{SC?&Oylx|ZH*pI*YwO_; zQ8%GHrrv{4x@xR6T$we|saDdKx7V?-_|(Ojrxwp_`K%*QG)yl5cMvLEBe3Dw~9`eYiXc2-#)Im!}D~aFE6#$hx z!@uhD^_xoW_6rOCxqJDQ7Bk*NF5FsQU?~wYGWj+ONlENP{qzA+8Je+Scvxve>}aee z8Up@IrHnsa*Q{DwsXsySeg)xB;tf_dtzl7n?%JP+s59Bs)v4;L_LTMeL(r~-vG}zq z?Julys)`mGtSvSSS$QU-f*91|QpQb>f|5)VYA_Aiwv>=vUd4 zky;y0YBsAWQq85c;~dkJ4R-pbp;`2&Kz6{HgXsxvplY^$b7ETXdilwGSK2U*Cgh?Sb6-Ul^pAF5cX;LCWYcko_sLowMT`jG4)N zc&{nLFdt}$=pM1RIoszC+XgYRa%ITdHhqrKC`05cMP4m(9DSVdowJ~PP4&7;{fo5U zDS*5Cd<{;YGG?~KYwOOjR`BG!lG=+IedR966RrG&OcRw2BIg?ym1Wlt1Ya(7e(+0> zWS$bBM7}!=?$RYj)R$AMi&eGWr~ zTgd)gV=IuMbMdy$R{rT4_a>a|IKXl0VQ6q&>iRg(); - if (PlayerState) + BlasterPlayerState = GetPlayerState(); + if (BlasterPlayerState) { // Initialize Score now we have the PlayerState - PlayerState->IncreaseScore(0.f); + BlasterPlayerState->IncreaseScore(0.f); + BlasterPlayerState->IncreaseDefeats(0); } } } diff --git a/Source/Blaster/Character/BlasterCharacter.h b/Source/Blaster/Character/BlasterCharacter.h index fdf116b..e4a50d1 100644 --- a/Source/Blaster/Character/BlasterCharacter.h +++ b/Source/Blaster/Character/BlasterCharacter.h @@ -57,7 +57,9 @@ protected: void PollInit(); private: - class ABlasterPlayerState* PlayerState; + + UPROPERTY() + class ABlasterPlayerState* BlasterPlayerState; UPROPERTY(VisibleAnywhere, Category="Camera") class USpringArmComponent* CameraBoom; @@ -121,6 +123,7 @@ private: UFUNCTION() void OnRep_Health(); + UPROPERTY() class ABlasterPlayerController* BlasterPlayerController; bool bEliminated = false; diff --git a/Source/Blaster/Components/CombatComponent.h b/Source/Blaster/Components/CombatComponent.h index c2387cc..ac74bf0 100644 --- a/Source/Blaster/Components/CombatComponent.h +++ b/Source/Blaster/Components/CombatComponent.h @@ -47,8 +47,11 @@ protected: void SetHUDCrosshairs(float DeltaTime); private: + UPROPERTY() class ABlasterCharacter* Character; + UPROPERTY() class ABlasterPlayerController* Controller; + UPROPERTY() class ABlasterHUD* HUD; UPROPERTY(ReplicatedUsing=OnRep_EquippedWeapon) diff --git a/Source/Blaster/GameMode/BlasterGameMode.cpp b/Source/Blaster/GameMode/BlasterGameMode.cpp index 0f719e1..4c8b5d8 100644 --- a/Source/Blaster/GameMode/BlasterGameMode.cpp +++ b/Source/Blaster/GameMode/BlasterGameMode.cpp @@ -19,6 +19,10 @@ void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter, { AttackerPlayerState->IncreaseScore(1.f); } + if (VictimPlayerState) + { + VictimPlayerState->IncreaseDefeats(1); + } if (EliminatedCharacter) { diff --git a/Source/Blaster/HUD/BlasterHUD.h b/Source/Blaster/HUD/BlasterHUD.h index 7ef0b77..d211aae 100644 --- a/Source/Blaster/HUD/BlasterHUD.h +++ b/Source/Blaster/HUD/BlasterHUD.h @@ -34,7 +34,8 @@ public: UPROPERTY(EditAnywhere, Category = "Player Stats") TSubclassOf CharacterOverlayClass; - + + UPROPERTY() class UCharacterOverlay* CharacterOverlay; protected: diff --git a/Source/Blaster/HUD/CharacterOverlay.h b/Source/Blaster/HUD/CharacterOverlay.h index 61544a7..b8094b4 100644 --- a/Source/Blaster/HUD/CharacterOverlay.h +++ b/Source/Blaster/HUD/CharacterOverlay.h @@ -25,4 +25,7 @@ public: UPROPERTY(meta = (BindWidget)) UTextBlock* ScoreValue; + UPROPERTY(meta = (BindWidget)) + UTextBlock* DefeatsValue; + }; diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.cpp b/Source/Blaster/PlayerController/BlasterPlayerController.cpp index fe7aeab..d75ce2d 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.cpp +++ b/Source/Blaster/PlayerController/BlasterPlayerController.cpp @@ -55,7 +55,22 @@ void ABlasterPlayerController::SetHUDScore(float Score) if (bHUDValid) { - const FString ScoreValue = FString::Printf(TEXT("%d"), FMath::FloorToInt(Score)); - BlasterHUD->CharacterOverlay->ScoreValue->SetText(FText::FromString(ScoreValue)); + const FString ScoreAmount = FString::Printf(TEXT("%d"), FMath::FloorToInt(Score)); + BlasterHUD->CharacterOverlay->ScoreValue->SetText(FText::FromString(ScoreAmount)); + } +} + +void ABlasterPlayerController::SetHUDDefeats(int32 Defeats) +{ + BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; + bool bHUDValid = + BlasterHUD && + BlasterHUD->CharacterOverlay && + BlasterHUD->CharacterOverlay->DefeatsValue; + + if (bHUDValid) + { + const FString DefeatsAmount = FString::Printf(TEXT("%d"), Defeats); + BlasterHUD->CharacterOverlay->DefeatsValue->SetText(FText::FromString(DefeatsAmount)); } } diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.h b/Source/Blaster/PlayerController/BlasterPlayerController.h index 0ab21fa..1b95b0b 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.h +++ b/Source/Blaster/PlayerController/BlasterPlayerController.h @@ -18,6 +18,7 @@ public: void SetHUDHealth(float Health, float MaxHealth); void SetHUDScore(float Score); + void SetHUDDefeats(int32 Defeats); virtual void OnPossess(APawn* InPawn) override; protected: @@ -26,6 +27,7 @@ protected: private: + UPROPERTY() class ABlasterHUD* BlasterHUD; }; diff --git a/Source/Blaster/PlayerState/BlasterPlayerState.cpp b/Source/Blaster/PlayerState/BlasterPlayerState.cpp index 2622399..b09d7f4 100644 --- a/Source/Blaster/PlayerState/BlasterPlayerState.cpp +++ b/Source/Blaster/PlayerState/BlasterPlayerState.cpp @@ -5,6 +5,7 @@ #include "Blaster/Character/BlasterCharacter.h" #include "Blaster/PlayerController/BlasterPlayerController.h" +#include "Net/UnrealNetwork.h" void ABlasterPlayerState::IncreaseScore(float ScoreAmount) { @@ -21,6 +22,13 @@ void ABlasterPlayerState::IncreaseScore(float ScoreAmount) } } +void ABlasterPlayerState::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const +{ + Super::GetLifetimeReplicatedProps(OutLifetimeProps); + + DOREPLIFETIME(ABlasterPlayerState, Defeats); +} + void ABlasterPlayerState::OnRep_Score() { Super::OnRep_Score(); @@ -36,6 +44,34 @@ void ABlasterPlayerState::OnRep_Score() } } +void ABlasterPlayerState::IncreaseDefeats(int32 DefeatsAmount) +{ + Defeats += DefeatsAmount; + + Character = GetCharacter(); + if (Character) + { + Controller = GetController(); + if (Controller) + { + Controller->SetHUDDefeats(Defeats); + } + } +} + +void ABlasterPlayerState::OnRep_Defeats() +{ + Character = GetCharacter(); + if (Character) + { + Controller = GetController(); + if (Controller) + { + Controller->SetHUDDefeats(Defeats); + } + } +} + ABlasterCharacter* ABlasterPlayerState::GetCharacter() const { return Character == nullptr ? Cast(GetPawn()) : Character; diff --git a/Source/Blaster/PlayerState/BlasterPlayerState.h b/Source/Blaster/PlayerState/BlasterPlayerState.h index ae99c8b..20b3fa6 100644 --- a/Source/Blaster/PlayerState/BlasterPlayerState.h +++ b/Source/Blaster/PlayerState/BlasterPlayerState.h @@ -15,12 +15,22 @@ class BLASTER_API ABlasterPlayerState : public APlayerState GENERATED_BODY() public: + virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; virtual void OnRep_Score() override; + UFUNCTION() + virtual void OnRep_Defeats(); + void IncreaseScore(float ScoreAmount); + void IncreaseDefeats(int32 DefeatsAmount); private: + UPROPERTY() class ABlasterCharacter* Character; + UPROPERTY() class ABlasterPlayerController* Controller; ABlasterCharacter* GetCharacter() const; ABlasterPlayerController* GetController() const; + + UPROPERTY(ReplicatedUsing = OnRep_Defeats) + int32 Defeats; }; diff --git a/Source/Blaster/Weapon/Projectile.h b/Source/Blaster/Weapon/Projectile.h index 4e7c5ed..efafd8c 100644 --- a/Source/Blaster/Weapon/Projectile.h +++ b/Source/Blaster/Weapon/Projectile.h @@ -37,6 +37,7 @@ private: UPROPERTY(EditAnywhere) class UParticleSystem* Tracer; + UPROPERTY() class UParticleSystemComponent* TracerComponent; UPROPERTY(EditAnywhere)