160 - Shield Bar

This commit is contained in:
Kingsmedia 2022-05-23 11:27:12 +02:00
parent 81ae27f9fb
commit 6a5eecca49
6 changed files with 63 additions and 0 deletions

View File

@ -71,6 +71,7 @@ void ABlasterCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Ou
DOREPLIFETIME_CONDITION(ABlasterCharacter, OverlappingWeapon, COND_OwnerOnly); DOREPLIFETIME_CONDITION(ABlasterCharacter, OverlappingWeapon, COND_OwnerOnly);
DOREPLIFETIME(ABlasterCharacter, Health); DOREPLIFETIME(ABlasterCharacter, Health);
DOREPLIFETIME(ABlasterCharacter, Shield);
DOREPLIFETIME(ABlasterCharacter, bDisableGameplay); DOREPLIFETIME(ABlasterCharacter, bDisableGameplay);
} }
@ -639,6 +640,15 @@ void ABlasterCharacter::OnRep_Health(float LastHealth)
} }
} }
void ABlasterCharacter::OnRep_Shield(float LastShield)
{
UpdateHUDShield();
if (Shield < LastShield)
{
PlayHitReactMontage();
}
}
void ABlasterCharacter::UpdateHUDHealth() void ABlasterCharacter::UpdateHUDHealth()
{ {
BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController; BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
@ -648,6 +658,15 @@ void ABlasterCharacter::UpdateHUDHealth()
} }
} }
void ABlasterCharacter::UpdateHUDShield()
{
BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
if (BlasterPlayerController)
{
BlasterPlayerController->SetHUDShield(Shield, MaxShield);
}
}
void ABlasterCharacter::PollInit() void ABlasterCharacter::PollInit()
{ {
if (BlasterPlayerState == nullptr) if (BlasterPlayerState == nullptr)

View File

@ -42,6 +42,7 @@ public:
void ShowSniperScopeWidget(bool bShowScope); void ShowSniperScopeWidget(bool bShowScope);
void UpdateHUDHealth(); void UpdateHUDHealth();
void UpdateHUDShield();
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
@ -148,6 +149,17 @@ private:
UFUNCTION() UFUNCTION()
void OnRep_Health(float LastHealth); void OnRep_Health(float LastHealth);
// Shield
UPROPERTY(EditAnywhere, Category= "Player Stats")
float MaxShield = 100.f;
UPROPERTY(ReplicatedUsing = OnRep_Shield, VisibleAnywhere, Category= "Player Stats")
float Shield = 50.f;
UFUNCTION()
void OnRep_Shield(float LastShield);
UPROPERTY() UPROPERTY()
class ABlasterPlayerController* BlasterPlayerController; class ABlasterPlayerController* BlasterPlayerController;

View File

@ -22,6 +22,12 @@ public:
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
class UTextBlock* HealthText; class UTextBlock* HealthText;
UPROPERTY(meta = (BindWidget))
UProgressBar* ShieldBar;
UPROPERTY(meta = (BindWidget))
UTextBlock* ShieldText;
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
UTextBlock* ScoreValue; UTextBlock* ScoreValue;

View File

@ -164,6 +164,28 @@ void ABlasterPlayerController::SetHUDHealth(float Health, float MaxHealth)
} }
} }
void ABlasterPlayerController::SetHUDShield(float Shield, float MaxShield)
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->ShieldBar &&
BlasterHUD->CharacterOverlay->ShieldText;
if (bHUDValid)
{
const float ShieldPercent = Shield / MaxShield;
BlasterHUD->CharacterOverlay->ShieldBar->SetPercent(ShieldPercent);
FString ShieldText = FString::Printf(TEXT("%d/%d"), FMath::CeilToInt(Shield), FMath::CeilToInt(MaxShield));
BlasterHUD->CharacterOverlay->ShieldText->SetText(FText::FromString(ShieldText));
}
else
{
bInitializeCharacterOverlay = true;
HUDShield = Shield;
HUDMaxShield = MaxShield;
}
}
void ABlasterPlayerController::SetHUDScore(float Score) void ABlasterPlayerController::SetHUDScore(float Score)
{ {
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD; BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
@ -341,6 +363,7 @@ void ABlasterPlayerController::PollInit()
if (CharacterOverlay) if (CharacterOverlay)
{ {
SetHUDHealth(HUDHealth, HUDMaxHealth); SetHUDHealth(HUDHealth, HUDMaxHealth);
SetHUDShield(HUDShield, HUDMaxShield);
SetHUDScore(HUDScore); SetHUDScore(HUDScore);
SetHUDDefeats(HUDDefeats); SetHUDDefeats(HUDDefeats);
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn()); ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn());

View File

@ -30,6 +30,7 @@ public:
void SetDebugMsg7(FString Key, FString Value); void SetDebugMsg7(FString Key, FString Value);
void SetHUDHealth(float Health, float MaxHealth); void SetHUDHealth(float Health, float MaxHealth);
void SetHUDShield(float Shield, float MaxShield);
void SetHUDScore(float Score); void SetHUDScore(float Score);
void SetHUDDefeats(int32 Defeats); void SetHUDDefeats(int32 Defeats);
void SetHUDWeaponAmmo(int32 Ammo); void SetHUDWeaponAmmo(int32 Ammo);
@ -104,6 +105,8 @@ private:
float HUDHealth; float HUDHealth;
float HUDMaxHealth; float HUDMaxHealth;
float HUDShield;
float HUDMaxShield;
float HUDScore; float HUDScore;
int32 HUDDefeats; int32 HUDDefeats;
int32 HUDGrenades; int32 HUDGrenades;