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)
|
||||
{
|
||||
if (bEliminated) return;
|
||||
Health = FMath::Clamp(Health - Damage, 0.f, MaxHealth);
|
||||
UpdateHUDHealth();
|
||||
if (Health > 0.f)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -37,4 +37,7 @@ public:
|
|||
UPROPERTY(meta = (BindWidget))
|
||||
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)
|
||||
{
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue