diff --git a/Source/vampires/ObjectPoolManager.cpp b/Source/vampires/ObjectPoolManager.cpp index 41cda1e..07bd8a1 100644 --- a/Source/vampires/ObjectPoolManager.cpp +++ b/Source/vampires/ObjectPoolManager.cpp @@ -12,6 +12,8 @@ void AObjectPoolManager::BeginPlay() void AObjectPoolManager::InitializeObjectPool(TSubclassOf Object, const int InitialObjectPoolSize) { + ObjectTemplate = Object; + for (int i = 0; i < InitialObjectPoolSize; i++) { if (AActor* object = GetWorld()->SpawnActor(Object, FVector(100000.0f, 100000.0f, 0), FRotator(0, 0, 0))) @@ -34,24 +36,27 @@ void AObjectPoolManager::InitializeObjectPool(UClass* Object, int InitialObjectP } } -AActor* AObjectPoolManager::GetObject() +AActor* AObjectPoolManager::GetObject(int startingOffset) { - for (AActor* object : ObjectPool) + int ObjectPoolSize = ObjectPool.Num(); + for (int i = startingOffset; i < ObjectPoolSize; i++) { - if (object->IsHidden()) + if (ObjectPool[i]->IsHidden()) { - SetObjectStatus(true, object); + SetObjectStatus(true, ObjectPool[i]); - if (UObjectPoolComponent* objectPoolComponent = object->GetComponentByClass()) + if (UObjectPoolComponent* objectPoolComponent = ObjectPool[i]->GetComponentByClass()) { objectPoolComponent->OnRetrieve.ExecuteIfBound(); } - return object; + return ObjectPool[i]; } } - return nullptr; + InitializeObjectPool(ObjectTemplate); + + return GetObject(ObjectPoolSize); } void AObjectPoolManager::ReturnObject(AActor* object) diff --git a/Source/vampires/ObjectPoolManager.h b/Source/vampires/ObjectPoolManager.h index 3dbf4ef..adcf83b 100644 --- a/Source/vampires/ObjectPoolManager.h +++ b/Source/vampires/ObjectPoolManager.h @@ -12,12 +12,13 @@ class VAMPIRES_API AObjectPoolManager : public AActor GENERATED_BODY() TArray> ObjectPool = TArray>(); - + TSubclassOf ObjectTemplate; + public: void InitializeObjectPool(TSubclassOf Object, int InitialObjectPoolSize = 400); void InitializeObjectPool(UClass* Object, int InitialObjectPoolSize = 400); - AActor* GetObject(); + AActor* GetObject(int startingOffset = 0); void ReturnObject(AActor* object);