Skip to content

Commit 4f44145

Browse files
committed
Add more validation and fix "ReturnActorToPool" bug
1 parent 072c0d9 commit 4f44145

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

UEObjectPooling/Source/Private/ObjectPool.cpp

+19-10
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
UObjectPool::UObjectPool()
1313
{
14-
PrimaryComponentTick.bCanEverTick = true;
14+
PrimaryComponentTick.bCanEverTick = false;
1515
}
1616

1717

@@ -41,19 +41,28 @@ void UObjectPool::AddActorsToPool(int const ActorsNumber,
4141
{
4242
if(PoolActor && ActorsNumber > 0)
4343
{
44+
FActorSpawnParameters SpawnParameters;
45+
SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
4446
for (int i = 0; i < ActorsNumber; i++)
4547
{
46-
AActor* SpawnedActor = GetWorld()->SpawnActor<AActor>(PoolActor, FVector().ZeroVector, FRotator().ZeroRotator);
47-
SpawnedActor->SetActorHiddenInGame(true);
48-
SpawnedActor->SetActorEnableCollision(false);
49-
50-
InactiveActors.Add(SpawnedActor);
48+
AActor* SpawnedActor = GetWorld()->SpawnActor<AActor>(PoolActor, FVector().ZeroVector, FRotator().ZeroRotator, SpawnParameters);
49+
if(SpawnedActor)
50+
{
51+
SpawnedActor->SetActorHiddenInGame(true);
52+
SpawnedActor->SetActorEnableCollision(false);
53+
SpawnedActor->SetActorTickEnabled(false);
54+
55+
InactiveActors.Add(SpawnedActor);
56+
}
57+
else
58+
{
59+
Branch = EOutputStates::Failed;
60+
return;
61+
}
5162
}
52-
5363
Branch = EOutputStates::Success;
5464
return;
5565
}
56-
5766
Branch = EOutputStates::Failed;
5867
return;
5968
}
@@ -85,7 +94,7 @@ void UObjectPool::SpawnActorFromPool(const FTransform SpawnTransform, AActor* Ow
8594
PoolActorToSpawn->SetInstigator(Instigator);
8695
PoolActorToSpawn->SetActorHiddenInGame(false);
8796
PoolActorToSpawn->SetActorEnableCollision(true);
88-
SpawnedActor->SetActorTickEnabled(true);
97+
PoolActorToSpawn->SetActorTickEnabled(true);
8998

9099
InactiveActors.Remove(PoolActorToSpawn);
91100
ActiveActors.Add(PoolActorToSpawn);
@@ -126,7 +135,7 @@ bool UObjectPool::HasPoolFreeActor() const
126135

127136
void UObjectPool::ReturnActorToPool(AActor* Actor)
128137
{
129-
if(ActiveActors.Find(Actor))
138+
if(ActiveActors.Contains(Actor))
130139
{
131140
Actor->SetActorHiddenInGame(true);
132141
Actor->SetActorEnableCollision(false);

0 commit comments

Comments
 (0)