From 56d4c5f5b4b4c72e19781f230e426d91020b89eb Mon Sep 17 00:00:00 2001 From: baz Date: Thu, 11 Sep 2025 02:21:18 +0100 Subject: [PATCH] Return all pooled objects to pool on player death --- Source/vampires/ObjectPoolManager.cpp | 13 +++++++++++++ Source/vampires/ObjectPoolManager.h | 2 ++ Source/vampires/VampireGameMode.cpp | 15 +++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/Source/vampires/ObjectPoolManager.cpp b/Source/vampires/ObjectPoolManager.cpp index 1cbbc34..778eef1 100644 --- a/Source/vampires/ObjectPoolManager.cpp +++ b/Source/vampires/ObjectPoolManager.cpp @@ -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); diff --git a/Source/vampires/ObjectPoolManager.h b/Source/vampires/ObjectPoolManager.h index ca2ba18..dc4cbc7 100644 --- a/Source/vampires/ObjectPoolManager.h +++ b/Source/vampires/ObjectPoolManager.h @@ -22,6 +22,8 @@ public: void ReturnObject(AActor* Object); + void ReturnAllObjects(); + protected: // Called when the game starts or when spawned virtual void BeginPlay() override; diff --git a/Source/vampires/VampireGameMode.cpp b/Source/vampires/VampireGameMode.cpp index 46b21a5..143d121 100644 --- a/Source/vampires/VampireGameMode.cpp +++ b/Source/vampires/VampireGameMode.cpp @@ -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()