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() 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) void AObjectPoolManager::SetObjectStatus(bool bEnabled, AActor* Object)
{ {
Object->SetActorHiddenInGame(!bEnabled); Object->SetActorHiddenInGame(!bEnabled);

View File

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

View File

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