Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
ULevelStreamingSubsystem::FInitialStageBootstrapper 구조체 참조
ULevelStreamingSubsystem::FInitialStageBootstrapper에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

void Initialize (ULevelStreamingSubsystem *InOwner)
 
void Reset ()
 
void TryInitializeCurrentStage ()
 
bool IsInitializedForCurrentWorld () const
 

Private 멤버 함수

ULevelStreamingDataResolveCurrentStageDataFromWorld () const
 
bool OnWaitForPlayTick (float DeltaTime)
 

Private 속성

TWeakObjectPtr< UWorld > InitializedWorld
 
TWeakObjectPtr< ULevelStreamingSubsystemOwner
 
FTSTicker::FDelegateHandle InitTickerHandle
 

멤버 함수 문서화

◆ Initialize()

void ULevelStreamingSubsystem::FInitialStageBootstrapper::Initialize ( ULevelStreamingSubsystem InOwner)
123{
124 Owner = InOwner;
125}
TWeakObjectPtr< ULevelStreamingSubsystem > Owner
Definition LevelStreamingSubsystem.h:146
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsInitializedForCurrentWorld()

bool ULevelStreamingSubsystem::FInitialStageBootstrapper::IsInitializedForCurrentWorld ( ) const
267{
268 const ULevelStreamingSubsystem* OwnerSubsystem = Owner.Get();
269
270 if (OwnerSubsystem != nullptr && InitializedWorld.Get() == OwnerSubsystem->GetWorld())
271 {
272 return true;
273 }
274 else
275 {
276 return false;
277 }
278}
Definition LevelStreamingSubsystem.h:38
TWeakObjectPtr< UWorld > InitializedWorld
Definition LevelStreamingSubsystem.h:145

◆ OnWaitForPlayTick()

bool ULevelStreamingSubsystem::FInitialStageBootstrapper::OnWaitForPlayTick ( float  DeltaTime)
private
282{
283 ULevelStreamingSubsystem* OwnerSubsystem = Owner.Get();
284
285 if (OwnerSubsystem == nullptr)
286 {
287 InitTickerHandle.Reset();
288 return false;
289 }
290
291 UWorld* World = OwnerSubsystem->GetWorld();
292
293 if (World == nullptr || World->HasBegunPlay() == false)
294 {
295 return true;
296 }
297
299 return false;
300}
FTSTicker::FDelegateHandle InitTickerHandle
Definition LevelStreamingSubsystem.h:147
void TryInitializeCurrentStage()
Definition LevelStreamingSubsystem.cpp:140
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Reset()

void ULevelStreamingSubsystem::FInitialStageBootstrapper::Reset ( )
129{
130 if (InitTickerHandle.IsValid())
131 {
132 FTSTicker::GetCoreTicker().RemoveTicker(InitTickerHandle);
133 InitTickerHandle.Reset();
134 }
135
136 InitializedWorld.Reset();
137}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveCurrentStageDataFromWorld()

ULevelStreamingData * ULevelStreamingSubsystem::FInitialStageBootstrapper::ResolveCurrentStageDataFromWorld ( ) const
private
304{
305 const ULevelStreamingSubsystem* OwnerSubsystem = Owner.Get();
306 check(OwnerSubsystem);
307
308 const UWorld* World = OwnerSubsystem->GetWorld();
309
310 if (World == nullptr || World->IsGameWorld() == false || OwnerSubsystem->CachedStageDictionary == nullptr)
311 {
312 return nullptr;
313 }
314
315 FName ActiveMapAssetName = NAME_None;
316
317 ULevelStreamingData* StreamingData = OwnerSubsystem->CachedStageDictionary->GetLevelStreamingDataByWorld(OwnerSubsystem);
318
319 if (StreamingData == nullptr)
320 {
321 LOG_WARNING(LogCKLevel, "StageDictionary does not contain active streaming level '%s'.", *ActiveMapAssetName.ToString());
322 return nullptr;
323 }
324
325 return StreamingData;
326}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
Definition LevelStreamingData.h:19
TObjectPtr< UStageDictionary > CachedStageDictionary
Definition LevelStreamingSubsystem.h:152

◆ TryInitializeCurrentStage()

void ULevelStreamingSubsystem::FInitialStageBootstrapper::TryInitializeCurrentStage ( )
141{
142 ULevelStreamingSubsystem* OwnerSubsystem = Owner.Get();
143
144 if (OwnerSubsystem == nullptr)
145 {
146 return;
147 }
148
149 UWorld* World = OwnerSubsystem->GetWorld();
150
151 if (World == nullptr || World->IsGameWorld() == false || OwnerSubsystem->CachedStageDictionary == nullptr)
152 {
153 return;
154 }
155
156 if (InitializedWorld.Get() == World)
157 {
158 return;
159 }
160
161 if (World->HasBegunPlay() == false)
162 {
163 if (InitTickerHandle.IsValid())
164 {
165 return;
166 }
167
169 auto WaitDelegate = FTickerDelegate::CreateRaw(this, FunctionPtr);
170 InitTickerHandle = FTSTicker::GetCoreTicker().AddTicker(WaitDelegate);
171 return;
172 }
173
175 {
176 LOG_ERROR(LogCKLevel, "LevelStreamingStateMachine is not in idle state.");
177 return;
178 }
179
180 if (InitTickerHandle.IsValid())
181 {
182 FTSTicker::GetCoreTicker().RemoveTicker(InitTickerHandle);
183 InitTickerHandle.Reset();
184 }
185
187
188 if (CurrentStageData == nullptr)
189 {
190 LOG_ERROR(LogCKLevel, "%s를 가져올 수 없습니다. ", NAMEOF(ULevelStreamingData));
191 return;
192 }
193
194 OwnerSubsystem->LevelStreamingData = CurrentStageData;
195 InitializedWorld = World;
196
197 ULevelStreaming* StreamingLevel = OwnerSubsystem->LevelToLoad.Get();
198
199 if (StreamingLevel == nullptr)
200 {
201 StreamingLevel = FLevelStreamingUtility::FindByName(World, CurrentStageData->TargetMap.PrimaryAssetName);
202 OwnerSubsystem->LevelToLoad = StreamingLevel;
203 }
204
205 ULevel* TargetLoadedLevel;
206
207 if (OwnerSubsystem->IsLaunchedFromPersistentLevel() && StreamingLevel && StreamingLevel->IsLevelLoaded())
208 {
209 TargetLoadedLevel = StreamingLevel->GetLoadedLevel();
210 }
211 else
212 {
213 TargetLoadedLevel = World->GetCurrentLevel();
214 }
215
216 AUStageFlowDefinition* CurrentFlowDefinition = AUStageFlowDefinition::GetStageFlowDefinition(TargetLoadedLevel, CurrentStageData);
217
218 if (CurrentFlowDefinition)
219 {
220 CurrentFlowDefinition->OnLevelLoaded(TargetLoadedLevel, CurrentStageData);
221 }
222 else
223 {
224 LOG_WARNING(LogCK, "%s does not exist.", NAMEOF(AUStageFlowDefinition));
225 }
226
227 OwnerSubsystem->ForEachSendStreamingEvent(TargetLoadedLevel, [TargetLoadedLevel, CurrentStageData](IStreamingEventListenerInterface& Listener)
228 {
229 Listener.OnLevelLoaded(TargetLoadedLevel, CurrentStageData);
230 });
231
232 OwnerSubsystem->NotifyLevelLoaded(CurrentStageData);
233
234 //Main이 아니라 특정 맵에서 시작할때도 무조건 Placer 옵션으로 지정한 위치에 배치돼서 불편하므로 호출을 주석처리 해둠.
235 //OwnerSubsystem->PlacePlayerInLevel();
236
237 if (CurrentFlowDefinition != nullptr)
238 {
239 CurrentFlowDefinition->OnLevelStreamingEnded();
240 }
241 else
242 {
243 LOG_WARNING(LogCK, "%s does not exist.", NAMEOF(AUStageFlowDefinition));
244 }
245
246 OwnerSubsystem->ForEachSendStreamingEvent(TargetLoadedLevel, [](IStreamingEventListenerInterface& Listener)
247 {
248 Listener.OnLevelStreamingEnded();
249 });
250
251 if (OwnerSubsystem->OnLevelLoadCompleted.IsBound())
252 {
253 OwnerSubsystem->OnLevelLoadCompleted.Broadcast();
254 }
255
257 {
258 PlayerManagement->HandlePlayerSpawn(World->GetFirstPlayerController());
259 }
260
261 // 타이틀에서 Niagara 이펙트 에셋을 비동기 프리로드 → 로드 시점에 PSO precaching 자동 컴파일
262 OwnerSubsystem->PreloadNiagaraEffectsAsync(CurrentStageData);
263}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF(Type)
Definition CK_UE.h:30
Definition StageFlowDefinition.h:27
virtual void OnLevelLoaded(ULevel *NewLevel, const ULevelStreamingData *LevelStreamingData) final
Definition StageFlowDefinition.cpp:56
static AUStageFlowDefinition * GetStageFlowDefinition(const ULevel *CurrentLoadedLevel, ULevelStreamingData *Data)
Definition StageFlowDefinition.cpp:15
virtual void OnLevelStreamingEnded() final
Definition StageFlowDefinition.cpp:146
Definition StreamingEventListenerInterface.h:23
virtual void OnLevelStreamingEnded()=0
virtual void OnLevelLoaded(ULevel *NewLevel, const ULevelStreamingData *LevelStreamingData)=0
static UPlayerManagementSubsystem * GetPlayerManagementSubsystem(const UObject *WorldContextObject)
Definition CK_BPFunctionLibrary.cpp:86
FPrimaryAssetId TargetMap
Definition LevelStreamingData.h:44
void ForEachSendStreamingEvent(const ULevel *LoadedLevel, const TFunctionRef< void(IStreamingEventListenerInterface &)> &Callback) const
Definition LevelStreamingSubsystem.cpp:556
void PreloadNiagaraEffectsAsync(TWeakObjectPtr< ULevelStreamingData > RequestedStreamingData)
Definition LevelStreamingSubsystem.cpp:608
FORCEINLINE bool IsLaunchedFromPersistentLevel() const
Definition LevelStreamingSubsystem.h:67
FLevelStreamingStateMachine StreamingStateMachine
Definition LevelStreamingSubsystem.h:174
void NotifyLevelLoaded(ULevelStreamingData *StreamingData) const
Definition LevelStreamingSubsystem.cpp:591
FOnLevelLoadCompleted OnLevelLoadCompleted
Definition LevelStreamingSubsystem.h:116
TWeakObjectPtr< ULevelStreaming > LevelToLoad
Definition LevelStreamingSubsystem.h:164
TObjectPtr< ULevelStreamingData > LevelStreamingData
Definition LevelStreamingSubsystem.h:158
Definition PlayerManagementSubsystem.h:42
FORCEINLINE ELevelStreamingFlowState GetState() const
Definition LevelStreamingStateMachine.h:29
ULevelStreamingData * ResolveCurrentStageDataFromWorld() const
Definition LevelStreamingSubsystem.cpp:303
bool OnWaitForPlayTick(float DeltaTime)
Definition LevelStreamingSubsystem.cpp:281
static ULevelStreaming * FindByName(const UWorld *World, FName LevelName)
Definition LevelStreamingSubsystem.cpp:49
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ InitializedWorld

TWeakObjectPtr<UWorld> ULevelStreamingSubsystem::FInitialStageBootstrapper::InitializedWorld
private

◆ InitTickerHandle

FTSTicker::FDelegateHandle ULevelStreamingSubsystem::FInitialStageBootstrapper::InitTickerHandle
private

◆ Owner

TWeakObjectPtr<ULevelStreamingSubsystem> ULevelStreamingSubsystem::FInitialStageBootstrapper::Owner
private

이 구조체에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: