Fix out of range array crashes when removing weapon from inventory
This commit is contained in:
parent
08a8774a24
commit
ac9c8981b9
|
@ -164,6 +164,10 @@ void APlayerCharacter::BeginFireCallback(const FInputActionInstance& Instance)
|
||||||
|
|
||||||
OnFire();
|
OnFire();
|
||||||
|
|
||||||
|
if (CurrentWeapon == nullptr)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (CurrentWeapon->GetWeaponProperties()->IsAutomatic)
|
if (CurrentWeapon->GetWeaponProperties()->IsAutomatic)
|
||||||
{
|
{
|
||||||
|
@ -375,7 +379,12 @@ 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()
|
||||||
|
|
Loading…
Reference in New Issue