@@ -172,14 +172,12 @@ void USlotDataTask_Saver::SerializeWorld()
172172 const UWorld* World = GetWorld ();
173173 SELog (Preset, " World '" + World->GetName () + " '" , FColor::Green, false , 1 );
174174
175- BakeAllFilters ();
176-
177175 const TArray<ULevelStreaming*>& Levels = World->GetStreamingLevels ();
176+ PrepareAllLevels (Levels);
178177
179178 // Threads available + 1 (Synchronous Thread)
180179 const int32 NumberOfThreads = FMath::Max (1 , FPlatformMisc::NumberOfWorkerThreadsToSpawn () + 1 );
181180 const int32 TasksPerLevel = FMath::Max (1 , FMath::RoundToInt (float (NumberOfThreads) / (Levels.Num () + 1 )));
182-
183181 Tasks.Reserve (NumberOfThreads);
184182
185183 SerializeLevelSync (World->GetCurrentLevel (), TasksPerLevel);
@@ -194,6 +192,20 @@ void USlotDataTask_Saver::SerializeWorld()
194192 RunScheduledTasks ();
195193}
196194
195+ void USlotDataTask_Saver::PrepareAllLevels (const TArray<ULevelStreaming*>& Levels)
196+ {
197+ BakeAllFilters ();
198+
199+ // Create the sub-level records if non existent
200+ for (const ULevelStreaming* Level : Levels)
201+ {
202+ if (Level->IsLevelLoaded ())
203+ {
204+ SlotData->SubLevels .AddUnique ({ *Level });
205+ }
206+ }
207+ }
208+
197209void USlotDataTask_Saver::SerializeLevelSync (const ULevel* Level, int32 AssignedTasks, const ULevelStreaming* StreamingLevel)
198210{
199211 TRACE_CPUPROFILER_EVENT_SCOPE (USlotDataTask_Saver::SerializeLevelSync);
@@ -207,14 +219,11 @@ void USlotDataTask_Saver::SerializeLevelSync(const ULevel* Level, int32 Assigned
207219 const FName LevelName = StreamingLevel ? StreamingLevel->GetWorldAssetPackageFName () : FPersistentLevelRecord::PersistentName;
208220 SELog (Preset, " Level '" + LevelName.ToString () + " '" , FColor::Green, false , 1 );
209221
210-
211222 // Find level record. By default, main level
212223 FLevelRecord* LevelRecord = &SlotData->MainLevel ;
213224 if (StreamingLevel)
214225 {
215- // Find or create the sub-level
216- const int32 Index = SlotData->SubLevels .AddUnique ({ *StreamingLevel });
217- LevelRecord = &SlotData->SubLevels [Index];
226+ LevelRecord = FindLevelRecord (StreamingLevel);
218227 }
219228 check (LevelRecord);
220229
0 commit comments