152 - Grenades in the HUD
This commit is contained in:
parent
899f058596
commit
4227a898d4
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -43,6 +43,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;
|
||||||
void SetAiming(bool bIsAiming);
|
void SetAiming(bool bIsAiming);
|
||||||
|
@ -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();
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,4 +37,7 @@ public:
|
||||||
UPROPERTY(meta = (BindWidget))
|
UPROPERTY(meta = (BindWidget))
|
||||||
UTextBlock* MatchCountdownText;
|
UTextBlock* MatchCountdownText;
|
||||||
|
|
||||||
|
UPROPERTY(meta = (BindWidget))
|
||||||
|
UTextBlock* GrenadesAmount;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue