Compare commits

...

2 Commits

Author SHA1 Message Date
baz
6a97c425d7 Avoid array resizing with ranged for loop 2025-09-11 02:21:40 +01:00
baz
56d4c5f5b4 Return all pooled objects to pool on player death 2025-09-11 02:21:18 +01:00
4 changed files with 34 additions and 2 deletions

View File

@ -189,8 +189,10 @@ void AEnemyCharacter::ResetHealth()
void AEnemyCharacter::DamagePlayer()
{
for (auto DamagedPlayer : Player)
if (Player.Num() == 0) return;
for (int i = 0; i < Player.Num(); i++)
{
UGameplayStatics::ApplyDamage(DamagedPlayer, Damage, GetController(), this, nullptr);
UGameplayStatics::ApplyDamage(Player[i], Damage, GetController(), this, nullptr);
}
}

View File

@ -70,6 +70,19 @@ void AObjectPoolManager::ReturnObject(AActor* Object)
}
}
void AObjectPoolManager::ReturnAllObjects()
{
int ObjectPoolSize = ObjectPool.Num();
for (int i = 0; i < ObjectPoolSize; i++)
{
if (!ObjectPool[i]->IsHidden())
{
ReturnObject(ObjectPool[i]);
}
}
}
void AObjectPoolManager::SetObjectStatus(bool bEnabled, AActor* Object)
{
Object->SetActorHiddenInGame(!bEnabled);

View File

@ -22,6 +22,8 @@ public:
void ReturnObject(AActor* Object);
void ReturnAllObjects();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;

View File

@ -159,6 +159,21 @@ void AVampireGameMode::AddRandomEnemyTypeToPool()
void AVampireGameMode::OnPlayerDeath(FDamageInfo DamageInfo)
{
GetWorldTimerManager().ClearTimer(SpawnEnemyTimerDelegate);
if (EnemyObjectPoolManager)
{
EnemyObjectPoolManager->ReturnAllObjects();
}
if (ProjectileObjectPoolManager)
{
ProjectileObjectPoolManager->ReturnAllObjects();
}
if (PickupObjectPoolManager)
{
PickupObjectPoolManager->ReturnAllObjects();
}
}
void AVampireGameMode::EndGame()