108 - Defeats

This commit is contained in:
Kingsmedia 2022-05-09 17:16:41 +02:00
parent 4261cd8f0d
commit 1eaa5ffca5
13 changed files with 89 additions and 9 deletions

View File

@ -36,7 +36,8 @@ private:
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
bool bWeaponEquipped;
UPROPERTY()
class AWeapon* EquippedWeapon;
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))

View File

@ -244,13 +244,14 @@ void ABlasterCharacter::Tick(float DeltaTime)
void ABlasterCharacter::PollInit()
{
if (PlayerState == nullptr)
if (BlasterPlayerState == nullptr)
{
PlayerState = GetPlayerState<ABlasterPlayerState>();
if (PlayerState)
BlasterPlayerState = GetPlayerState<ABlasterPlayerState>();
if (BlasterPlayerState)
{
// Initialize Score now we have the PlayerState
PlayerState->IncreaseScore(0.f);
BlasterPlayerState->IncreaseScore(0.f);
BlasterPlayerState->IncreaseDefeats(0);
}
}
}

View File

@ -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;

View File

@ -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)

View File

@ -19,6 +19,10 @@ void ABlasterGameMode::PlayerEliminated(ABlasterCharacter* EliminatedCharacter,
{
AttackerPlayerState->IncreaseScore(1.f);
}
if (VictimPlayerState)
{
VictimPlayerState->IncreaseDefeats(1);
}
if (EliminatedCharacter)
{

View File

@ -34,7 +34,8 @@ public:
UPROPERTY(EditAnywhere, Category = "Player Stats")
TSubclassOf<class UUserWidget> CharacterOverlayClass;
UPROPERTY()
class UCharacterOverlay* CharacterOverlay;
protected:

View File

@ -25,4 +25,7 @@ public:
UPROPERTY(meta = (BindWidget))
UTextBlock* ScoreValue;
UPROPERTY(meta = (BindWidget))
UTextBlock* DefeatsValue;
};

View File

@ -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<ABlasterHUD>(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));
}
}

View File

@ -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;
};

View File

@ -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<FLifetimeProperty>& 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<ABlasterCharacter>(GetPawn()) : Character;

View File

@ -15,12 +15,22 @@ class BLASTER_API ABlasterPlayerState : public APlayerState
GENERATED_BODY()
public:
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& 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;
};

View File

@ -37,6 +37,7 @@ private:
UPROPERTY(EditAnywhere)
class UParticleSystem* Tracer;
UPROPERTY()
class UParticleSystemComponent* TracerComponent;
UPROPERTY(EditAnywhere)