Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
LevelStreamingSubsystem.h
이 파일의 문서화 페이지로 가기
1// Fill out your copyright notice in the Description page of Project Settings.
2
3#pragma once
4
5#include "CoreMinimal.h"
10#include "Level/CK_ELevelType.h"
12#include "LevelStreamingSubsystem.generated.h"
13
16class ULevelStreaming;
17
20
21
23
25
26DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPlacePlayerTheWorld, ULevelPlayerPlacer*, Placer, UWorld*, World);
27
28
29
30UCLASS()
31class CK_UE_API ULevelStreamingSubsystem : public UGameInstanceSubsystem, public FTickableGameObject
32{
33 GENERATED_BODY()
34
35public:
37 virtual void Initialize(FSubsystemCollectionBase& Collection) override;
38
39public:
40 UFUNCTION(BlueprintCallable, Category = "Level|Streaming")
41 void RequestLevelLoad(ULevelStreamingData* ReqLevelLoadPipelineData);
42
43public:
44 FORCEINLINE bool IsAvailable() const
45 {
46 const UWorld* World = GetGameInstance()->GetWorld();
47 return World && World->GetStreamingLevels().Num() > 0;
48 }
49
50protected:
51 virtual void Tick(float DeltaTime) override;
52 virtual bool IsTickable() const override;
53
54 FString HandleLevelLoading(ULevelStreamingData* ReqLevelLoadPipelineData, ULevelStreaming* TargetLevel);
55 bool InvalidateLevelLoadRequest(const ULevelStreamingData* ReqLevelLoadPipelineData, ULevelStreaming*& PreviousLevelStreaming) const;
56
57 virtual TStatId GetStatId() const override
58 {
59 RETURN_QUICK_DECLARE_CYCLE_STAT(ULevelStreamingSubsystem, STATGROUP_Tickables);
60 }
61
62private:
63 void FinalizeLevelLoadProcess(ELevelStreamingPhase Phase);
64
65 // WholeEffects에서 Phase에 해당하는 이펙트를 꺼내 ChainExecutor를 시작합니다.
66 void StartChain(ELevelStreamingPhase Phase);
67
68
69 UFUNCTION()
70 void OnLevelLoaded();
71
72 UFUNCTION()
73 void OnLevelShown();
74
75 void StartDuringLoadPhase();
76 void EvaluateDuringLoadCompletion();
77
78 // 번들 비동기 로드 완료 시 OnLevelLoadedInMemory 브로드캐스트
79 void NotifyLevelLoaded(ULevelRuleData* Rule) const;
80
81
82public:
83 UPROPERTY(EditAnywhere, Category = "Debug")
84 bool bDebugMode = true;
85
86 UPROPERTY(EditAnywhere)
87 int32 StreamingWindowSize = 3;
88
89 UPROPERTY(BlueprintAssignable, Category = "Level|Streaming")
90 FOnLevelLoadCompleted OnLevelLoadCompleted;
91
92 UPROPERTY(BlueprintAssignable, Category = "Level|Streaming")
93 FOnLevelLoadedInMemory OnLevelLoadedInMemory;
94
95 UPROPERTY(BlueprintAssignable, Category = "Level|Streaming")
96 FOnPlacePlayerTheWorld OnPlacePlayerTheWorld;
97
98private:
99 // GC 방지용 이펙트 소유 목록 — ChainExecutor는 이 배열의 원시 포인터를 참조합니다.
100 UPROPERTY(Transient)
101 TArray<TObjectPtr<ULevelStreamingEffect>> AllRegisteredEffects;
102
103 UPROPERTY(Transient)
104 TObjectPtr<ULevelStreamingData> LevelStreamingData;
105
106 UPROPERTY(Transient)
107 TWeakObjectPtr<ULevelStreaming> LevelToLoad;
108
109 UPROPERTY(Transient)
110 TWeakObjectPtr<ULevelStreaming> LevelToUnload;
111
112 UPROPERTY(Transient)
113 TObjectPtr<UDataBundleRegistry> BundleRegistry;
114
115 UPROPERTY(Transient)
116 FLevelStreamingDeque LevelStreamingDeque;
117
118 // 이펙트 체인 실행기 — 체인 진행 상태 및 Phase별 디스패치를 담당합니다.
119 FEffectChainExecutor ChainExecutor;
120
121private:
122 bool bIsLevelLoadRequested = false;
123 bool bAsyncLoading = false;
124 bool bLevelLoadDone = false;
125 bool bDuringLoadChainDone = false;
126 bool bFakeLoadingDone = false;
127
128 FTSTicker::FDelegateHandle FakeLoadingTickerHandle;
129};
ELevelStreamingPhase
Definition CK_ELevelType.h:5
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnPlacePlayerTheWorld, ULevelPlayerPlacer *, Placer, UWorld *, World)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnLevelLoadCompleted)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnLevelLoadedInMemory, ULevelRuleData *, RuleData)
DataBundle의 로드/언로드를 관리하는 GameInstance 서브시스템.
Definition DataBundleRegistry.h:45
Definition LevelPlayerPlacer.h:14
Definition LevelRuleData.h:63
Definition LevelStreamingData.h:18
Definition LevelStreamingEffect.h:18
Definition LevelStreamingSubsystem.h:32
virtual TStatId GetStatId() const override
Definition LevelStreamingSubsystem.h:57
FORCEINLINE bool IsAvailable() const
Definition LevelStreamingSubsystem.h:44
레벨 스트리밍 이펙트 체인의 순차 실행을 담당합니다.
Definition EffectChainExecutor.h:20
Definition LevelStreamingContext.h:10
Definition LevelStreamingDeque.h:13