Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
StageManifest.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "Engine/DataAsset.h"
21#include "StageManifest.generated.h"
22
23
25class UStageManifest;
26
27USTRUCT(BlueprintType)
29{
30 GENERATED_BODY()
31
32public:
34 FMonsterDataCollection(const FName Monster_ID) : Monster_ID(Monster_ID) { }
35
36public:
37 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
38 FName Monster_ID;
39
40 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
41 TArray<FEnemyStatTableRow> MonsterList;
42};
43
44
45USTRUCT(BlueprintType)
47{
48 GENERATED_BODY()
49
50public:
52 FWaveSpawnData(const FName Wave_ID, const FStageManifestHandle& InHandle) : Wave_ID(Wave_ID), Handle(InHandle) { }
53
54 const FMonsterDataCollection* GetMonsterData(const FName& MonsterID) const;
55
56public:
57 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
58 FName Wave_ID;
59
60 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
61 TArray<FWaveSpawnEntry> SpawnList;
62
63private:
64 UPROPERTY()
66};
67
68
72USTRUCT(BlueprintType)
74{
75 GENERATED_BODY()
76
77public:
79 FWaveDataCollection(const FName InWave_ID, UStageManifest* InManifest) : Wave_ID(InWave_ID), Handle(InManifest) { }
80
81 // 이 웨이브의 모든 SpawnTable 반환
82 FWaveSpawnData GetSpawnTables() const;
83
84 // 다음 웨이브 반환. IsLastWave()이면 nullptr
85 const FWaveDataCollection* GetNextWave() const;
86
87 // 이 웨이브부터 체인 끝까지 모든 SpawnTable 반환
88 TArray<FWaveSpawnEntry> GetAllSpawnTables() const;
89
90 // Nextwave_ID가 없거나 '-'이면 마지막 웨이브
91 bool IsLastWave() const;
92
93public:
94 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
95 FName Wave_ID;
96
97 UPROPERTY(Transient, BlueprintReadOnly, Category = "Wave")
98 FDT_WaveTable WaveTable;
99
100 // WaveTable.Wave_ID 를 '&' 파싱한 결과
101 UPROPERTY(Transient)
102 TArray<FName> ParsedSpawnIDs;
103
104private:
105 UPROPERTY()
107};
108
109
113USTRUCT(BlueprintType)
115{
116 GENERATED_BODY()
117
118public:
120 FStageData(UStageManifest* InManifest) : Handle(InManifest) { }
121
122 // WaveID로 특정 웨이브 직접 조회
123 const FWaveDataCollection* GetWave(const FName& WaveID) const;
124
125private:
126 UPROPERTY()
128};
129
130
131USTRUCT(BlueprintType)
133{
134 GENERATED_BODY()
135
136public:
138 FSectionData(const FDT_SectionTable& Table, UStageManifest* InManifest) : SectionTable(Table), Handle(InManifest) { }
139
140 // 이 섹션의 첫 번째 웨이브 반환
141 const FWaveDataCollection* GetWaveTable() const;
142
143 // WaveID로 특정 웨이브 직접 조회
144 const FWaveDataCollection* GetWave(const FName& WaveID) const;
145
146public:
147 UPROPERTY(Transient, BlueprintReadOnly, Category = "Section")
148 FDT_SectionTable SectionTable;
149
150private:
151 UPROPERTY()
153};
154
155
159UCLASS()
160class CK_UE_API UStageManifest : public UPrimaryDataAsset, public IDataAssetBundle
161{
162 GENERATED_BODY()
163
164public:
166
167public:
168 virtual FPrimaryAssetId GetPrimaryAssetId() const override;
169
170 virtual void PostLoad() override;
171
172 virtual void OnBundleLoaded_Implementation(FGameplayTag BundleTag) override;
173
174 virtual void OnBundleReleased_Implementation(FGameplayTag BundleTag) override;
175
176 UFUNCTION(BlueprintCallable, Category = "Stage")
177 virtual FSectionData GetSectionTable(const FName& SectionID);
178
179 UFUNCTION(BlueprintCallable, Category = "Toast")
180 virtual FDT_ToastMessageTable GetToastMessageTable(const FName& RowID);
181
182 UFUNCTION(BlueprintCallable, Category = "Portrait")
183 virtual FDT_PortraitTable GetPortraitTable(const FName& RowID);
184
185 UFUNCTION(BlueprintCallable, Category = "Cutscene")
186 virtual FDT_ScenarioCutsceneTable GetScenarioCutsceneTable(const FName& RowID);
187
188 UFUNCTION(BlueprintCallable, Category = "Tutorial")
189 virtual FDT_TutorialTable GetTutorialTable(const FName& RowID);
190
191 UFUNCTION(BlueprintCallable, Category = "Constellation")
192 virtual FDT_ConstellationTable GetConstellationTable(const FName& RowID);
193
194 UFUNCTION(BlueprintCallable, Category = "Constellation")
195 virtual FDT_BuffTable GetBuffTable(const FName& RowID);
196
197 // 등록된 성좌 전체에서 무작위로 하나를 고른다. 성좌 생성 시 사용.
198 UFUNCTION(BlueprintCallable, Category = "Constellation")
200
201 // 성좌 캐시 전체. 반응 태그로 직접 추리는 쪽에서 쓴다.
202 FORCEINLINE const TMap<FName, FDT_ConstellationTable>& GetConstellationMap() const
203 {
204 return ConstellationMap;
205 }
206
207 UFUNCTION(BlueprintCallable, Category = "Situation")
208 virtual FDT_SituationTable GetSituationTable(const FName& RowID);
209
210 // 레벨 제한과 선행 조건을 반영해 선택지를 뽑는다.
211 // EquippedIDs 는 이미 장착한 상황이며, 후보 제외와 선행 조건 판정(보유 태그 계산)에 함께 쓰인다.
212 UFUNCTION(BlueprintCallable, Category = "Situation")
213 virtual TArray<FDT_SituationTable> DrawSituationChoices(int32 PlayerLevel, const TArray<FName>& EquippedIDs, int32 DrawCount = 3);
214
215 // 해당 레벨에서 다음 레벨로 가는 데 필요한 경험치. 0 이하면 최종 레벨.
216 UFUNCTION(BlueprintCallable, Category = "Level")
217 virtual float GetRequiredExp(int32 Level);
218
219 // 레벨 행 전체. 채팅 출력 간격/적체 기준을 함께 읽을 때 쓴다.
220 UFUNCTION(BlueprintCallable, Category = "Level")
221 virtual FDT_LevelTable GetLevelTable(int32 Level);
222
223 // 레벨 표가 실제로 채워졌는지. 요구치 0 이 "미로드"인지 "최종 레벨"인지 구분하는 데 쓴다.
224 UFUNCTION(BlueprintPure, Category = "Level")
225 bool HasLevelData() const
226 {
227 return LevelMap.Num() > 0;
228 }
229
230 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
231 TSoftObjectPtr<UDataTable> SectionDataMap;
232
233 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
234 TSoftObjectPtr<UDataTable> WaveDataMap;
235
236 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
237 TSoftObjectPtr<UDataTable> SpawnDataMap;
238
239 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
240 TSoftObjectPtr<UDataTable> MonsterDataMap;
241
242 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
243 TSoftObjectPtr<UDataTable> ToastMessageDataMap;
244
245 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
246 TSoftObjectPtr<UDataTable> PortraitDataMap;
247
248 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
249 TSoftObjectPtr<UDataTable> ScenarioCutsceneDataMap;
250
251 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
252 TSoftObjectPtr<UDataTable> TutorialDataMap;
253
254 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
255 TSoftObjectPtr<UDataTable> ConstellationDataMap;
256
257 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
258 TSoftObjectPtr<UDataTable> BuffDataMap;
259
260 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
261 TSoftObjectPtr<UDataTable> SituationDataMap;
262
263 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "DataTable")
264 TSoftObjectPtr<UDataTable> LevelDataMap;
265
266private:
267 void BuildCache();
268
269 // 행 이름을 키로 쓰는 단순 테이블을 통째로 캐싱한다.
270 // 테이블이 없으면 경고만 남기고 넘어가, 다른 테이블 로딩을 막지 않는다.
271 template <typename TRow>
272 static void FillRowMap(const TSoftObjectPtr<UDataTable>& TablePtr, const TCHAR* TableName, TMap<FName, TRow>& OutMap)
273 {
274 const UDataTable* Table = TablePtr.LoadSynchronous();
275
276 if (Table == nullptr)
277 {
278 LOG_WARNING(LogCKAsset, "%s 로드 실패: DataTable이 nullptr입니다.", TableName);
279 return;
280 }
281
282 for (const TPair<FName, uint8*>& Pair : Table->GetRowMap())
283 {
284 if (const TRow* Row = reinterpret_cast<const TRow*>(Pair.Value))
285 {
286 OutMap.Add(Pair.Key, *Row);
287 }
288 }
289 }
290
291 UPROPERTY(BlueprintReadOnly, Category = "Stage", meta = (AllowPrivateAccess = "true"))
293
294 UPROPERTY(BlueprintReadOnly, Category = "Stage", meta = (AllowPrivateAccess = "true"))
296
297 TMap<FName, TArray<FWaveSpawnEntry>> SpawnMap;
298
299 UPROPERTY(BlueprintReadOnly, Category = "Wave", meta = (AllowPrivateAccess = "true"))
301
303
305
307
309
310 UPROPERTY(BlueprintReadOnly, Category = "Constellation", meta = (AllowPrivateAccess = "true"))
312
313 TMap<FName, FDT_BuffTable> BuffMap;
314
316
318
319public:
321};
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition DataAssetBundle.h:19
Definition LevelStreamingData.h:19
Definition StageManifest.h:161
TSoftObjectPtr< UDataTable > LevelDataMap
Definition StageManifest.h:264
TMap< FName, FDT_SituationTable > SituationMap
Definition StageManifest.h:315
virtual void PostLoad() override
Definition StageManifest.cpp:253
virtual FPrimaryAssetId GetPrimaryAssetId() const override
Definition StageManifest.cpp:247
TSoftObjectPtr< UDataTable > MonsterDataMap
Definition StageManifest.h:240
virtual FDT_ScenarioCutsceneTable GetScenarioCutsceneTable(const FName &RowID)
Definition StageManifest.cpp:591
UStageManifest()
Definition StageManifest.cpp:230
TMap< FName, FMonsterDataCollection > MonsterMap
Definition StageManifest.h:300
virtual TArray< FDT_SituationTable > DrawSituationChoices(int32 PlayerLevel, const TArray< FName > &EquippedIDs, int32 DrawCount=3)
Definition StageManifest.cpp:495
virtual FDT_PortraitTable GetPortraitTable(const FName &RowID)
Definition StageManifest.cpp:579
virtual FDT_ConstellationTable GetConstellationTable(const FName &RowID)
Definition StageManifest.cpp:615
void BuildCache()
Definition StageManifest.cpp:285
virtual float GetRequiredExp(int32 Level)
Definition StageManifest.cpp:471
virtual FDT_ToastMessageTable GetToastMessageTable(const FName &RowID)
Definition StageManifest.cpp:567
TSoftObjectPtr< UDataTable > ToastMessageDataMap
Definition StageManifest.h:243
TMap< FName, FWaveDataCollection > WaveMap
Definition StageManifest.h:295
TMap< FName, FDT_PortraitTable > PortraitMap
Definition StageManifest.h:304
TSoftObjectPtr< UDataTable > SituationDataMap
Definition StageManifest.h:261
TSoftObjectPtr< UDataTable > ConstellationDataMap
Definition StageManifest.h:255
TMap< FName, FDT_ScenarioCutsceneTable > ScenarioCutsceneMap
Definition StageManifest.h:306
FORCEINLINE const TMap< FName, FDT_ConstellationTable > & GetConstellationMap() const
Definition StageManifest.h:202
virtual void OnBundleLoaded_Implementation(FGameplayTag BundleTag) override
Definition StageManifest.cpp:260
TMap< FName, FSectionData > SectionMap
Definition StageManifest.h:292
virtual FDT_ConstellationTable GetRandomConstellationTable()
Definition StageManifest.cpp:639
virtual FSectionData GetSectionTable(const FName &SectionID)
Definition StageManifest.cpp:656
TMap< FName, FDT_ConstellationTable > ConstellationMap
Definition StageManifest.h:311
virtual FDT_BuffTable GetBuffTable(const FName &RowID)
Definition StageManifest.cpp:627
TSoftObjectPtr< UDataTable > WaveDataMap
Definition StageManifest.h:234
bool HasLevelData() const
Definition StageManifest.h:225
TSoftObjectPtr< UDataTable > PortraitDataMap
Definition StageManifest.h:246
virtual FDT_SituationTable GetSituationTable(const FName &RowID)
Definition StageManifest.cpp:459
virtual FDT_TutorialTable GetTutorialTable(const FName &RowID)
Definition StageManifest.cpp:603
TSoftObjectPtr< UDataTable > TutorialDataMap
Definition StageManifest.h:252
TMap< FName, FDT_BuffTable > BuffMap
Definition StageManifest.h:313
TMap< FName, TArray< FWaveSpawnEntry > > SpawnMap
Definition StageManifest.h:297
TSoftObjectPtr< UDataTable > SpawnDataMap
Definition StageManifest.h:237
TMap< FName, FDT_TutorialTable > TutorialMap
Definition StageManifest.h:308
TSoftObjectPtr< UDataTable > ScenarioCutsceneDataMap
Definition StageManifest.h:249
virtual void OnBundleReleased_Implementation(FGameplayTag BundleTag) override
Definition StageManifest.cpp:267
virtual FDT_LevelTable GetLevelTable(int32 Level)
Definition StageManifest.cpp:483
static void FillRowMap(const TSoftObjectPtr< UDataTable > &TablePtr, const TCHAR *TableName, TMap< FName, TRow > &OutMap)
Definition StageManifest.h:272
TSoftObjectPtr< UDataTable > BuffDataMap
Definition StageManifest.h:258
TSoftObjectPtr< UDataTable > SectionDataMap
Definition StageManifest.h:231
TMap< int32, FDT_LevelTable > LevelMap
Definition StageManifest.h:317
TMap< FName, FDT_ToastMessageTable > ToastMessageMap
Definition StageManifest.h:302
Definition DT_BuffTable.h:15
Definition DT_ConstellationTable.h:19
Definition DT_LevelTable.h:14
Definition DT_PortraitTable.h:10
Definition DT_ScenarioCutsceneTable.h:10
Definition DT_SectionTable.h:8
Definition DT_SituationTable.h:20
Definition DT_ToastMessageTable.h:10
Definition FDT_TutorialTable.h:10
Definition DT_WaveTable.h:8
Definition StatTable.h:47
Definition StageManifest.h:29
FMonsterDataCollection(const FName Monster_ID)
Definition StageManifest.h:34
FMonsterDataCollection()
Definition StageManifest.h:33
Definition StageManifest.h:133
FSectionData(const FDT_SectionTable &Table, UStageManifest *InManifest)
Definition StageManifest.h:138
FSectionData()
Definition StageManifest.h:137
Definition StageManifest.h:115
FStageData()
Definition StageManifest.h:119
FStageData(UStageManifest *InManifest)
Definition StageManifest.h:120
Definition StageManifestHandle.h:13
Definition StageManifest.h:74
FWaveDataCollection()
Definition StageManifest.h:78
FWaveDataCollection(const FName InWave_ID, UStageManifest *InManifest)
Definition StageManifest.h:79
Definition StageManifest.h:47
FWaveSpawnData()
Definition StageManifest.h:51
FWaveSpawnData(const FName Wave_ID, const FStageManifestHandle &InHandle)
Definition StageManifest.h:52
Definition DT_SpawnTable.h:9