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)
{
if (bEliminated) return;
Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth);
UpdateHUDHealth();
if (Health > 0.f)

View File

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

View File

@ -42,6 +42,8 @@ public:
UFUNCTION(Server, Reliable)
void ServerLaunchGrenade(const FVector_NetQuantize& Target);
FORCEINLINE int32 GetGrenades() const { return Grenades; }
protected:
virtual void BeginPlay() override;
@ -180,4 +182,15 @@ private:
void UpdateAmmoValues();
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))
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)
{
BlasterHUD = BlasterHUD == nullptr ? Cast<ABlasterHUD>(GetHUD()) : BlasterHUD;
@ -327,6 +343,12 @@ void ABlasterPlayerController::PollInit()
SetHUDHealth(HUDHealth, HUDMaxHealth);
SetHUDScore(HUDScore);
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 SetDebugMsg6(FString Key, FString Value);
void SetDebugMsg7(FString Key, FString Value);
void SetHUDHealth(float Health, float MaxHealth);
void SetHUDScore(float Score);
void SetHUDDefeats(int32 Defeats);
void SetHUDWeaponAmmo(int32 Ammo);
void SetHUDCarriedAmmo(int32 Ammo);
void SetHUDGrenades(int32 Grenades);
void SetHUDMatchCountdown(float CountdownTime);
void SetHUDAnnouncementCountdown(float CountdownTime);
@ -104,5 +106,6 @@ private:
float HUDMaxHealth;
float HUDScore;
int32 HUDDefeats;
int32 HUDGrenades;
};