286{
299
300 const UDataTable* SectionTable =
SectionDataMap.LoadSynchronous();
301 const UDataTable* WaveTable =
WaveDataMap.LoadSynchronous();
302 const UDataTable* SpawnTable =
SpawnDataMap.LoadSynchronous();
303 const UDataTable* MonsterTable =
MonsterDataMap.LoadSynchronous();
304
305 if (SectionTable == nullptr)
306 {
307 LOG_WARNING(LogCKAsset,
"SectionDataMap 로드 실패: DataTable이 nullptr입니다.");
308 return;
309 }
310
311 if (WaveTable == nullptr)
312 {
313 LOG_WARNING(LogCKAsset,
"WaveDataMap 로드 실패: DataTable이 nullptr입니다.");
314 return;
315 }
316
317 if (SpawnTable == nullptr)
318 {
319 LOG_WARNING(LogCKAsset,
"SpawnDataMap 로드 실패: DataTable이 nullptr입니다.");
320 return;
321 }
322
323 if (MonsterTable == nullptr)
324 {
325 LOG_WARNING(LogCKAsset,
"MonsterDataMap 로드 실패: DataTable이 nullptr입니다.");
326 return;
327 }
328
329 TArray<FDT_SectionTable*> SectionTableRows;
330 SectionTable->GetAllRows(TEXT("UStageManifest::BuildCache"), SectionTableRows);
331
332 TArray<FDT_WaveTable*> WaveTableRows;
333 WaveTable->GetAllRows(TEXT("UStageManifest::BuildCache"), WaveTableRows);
334
335 TArray<FDT_SpawnTable*> SpawnTableRows;
336 SpawnTable->GetAllRows(TEXT("UStageManifest::BuildCache"), SpawnTableRows);
337
338 TArray<FEnemyStatTableRow*> MonsterTableRows;
339 MonsterTable->GetAllRows(TEXT("UStageManifest::BuildCache"), MonsterTableRows);
340
342 {
343 if (
MonsterMap.Contains(MonsterRow->Enemy_ID) ==
false)
344 {
346 }
347
348 MonsterMap[MonsterRow->Enemy_ID].MonsterList.Emplace(*MonsterRow);
349 }
350
352 {
353 TArray<FWaveSpawnEntry> SpawnEntries;
354 ExpandSpawnRow(*SpawnRow, SpawnEntries);
355 SpawnMap.Add(SpawnRow->Spawn_ID, MoveTemp(SpawnEntries));
356 }
357
359 {
361 Collection.WaveTable = *WaveRow;
362
363 TArray<FString> SpawnLines;
364 WaveRow->Spawn_ID.ParseIntoArrayLines(SpawnLines, true);
365
366 const FString* SpawnIDLine = nullptr;
367
368 for (
const FString&
Line : SpawnLines)
369 {
370 if (
Line.TrimStartAndEnd().IsEmpty() ==
false)
371 {
373 break;
374 }
375 }
376
377 if (SpawnIDLine == nullptr)
378 {
379 SpawnIDLine = &WaveRow->Spawn_ID;
380 }
381
382 if (SpawnLines.Num() > 1)
383 {
384 LOG_WARNING(LogCKAsset,
"Wave '%s'의 Spawn_ID에 줄바꿈이 포함되어 첫 번째 줄만 사용합니다: %s", *WaveRow->Wave_ID.ToString(), **SpawnIDLine);
385 }
386
387 TArray<FString> Parts;
388 SpawnIDLine->ParseIntoArray(Parts, TEXT("&"), true);
389
390 for (const FString& Part : Parts)
391 {
392 const FString Trimmed = Part.TrimStartAndEnd();
393
394 if (Trimmed.IsEmpty() == false)
395 {
396 Collection.ParsedSpawnIDs.Add(FName(*Trimmed));
397 }
398 }
399
400 WaveMap.Add(WaveRow->Wave_ID, MoveTemp(Collection));
401 }
402
404 {
406 SectionMap.Add(SectionRow->Section_ID, MoveTemp(SectionData));
407 }
408
409
417
418
419 for (TPair<FName, FDT_SituationTable>& Pair :
SituationMap)
420 {
421 ParseSituationTags(Pair.Value);
422 }
423
425 {
426 ParseConstellationReactionTags(Pair.Value);
427 }
428
429
430 LOG_INFO(LogCKAsset,
"BuildCache 완료: Situation %d개 / Constellation %d개 / Buff %d개 / Level %d개",
432
434 {
435 LOG_INFO(LogCKAsset,
" Constellation %s : Reaction_Tags=\"%s\" -> 파싱=%s",
437 }
438
439
440 if (
const UDataTable* LevelTable =
LevelDataMap.LoadSynchronous())
441 {
442 for (const TPair<FName, uint8*>& Pair : LevelTable->GetRowMap())
443 {
445
446 if (Row)
447 {
449 }
450 }
451 }
452 else
453 {
454 LOG_WARNING(LogCKAsset,
"LevelDataMap 로드 실패: DataTable이 nullptr입니다.");
455 }
456}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
TMap< FName, FDT_SituationTable > SituationMap
Definition StageManifest.h:315
TMap< FName, FMonsterDataCollection > MonsterMap
Definition StageManifest.h:300
TMap< FName, FWaveDataCollection > WaveMap
Definition StageManifest.h:295
TMap< FName, FDT_PortraitTable > PortraitMap
Definition StageManifest.h:304
TMap< FName, FDT_ScenarioCutsceneTable > ScenarioCutsceneMap
Definition StageManifest.h:306
TMap< FName, FSectionData > SectionMap
Definition StageManifest.h:292
TMap< FName, FDT_ConstellationTable > ConstellationMap
Definition StageManifest.h:311
TMap< FName, FDT_BuffTable > BuffMap
Definition StageManifest.h:313
TMap< FName, TArray< FWaveSpawnEntry > > SpawnMap
Definition StageManifest.h:297
TMap< FName, FDT_TutorialTable > TutorialMap
Definition StageManifest.h:308
static void FillRowMap(const TSoftObjectPtr< UDataTable > &TablePtr, const TCHAR *TableName, TMap< FName, TRow > &OutMap)
Definition StageManifest.h:272
TMap< int32, FDT_LevelTable > LevelMap
Definition StageManifest.h:317
TMap< FName, FDT_ToastMessageTable > ToastMessageMap
Definition StageManifest.h:302
CK_UE_API FString ToDisplayString(ESituationTag Tags)
Definition SituationTag.cpp:28
Definition DT_LevelTable.h:14
int32 Level
Definition DT_LevelTable.h:26
Definition DT_SectionTable.h:8
Definition DT_SpawnTable.h:41
Definition DT_WaveTable.h:8
Definition StatTable.h:47
Definition StageManifest.h:29
Definition StageManifest.h:133
Definition StageManifest.h:74