161 - Updating the Shield
This commit is contained in:
parent
6a5eecca49
commit
4ee3b3e9f8
|
@ -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();
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue