116 - Updating Ammo
This commit is contained in:
parent
6792b354c7
commit
d7539845c6
|
@ -343,7 +343,8 @@ void UCombatComponent::FinishedReloading()
|
||||||
if (Character == nullptr) return;
|
if (Character == nullptr) return;
|
||||||
if (Character->HasAuthority())
|
if (Character->HasAuthority())
|
||||||
{
|
{
|
||||||
CombatState = ECombatState::ECS_Unoccupied;;
|
CombatState = ECombatState::ECS_Unoccupied;
|
||||||
|
UpdateAmmoValues();
|
||||||
}
|
}
|
||||||
if (bFireButtonPressed)
|
if (bFireButtonPressed)
|
||||||
{
|
{
|
||||||
|
@ -351,9 +352,29 @@ void UCombatComponent::FinishedReloading()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::UpdateAmmoValues()
|
||||||
|
{
|
||||||
|
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
||||||
|
const int32 ReloadAmount = AmountToReload();
|
||||||
|
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
||||||
|
{
|
||||||
|
CarriedAmmoMap[EquippedWeapon->GetWeaponType()] -= ReloadAmount;
|
||||||
|
CarriedAmmo = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
||||||
|
}
|
||||||
|
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
||||||
|
if (Controller)
|
||||||
|
{
|
||||||
|
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
||||||
|
}
|
||||||
|
EquippedWeapon->AddAmmo(-ReloadAmount);
|
||||||
|
}
|
||||||
|
|
||||||
void UCombatComponent::ServerReload_Implementation()
|
void UCombatComponent::ServerReload_Implementation()
|
||||||
{
|
{
|
||||||
if (Character == nullptr) return;
|
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
||||||
|
|
||||||
|
// return if weapon mag is at max capacity
|
||||||
|
if (EquippedWeapon->GetAmmo() == EquippedWeapon->GetMagCapacity()) return;
|
||||||
|
|
||||||
CombatState = ECombatState::ECS_Reloading;
|
CombatState = ECombatState::ECS_Reloading;
|
||||||
HandleReload();
|
HandleReload();
|
||||||
|
@ -380,6 +401,22 @@ void UCombatComponent::HandleReload()
|
||||||
Character->PlayReloadMontage();
|
Character->PlayReloadMontage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32 UCombatComponent::AmountToReload()
|
||||||
|
{
|
||||||
|
if (EquippedWeapon == nullptr) return 0;
|
||||||
|
|
||||||
|
const int32 RoomInMag = EquippedWeapon->GetMagCapacity() - EquippedWeapon->GetAmmo();
|
||||||
|
|
||||||
|
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
||||||
|
{
|
||||||
|
const int32 AmountCarried = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
||||||
|
const int32 Least = FMath::Min(RoomInMag, AmountCarried);
|
||||||
|
return FMath::Clamp(RoomInMag, 0, Least);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void UCombatComponent::OnRep_EquippedWeapon()
|
void UCombatComponent::OnRep_EquippedWeapon()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon && Character)
|
if (EquippedWeapon && Character)
|
||||||
|
|
|
@ -27,6 +27,7 @@ public:
|
||||||
void Reload();
|
void Reload();
|
||||||
UFUNCTION(BlueprintCallable)
|
UFUNCTION(BlueprintCallable)
|
||||||
void FinishedReloading();
|
void FinishedReloading();
|
||||||
|
void UpdateAmmoValues();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
@ -55,6 +56,7 @@ protected:
|
||||||
void ServerReload();
|
void ServerReload();
|
||||||
|
|
||||||
void HandleReload();
|
void HandleReload();
|
||||||
|
int32 AmountToReload();
|
||||||
private:
|
private:
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
class ABlasterCharacter* Character;
|
class ABlasterCharacter* Character;
|
||||||
|
|
|
@ -212,3 +212,9 @@ void AWeapon::Dropped()
|
||||||
OwnerCharacter = nullptr;
|
OwnerCharacter = nullptr;
|
||||||
OwnerController = nullptr;
|
OwnerController = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AWeapon::AddAmmo(int32 Amount)
|
||||||
|
{
|
||||||
|
Ammo = FMath::Clamp(Ammo - Amount, 0, MagCapacity);
|
||||||
|
SetHUDAmmo();
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
void ShowPickupWidget(bool bShowWidget);
|
void ShowPickupWidget(bool bShowWidget);
|
||||||
virtual void Fire(const FVector& HitTarget);
|
virtual void Fire(const FVector& HitTarget);
|
||||||
void Dropped();
|
void Dropped();
|
||||||
|
void AddAmmo(int32 Amount);
|
||||||
|
|
||||||
// Textures for the weapon crosshairs
|
// Textures for the weapon crosshairs
|
||||||
|
|
||||||
|
@ -133,5 +134,7 @@ public:
|
||||||
FORCEINLINE float GetZoomedFOV() const { return ZoomedFOV; };
|
FORCEINLINE float GetZoomedFOV() const { return ZoomedFOV; };
|
||||||
FORCEINLINE float GetZoomInterpSpeed() const { return ZoomInterpSpeed; };
|
FORCEINLINE float GetZoomInterpSpeed() const { return ZoomInterpSpeed; };
|
||||||
FORCEINLINE EWeaponType GetWeaponType() const { return WeaponType; }
|
FORCEINLINE EWeaponType GetWeaponType() const { return WeaponType; }
|
||||||
|
FORCEINLINE int32 GetAmmo() const { return Ammo; }
|
||||||
|
FORCEINLINE int32 GetMagCapacity() const { return MagCapacity; }
|
||||||
bool IsEmpty();
|
bool IsEmpty();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue