Fix out of range array crashes when removing weapon from inventory

This commit is contained in:
Louis Hobbs 2023-01-24 02:54:17 +00:00
parent 08a8774a24
commit ac9c8981b9
1 changed files with 16 additions and 7 deletions

View File

@ -164,6 +164,10 @@ void APlayerCharacter::BeginFireCallback(const FInputActionInstance& Instance)
OnFire(); OnFire();
if (CurrentWeapon == nullptr)
{
return;
}
if (CurrentWeapon->GetWeaponProperties()->IsAutomatic) if (CurrentWeapon->GetWeaponProperties()->IsAutomatic)
{ {
@ -376,6 +380,11 @@ void APlayerCharacter::AddWeaponToInventory(TSubclassOf<class AWeapon> weapon)
void APlayerCharacter::RemoveWeaponFromInventory(int i) void APlayerCharacter::RemoveWeaponFromInventory(int i)
{ {
if (WeaponInventory[i] == CurrentWeapon)
{
CurrentWeapon = nullptr;
}
WeaponInventory[i]->Destroy(); WeaponInventory[i]->Destroy();
WeaponInventory.RemoveAt(i); WeaponInventory.RemoveAt(i);
@ -397,7 +406,7 @@ void APlayerCharacter::RemoveWeaponFromInventory(AWeapon* weapon)
{ {
if (int index = WeaponInventory.Find(weapon) != INDEX_NONE) if (int index = WeaponInventory.Find(weapon) != INDEX_NONE)
{ {
RemoveWeaponFromInventory(index); RemoveWeaponFromInventory(index - 1);
} }
} }
@ -420,16 +429,16 @@ void APlayerCharacter::OnFire()
CurrentWeapon->DecrementAmmoCount(1); CurrentWeapon->DecrementAmmoCount(1);
if (CurrentWeapon->GetAmmoCount() == 0)
{
RemoveCurrentWeaponFromInventory();
}
CurrentWeapon->PlayFireSoundAtLocation(GetActorLocation()); CurrentWeapon->PlayFireSoundAtLocation(GetActorLocation());
// TODO: Play some animation here // TODO: Play some animation here
CurrentWeapon->SetCurrentWeaponStatus(WeaponState::Cooldown); CurrentWeapon->SetCurrentWeaponStatus(WeaponState::Cooldown);
if (CurrentWeapon->GetAmmoCount() == 0)
{
RemoveCurrentWeaponFromInventory();
}
} }
void APlayerCharacter::WeaponCooldownHandler() void APlayerCharacter::WeaponCooldownHandler()