161 - Updating the Shield

This commit is contained in:
Kingsmedia 2022-05-23 11:47:49 +02:00
parent 6a5eecca49
commit 4ee3b3e9f8
3 changed files with 39 additions and 12 deletions

View File

@ -184,6 +184,7 @@ void ABlasterCharacter::BeginPlay()
Super::BeginPlay(); Super::BeginPlay();
UpdateHUDHealth(); UpdateHUDHealth();
UpdateHUDShield();
if (HasAuthority()) if (HasAuthority())
{ {
OnTakeAnyDamage.AddDynamic(this, &ABlasterCharacter::ReceiveDamage); OnTakeAnyDamage.AddDynamic(this, &ABlasterCharacter::ReceiveDamage);
@ -352,8 +353,26 @@ void ABlasterCharacter::PlayHitReactMontage()
void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* InstigatorController, AActor* DamageCauser) void ABlasterCharacter::ReceiveDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* InstigatorController, AActor* DamageCauser)
{ {
if (bEliminated) return; if (bEliminated) return;
Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth);
float DamageToHealth = Damage;
if (Shield > 0)
{
if (Shield >= Damage)
{
Shield = FMath::Clamp(Shield - Damage, 0.f, MaxShield);
DamageToHealth = 0.f;
}
else
{
DamageToHealth = FMath::Clamp(DamageToHealth - (Damage - Shield), 0.f, Damage);
Shield = 0.f;
}
}
Health = FMath::Clamp(Health - DamageToHealth, 0.f, MaxHealth);
UpdateHUDHealth(); UpdateHUDHealth();
UpdateHUDShield();
if (Health > 0.f) if (Health > 0.f)
{ {
PlayHitReactMontage(); PlayHitReactMontage();

View File

@ -158,7 +158,7 @@ void ABlasterPlayerController::SetHUDHealth(float Health, float MaxHealth)
} }
else else
{ {
bInitializeCharacterOverlay = true; bInitializeHealth = true;
HUDHealth = Health; HUDHealth = Health;
HUDMaxHealth = MaxHealth; HUDMaxHealth = MaxHealth;
} }
@ -180,7 +180,7 @@ void ABlasterPlayerController::SetHUDShield(float Shield, float MaxShield)
} }
else else
{ {
bInitializeCharacterOverlay = true; bInitializeShield = true;
HUDShield = Shield; HUDShield = Shield;
HUDMaxShield = MaxShield; HUDMaxShield = MaxShield;
} }
@ -200,7 +200,7 @@ void ABlasterPlayerController::SetHUDScore(float Score)
} }
else else
{ {
bInitializeCharacterOverlay = true; bInitializeScore = true;
HUDScore = Score; HUDScore = Score;
} }
} }
@ -218,7 +218,7 @@ void ABlasterPlayerController::SetHUDDefeats(int32 Defeats)
} }
else else
{ {
bInitializeCharacterOverlay = true; bInitializeDefeats = true;
HUDDefeats = Defeats; HUDDefeats = Defeats;
} }
} }
@ -261,6 +261,7 @@ void ABlasterPlayerController::SetHUDGrenades(int32 Grenades)
BlasterHUD->CharacterOverlay->GrenadesAmount->SetText(FText::FromString(GrenadesText)); BlasterHUD->CharacterOverlay->GrenadesAmount->SetText(FText::FromString(GrenadesText));
} else } else
{ {
bInitializeGrenades = true;
HUDGrenades = Grenades; HUDGrenades = Grenades;
} }
} }
@ -362,16 +363,15 @@ void ABlasterPlayerController::PollInit()
CharacterOverlay = BlasterHUD->CharacterOverlay; CharacterOverlay = BlasterHUD->CharacterOverlay;
if (CharacterOverlay) if (CharacterOverlay)
{ {
SetHUDHealth(HUDHealth, HUDMaxHealth); if (bInitializeHealth) SetHUDHealth(HUDHealth, HUDMaxHealth);
SetHUDShield(HUDShield, HUDMaxShield); if (bInitializeShield) SetHUDShield(HUDShield, HUDMaxShield);
SetHUDScore(HUDScore); if (bInitializeScore) SetHUDScore(HUDScore);
SetHUDDefeats(HUDDefeats); if (bInitializeDefeats) SetHUDDefeats(HUDDefeats);
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn()); ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn());
if (BlasterCharacter && BlasterCharacter->GetCombat()) if (BlasterCharacter && BlasterCharacter->GetCombat())
{ {
SetHUDGrenades(BlasterCharacter->GetCombat()->GetGrenades()); if (bInitializeGrenades) SetHUDGrenades(BlasterCharacter->GetCombat()->GetGrenades());
} }
} }
} }
} }

View File

@ -101,14 +101,22 @@ private:
UPROPERTY() UPROPERTY()
class UCharacterOverlay* CharacterOverlay; class UCharacterOverlay* CharacterOverlay;
bool bInitializeCharacterOverlay = false;
bool bInitializeHealth = false;
float HUDHealth; float HUDHealth;
float HUDMaxHealth; float HUDMaxHealth;
bool bInitializeShield = false;
float HUDShield; float HUDShield;
float HUDMaxShield; float HUDMaxShield;
bool bInitializeScore = false;
float HUDScore; float HUDScore;
bool bInitializeDefeats = false;
int32 HUDDefeats; int32 HUDDefeats;
bool bInitializeGrenades = false;
int32 HUDGrenades; int32 HUDGrenades;
}; };