165 - Spawn Default Weapon

This commit is contained in:
Kingsmedia 2022-05-24 01:16:06 +02:00
parent 6e741fc764
commit a39861b510
7 changed files with 58 additions and 1 deletions

View File

@ -183,6 +183,8 @@ void ABlasterCharacter::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
SpawnDefaultWeapon();
UpdateHUDAmmo();
UpdateHUDHealth(); UpdateHUDHealth();
UpdateHUDShield(); UpdateHUDShield();
if (HasAuthority()) if (HasAuthority())
@ -686,6 +688,31 @@ void ABlasterCharacter::UpdateHUDShield()
} }
} }
void ABlasterCharacter::UpdateHUDAmmo()
{
BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
if (BlasterPlayerController && Combat && Combat->EquippedWeapon)
{
BlasterPlayerController->SetHUDCarriedAmmo(Combat->CarriedAmmo);
BlasterPlayerController->SetHUDWeaponAmmo(Combat->EquippedWeapon->GetAmmo());
}
}
void ABlasterCharacter::SpawnDefaultWeapon()
{
const ABlasterGameMode* BlasterGameMode = Cast<ABlasterGameMode>(UGameplayStatics::GetGameMode(this));
UWorld* World = GetWorld();
if (BlasterGameMode && World && !bEliminated && DefaultWeaponClass)
{
AWeapon* StartingWeapon = World->SpawnActor<AWeapon>(DefaultWeaponClass);
StartingWeapon->bDestroyWeapon = true;
if (Combat)
{
Combat->EquipWeapon(StartingWeapon);
}
}
}
void ABlasterCharacter::PollInit() void ABlasterCharacter::PollInit()
{ {
if (BlasterPlayerState == nullptr) if (BlasterPlayerState == nullptr)

View File

@ -43,6 +43,9 @@ public:
void UpdateHUDHealth(); void UpdateHUDHealth();
void UpdateHUDShield(); void UpdateHUDShield();
void UpdateHUDAmmo();
void SpawnDefaultWeapon();
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
@ -201,6 +204,10 @@ private:
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
USoundCue* EliminationBotSound; USoundCue* EliminationBotSound;
// Default weapon
UPROPERTY(EditAnywhere)
TSubclassOf<AWeapon> DefaultWeaponClass;
// Grenade // Grenade
UPROPERTY(VisibleAnywhere) UPROPERTY(VisibleAnywhere)

View File

@ -234,6 +234,11 @@ void ABlasterPlayerController::SetHUDWeaponAmmo(int32 Ammo)
FString AmmoText = FString::Printf(TEXT("%d"), Ammo); FString AmmoText = FString::Printf(TEXT("%d"), Ammo);
BlasterHUD->CharacterOverlay->WeaponAmmoValue->SetText(FText::FromString(AmmoText)); BlasterHUD->CharacterOverlay->WeaponAmmoValue->SetText(FText::FromString(AmmoText));
} }
else
{
bInitializeHUDWeaponAmmo = true;
HUDWeaponAmmo = Ammo;
}
} }
void ABlasterPlayerController::SetHUDCarriedAmmo(int32 Ammo) void ABlasterPlayerController::SetHUDCarriedAmmo(int32 Ammo)
@ -247,6 +252,11 @@ void ABlasterPlayerController::SetHUDCarriedAmmo(int32 Ammo)
FString AmmoText = FString::Printf(TEXT("%d"), Ammo); FString AmmoText = FString::Printf(TEXT("%d"), Ammo);
BlasterHUD->CharacterOverlay->CarriedAmmoValue->SetText(FText::FromString(AmmoText)); BlasterHUD->CharacterOverlay->CarriedAmmoValue->SetText(FText::FromString(AmmoText));
} }
else
{
bInitializeCarriedAmmo = true;
HUDCarriedAmmo = Ammo;
}
} }
void ABlasterPlayerController::SetHUDGrenades(int32 Grenades) void ABlasterPlayerController::SetHUDGrenades(int32 Grenades)
@ -367,6 +377,8 @@ void ABlasterPlayerController::PollInit()
if (bInitializeShield) SetHUDShield(HUDShield, HUDMaxShield); if (bInitializeShield) SetHUDShield(HUDShield, HUDMaxShield);
if (bInitializeScore) SetHUDScore(HUDScore); if (bInitializeScore) SetHUDScore(HUDScore);
if (bInitializeDefeats) SetHUDDefeats(HUDDefeats); if (bInitializeDefeats) SetHUDDefeats(HUDDefeats);
if (bInitializeCarriedAmmo) SetHUDCarriedAmmo(HUDCarriedAmmo);
if (bInitializeHUDWeaponAmmo) SetHUDWeaponAmmo(HUDWeaponAmmo);
ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn()); ABlasterCharacter* BlasterCharacter = Cast<ABlasterCharacter>(GetPawn());
if (BlasterCharacter && BlasterCharacter->GetCombat()) if (BlasterCharacter && BlasterCharacter->GetCombat())
{ {

View File

@ -119,4 +119,10 @@ private:
bool bInitializeGrenades = false; bool bInitializeGrenades = false;
int32 HUDGrenades; int32 HUDGrenades;
float bInitializeCarriedAmmo = false;
float HUDCarriedAmmo;
float bInitializeHUDWeaponAmmo = false;
float HUDWeaponAmmo;
}; };

View File

@ -255,6 +255,10 @@ void AWeapon::Fire(const FVector& HitTarget)
void AWeapon::Dropped() void AWeapon::Dropped()
{ {
if (bDestroyWeapon)
{
SetLifeSpan(30.f);
}
SetWeaponState(EWeaponState::EWS_Dropped); SetWeaponState(EWeaponState::EWS_Dropped);
const FDetachmentTransformRules DetachRules(EDetachmentRule::KeepWorld, true); const FDetachmentTransformRules DetachRules(EDetachmentRule::KeepWorld, true);
WeaponMesh->DetachFromComponent(DetachRules); WeaponMesh->DetachFromComponent(DetachRules);

View File

@ -69,7 +69,8 @@ public:
// Enable or disable custom depth // Enable or disable custom depth
void EnableCustomDepth(bool bEnabled); void EnableCustomDepth(bool bEnabled);
bool bDestroyWeapon = false;
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;