152 - Grenades in the HUD

This commit is contained in:
Kingsmedia 2022-05-22 15:21:17 +02:00
parent 899f058596
commit 4227a898d4
11 changed files with 66 additions and 0 deletions

Binary file not shown.

Binary file not shown.

View File

@ -340,6 +340,7 @@ 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;
Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth); Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth);
UpdateHUDHealth(); UpdateHUDHealth();
if (Health > 0.f) if (Health > 0.f)

View File

@ -28,6 +28,7 @@ void UCombatComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Out
DOREPLIFETIME(UCombatComponent, bAiming); DOREPLIFETIME(UCombatComponent, bAiming);
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly); DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
DOREPLIFETIME(UCombatComponent, CombatState); DOREPLIFETIME(UCombatComponent, CombatState);
DOREPLIFETIME(UCombatComponent, Grenades);
} }
void UCombatComponent::BeginPlay() void UCombatComponent::BeginPlay()
@ -389,6 +390,7 @@ int32 UCombatComponent::AmountToReload()
void UCombatComponent::ThrowGrenade() void UCombatComponent::ThrowGrenade()
{ {
if (Grenades == 0) return;
if (CombatState != ECombatState::ECS_Unoccupied || EquippedWeapon == nullptr) return; if (CombatState != ECombatState::ECS_Unoccupied || EquippedWeapon == nullptr) return;
CombatState = ECombatState::ECS_ThrowingGrenade; CombatState = ECombatState::ECS_ThrowingGrenade;
if (Character) if (Character)
@ -401,10 +403,16 @@ void UCombatComponent::ThrowGrenade()
{ {
ServerThrowGrenade(); ServerThrowGrenade();
} }
if (Character && Character->HasAuthority())
{
Grenades = FMath::Clamp(Grenades -1, 0, MaxGrenades);
UpdateHUDGrenades();
}
} }
void UCombatComponent::ServerThrowGrenade_Implementation() void UCombatComponent::ServerThrowGrenade_Implementation()
{ {
if (Grenades == 0) return;
CombatState = ECombatState::ECS_ThrowingGrenade; CombatState = ECombatState::ECS_ThrowingGrenade;
if (Character) if (Character)
{ {
@ -412,6 +420,22 @@ void UCombatComponent::ServerThrowGrenade_Implementation()
AttachActorToLeftHand(EquippedWeapon); AttachActorToLeftHand(EquippedWeapon);
ShowAttachedGrenade(true); ShowAttachedGrenade(true);
} }
Grenades = FMath::Clamp(Grenades -1, 0, MaxGrenades);
UpdateHUDGrenades();
}
void UCombatComponent::OnRep_Grenades()
{
UpdateHUDGrenades();
}
void UCombatComponent::UpdateHUDGrenades()
{
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
if (Controller)
{
Controller->SetHUDGrenades(Grenades);
}
} }
void UCombatComponent::ShowAttachedGrenade(bool bShowGrenade) void UCombatComponent::ShowAttachedGrenade(bool bShowGrenade)

View File

@ -42,6 +42,8 @@ public:
UFUNCTION(Server, Reliable) UFUNCTION(Server, Reliable)
void ServerLaunchGrenade(const FVector_NetQuantize& Target); void ServerLaunchGrenade(const FVector_NetQuantize& Target);
FORCEINLINE int32 GetGrenades() const { return Grenades; }
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
@ -180,4 +182,15 @@ private:
void UpdateAmmoValues(); void UpdateAmmoValues();
void UpdateShotgunAmmoValues(); void UpdateShotgunAmmoValues();
UPROPERTY(ReplicatedUsing = OnRep_Grenades)
int32 Grenades = 4;
UFUNCTION()
void OnRep_Grenades();
UPROPERTY(EditAnywhere)
int32 MaxGrenades = 4;
void UpdateHUDGrenades();
}; };

View File

@ -37,4 +37,7 @@ public:
UPROPERTY(meta = (BindWidget)) UPROPERTY(meta = (BindWidget))
UTextBlock* MatchCountdownText; UTextBlock* MatchCountdownText;
UPROPERTY(meta = (BindWidget))
UTextBlock* GrenadesAmount;
}; };

View File

@ -227,6 +227,22 @@ void ABlasterPlayerController::SetHUDCarriedAmmo(int32 Ammo)
} }
} }
void ABlasterPlayerController::SetHUDGrenades(int32 Grenades)
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
bool bHUDValid = BlasterHUD &&
BlasterHUD->CharacterOverlay &&
BlasterHUD->CharacterOverlay->GrenadesAmount;
if (bHUDValid)
{
FString GrenadesText = FString::Printf(TEXT("%d"), Grenades);
BlasterHUD->CharacterOverlay->GrenadesAmount->SetText(FText::FromString(GrenadesText));
} else
{
HUDGrenades = Grenades;
}
}
void ABlasterPlayerController::SetHUDMatchCountdown(float CountdownTime) void ABlasterPlayerController::SetHUDMatchCountdown(float CountdownTime)
{ {
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD; BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
@ -327,6 +343,12 @@ void ABlasterPlayerController::PollInit()
SetHUDHealth(HUDHealth, HUDMaxHealth); SetHUDHealth(HUDHealth, HUDMaxHealth);
SetHUDScore(HUDScore); SetHUDScore(HUDScore);
SetHUDDefeats(HUDDefeats); SetHUDDefeats(HUDDefeats);
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn());
if (BlasterCharacter && BlasterCharacter->GetCombat())
{
SetHUDGrenades(BlasterCharacter->GetCombat()->GetGrenades());
}
} }
} }
} }

View File

@ -28,11 +28,13 @@ public:
void SetDebugMsg5(FString Key, FString Value); void SetDebugMsg5(FString Key, FString Value);
void SetDebugMsg6(FString Key, FString Value); void SetDebugMsg6(FString Key, FString Value);
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 SetHUDScore(float Score); void SetHUDScore(float Score);
void SetHUDDefeats(int32 Defeats); void SetHUDDefeats(int32 Defeats);
void SetHUDWeaponAmmo(int32 Ammo); void SetHUDWeaponAmmo(int32 Ammo);
void SetHUDCarriedAmmo(int32 Ammo); void SetHUDCarriedAmmo(int32 Ammo);
void SetHUDGrenades(int32 Grenades);
void SetHUDMatchCountdown(float CountdownTime); void SetHUDMatchCountdown(float CountdownTime);
void SetHUDAnnouncementCountdown(float CountdownTime); void SetHUDAnnouncementCountdown(float CountdownTime);
@ -104,5 +106,6 @@ private:
float HUDMaxHealth; float HUDMaxHealth;
float HUDScore; float HUDScore;
int32 HUDDefeats; int32 HUDDefeats;
int32 HUDGrenades;
}; };