204{
205 if (ActorClass == nullptr || GetWorld() == nullptr)
206 {
207 return nullptr;
208 }
209
211 AActor* SpawnedActor = nullptr;
212
214 {
216
217 if (IsValid(SpawnedActor))
218 {
219 break;
220 }
221
222 SpawnedActor = nullptr;
223 }
224
225 if (SpawnedActor == nullptr)
226 {
228 }
229
230 if (SpawnedActor == nullptr)
231 {
233
234 bool bCanExpand = true;
235
236 if (Settings && Settings->
PoolMaps.Contains(ActorClass))
237 {
238 bCanExpand = Settings->
PoolMaps[ActorClass].bCanExpand;
239 }
240
241 if (bCanExpand)
242 {
244 }
245 else
246 {
247 LOG_WARNING(LogCK,
"%s 풀 부족으로 더 이상 스폰 불가능", *ActorClass->GetName())
248 return nullptr;
249 }
250 }
251
252 if (SpawnedActor == nullptr)
253 {
254 return nullptr;
255 }
256
257 SpawnedActor->SetActorLocationAndRotation(Location, Rotation);
258 SpawnedActor->SetActorHiddenInGame(false);
259 SpawnedActor->SetActorTickEnabled(true);
260 SpawnedActor->SetActorEnableCollision(true);
261
262
264 {
265 IObjectPoolingInterface::Execute_OnSpawnFromPool(SpawnedActor);
266 }
267
268 return SpawnedActor;
269}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition ObjectPoolSettings.h:27
TMap< TSubclassOf< AActor >, FPoolSettings > PoolMaps
Definition ObjectPoolSettings.h:41
AActor * CreateActorFromPendingWarmup(TSubclassOf< AActor > ActorClass)
Definition PoolWorldSubsystem.cpp:71
TMap< TSubclassOf< AActor >, FObjectPool > ObjectPools
Definition PoolWorldSubsystem.h:48
Definition PoolWorldSubsystem.h:11
TArray< TObjectPtr< AActor > > InactiveActors
Definition PoolWorldSubsystem.h:16