Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
FEffectChainExecutor 구조체 참조

레벨 스트리밍 이펙트 체인의 순차 실행을 담당합니다. 더 자세히 ...

#include <EffectChainExecutor.h>

FEffectChainExecutor에 대한 협력 다이어그램:
Collaboration graph

Public 타입

using FContextFactory = TFunction< FLevelStreamingContext()>
 매 틱마다 FLevelStreamingContext를 생성하는 팩토리 타입.
 
using FOnChainCompleted = TFunction< void(ELevelStreamingPhase)>
 체인 완료 시 완료된 Phase를 인자로 호출되는 콜백 타입.
 

Public 멤버 함수

void SetupEffects (const TArray< ULevelStreamingEffect * > &AllEffects)
 이펙트 목록을 Phase별로 분류해 내부 체인 맵을 구성합니다.
 
void ClearEffects ()
 내부 Phase 체인 맵과 현재 실행 체인을 모두 초기화합니다.
 
void Start (ELevelStreamingPhase InPhase, FContextFactory InContextFactory, FOnChainCompleted InOnCompleted, bool bInDebugMode=false)
 이펙트 체인 실행을 시작합니다.
 
void Tick (float DeltaTime)
 현재 이펙트를 틱합니다. 완료 시 End 이벤트를 호출하고 다음 이펙트로 진행합니다.
 
bool IsActive () const
 체인이 현재 실행 중인지 여부를 반환합니다.
 
ELevelStreamingPhase GetPhase () const
 현재 Phase를 반환합니다.
 
int32 GetChainIndex () const
 현재 ChainIndex를 반환합니다.
 

Private 멤버 함수

void Process ()
 다음 실행 대상 이펙트를 결정하고 Start 이벤트를 호출하거나 완료 처리합니다.
 
ELevelStreamingEffectResult DispatchUpdate (ULevelStreamingEffect *Effect, const FLevelStreamingContext &Context) const
 Phase에 맞는 인터페이스로 Update를 디스패치하고 결과를 반환합니다.
 
void DispatchEvent (ULevelStreamingEffect *Effect, ELevelStreamingEffectCallType CallType, const FLevelStreamingContext &Context) const
 Phase에 맞는 인터페이스로 Start 또는 End 이벤트를 디스패치합니다.
 

Private 속성

TMap< ELevelStreamingPhase, TArray< ULevelStreamingEffect * > > PhaseChains
 Phase별로 분류된 이펙트 체인 맵. SetupEffects 호출 시 구성됩니다.
 
TArray< ULevelStreamingEffect * > Chain
 현재 실행 중인 이펙트 목록. Start 시 PhaseChains에서 복사됩니다.
 
int32 ChainIndex = 0
 현재 실행 중인 이펙트의 인덱스.
 
ELevelStreamingPhase Phase = ELevelStreamingPhase::None
 현재 Phase.
 
FContextFactory ContextFactory
 매 틱마다 컨텍스트를 생성하는 팩토리 함수.
 
FOnChainCompleted OnCompleted
 체인 완료 시 호출될 콜백.
 
bool bActive = false
 체인 실행 중 여부.
 
bool bDebugMode = false
 디버그 로그 출력 여부.
 

상세한 설명

레벨 스트리밍 이펙트 체인의 순차 실행을 담당합니다.

Phase별 이펙트의 Update / Start / End 디스패치, bSkipThisEffect 처리, 완료 시 콜백 호출을 수행합니다. LevelStreamingSubsystem이 값으로 소유하며, 체인 진행 상태를 독립적으로 관리합니다.

멤버 타입정의 문서화

◆ FContextFactory

매 틱마다 FLevelStreamingContext를 생성하는 팩토리 타입.

◆ FOnChainCompleted

체인 완료 시 완료된 Phase를 인자로 호출되는 콜백 타입.

멤버 함수 문서화

◆ ClearEffects()

void FEffectChainExecutor::ClearEffects ( )

내부 Phase 체인 맵과 현재 실행 체인을 모두 초기화합니다.

47{
48 PhaseChains.Reset();
49 Chain.Reset();
50}
TArray< ULevelStreamingEffect * > Chain
현재 실행 중인 이펙트 목록. Start 시 PhaseChains에서 복사됩니다.
Definition EffectChainExecutor.h:111
TMap< ELevelStreamingPhase, TArray< ULevelStreamingEffect * > > PhaseChains
Phase별로 분류된 이펙트 체인 맵. SetupEffects 호출 시 구성됩니다.
Definition EffectChainExecutor.h:108

◆ DispatchEvent()

void FEffectChainExecutor::DispatchEvent ( ULevelStreamingEffect Effect,
ELevelStreamingEffectCallType  CallType,
const FLevelStreamingContext Context 
) const
private

Phase에 맞는 인터페이스로 Start 또는 End 이벤트를 디스패치합니다.

매개변수
Effect대상 이펙트.
CallTypeStart 또는 End.
Context현재 레벨 스트리밍 컨텍스트.
168{
169 switch (Phase)
170 {
171 case ELevelStreamingPhase::PreLoad:
172 {
173 ILevelPreLoad* PreLoad = Cast<ILevelPreLoad>(Effect);
174
175 if (PreLoad == nullptr)
176 {
177 return;
178 }
179
180 if (CallType == ELevelStreamingEffectCallType::Start)
181 {
182 PreLoad->OnPreLoadStart(Context);
183 }
184 else if (CallType == ELevelStreamingEffectCallType::End)
185 {
186 PreLoad->OnPreLoadEnd(Context);
187 }
188
189 break;
190 }
191
192 case ELevelStreamingPhase::DuringLoad:
193 {
194 ILevelLoading* Loading = Cast<ILevelLoading>(Effect);
195
196 if (Loading == nullptr)
197 {
198 return;
199 }
200
201 if (CallType == ELevelStreamingEffectCallType::Start)
202 {
203 Loading->OnLoadingStart(Context);
204 }
205 else if (CallType == ELevelStreamingEffectCallType::End)
206 {
207 Loading->OnLoadingEnd(Context);
208 }
209
210 break;
211 }
212
213 case ELevelStreamingPhase::PostLoad:
214 {
215 ILevelPostLoad* PostLoad = Cast<ILevelPostLoad>(Effect);
216
217 if (PostLoad == nullptr)
218 {
219 return;
220 }
221
222 if (CallType == ELevelStreamingEffectCallType::Start)
223 {
224 PostLoad->OnPostLoadStart(Context);
225 }
226 else if (CallType == ELevelStreamingEffectCallType::End)
227 {
228 PostLoad->OnPostLoadEnd(Context);
229 }
230
231 break;
232 }
233 }
234}
Definition LevelLoading.h:23
virtual void OnLoadingEnd(const FLevelStreamingContext Context)=0
virtual void OnLoadingStart(const FLevelStreamingContext Context)=0
Definition LevelPostLoad.h:24
virtual void OnPostLoadEnd(const FLevelStreamingContext Context)=0
virtual void OnPostLoadStart(const FLevelStreamingContext Context)=0
Definition LevelPreLoad.h:23
virtual void OnPreLoadEnd(const FLevelStreamingContext Context)=0
virtual void OnPreLoadStart(const FLevelStreamingContext Context)=0
ELevelStreamingPhase Phase
현재 Phase.
Definition EffectChainExecutor.h:117
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DispatchUpdate()

ELevelStreamingEffectResult FEffectChainExecutor::DispatchUpdate ( ULevelStreamingEffect Effect,
const FLevelStreamingContext Context 
) const
private

Phase에 맞는 인터페이스로 Update를 디스패치하고 결과를 반환합니다.

매개변수
Effect업데이트할 이펙트.
Context현재 레벨 스트리밍 컨텍스트.
반환값
이펙트 실행 결과.
141{
142 switch (Phase)
143 {
144 case ELevelStreamingPhase::PreLoad:
145 {
146 ILevelPreLoad* PreLoad = Cast<ILevelPreLoad>(Effect);
147 return PreLoad->OnPreLoadUpdate(Context);
148 }
149
150 case ELevelStreamingPhase::DuringLoad:
151 {
152 ILevelLoading* Loading = Cast<ILevelLoading>(Effect);
153 return Loading->OnLoadingUpdate(Context);
154 }
155
156 case ELevelStreamingPhase::PostLoad:
157 {
158 ILevelPostLoad* PostLoad = Cast<ILevelPostLoad>(Effect);
159 return PostLoad->OnPostLoadUpdate(Context);
160 }
161 }
162
163 return ELevelStreamingEffectResult::Completed;
164}
virtual ELevelStreamingEffectResult OnLoadingUpdate(const FLevelStreamingContext Context)=0
virtual ELevelStreamingEffectResult OnPostLoadUpdate(const FLevelStreamingContext Context)=0
virtual ELevelStreamingEffectResult OnPreLoadUpdate(const FLevelStreamingContext Context)=0
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetChainIndex()

int32 FEffectChainExecutor::GetChainIndex ( ) const
inline

현재 ChainIndex를 반환합니다.

76 {
77 return ChainIndex;
78 }
int32 ChainIndex
현재 실행 중인 이펙트의 인덱스.
Definition EffectChainExecutor.h:114

◆ GetPhase()

ELevelStreamingPhase FEffectChainExecutor::GetPhase ( ) const
inline

현재 Phase를 반환합니다.

70 {
71 return Phase;
72 }

◆ IsActive()

bool FEffectChainExecutor::IsActive ( ) const
inline

체인이 현재 실행 중인지 여부를 반환합니다.

64 {
65 return bActive;
66 }
bool bActive
체인 실행 중 여부.
Definition EffectChainExecutor.h:126
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Process()

void FEffectChainExecutor::Process ( )
private

다음 실행 대상 이펙트를 결정하고 Start 이벤트를 호출하거나 완료 처리합니다.

bSkipThisEffect인 이펙트를 건너뛰고, 유효한 이펙트가 없으면 OnCompleted를 호출합니다.

96{
97 // bSkipThisEffect인 이펙트 건너뜀
98 while (Chain.IsValidIndex(ChainIndex) && Chain[ChainIndex]->bSkipThisEffect)
99 {
100 ChainIndex++;
101 }
102
103 if (Chain.IsValidIndex(ChainIndex) == false)
104 {
105 // 완료 처리 전에 bActive를 먼저 내려 콜백 내부에서 IsActive() 호출 시 false 반환
106 bActive = false;
107
108 ELevelStreamingPhase CompletedPhase = Phase;
109
110 // 완료된 Phase의 모든 이펙트에 OnCompletedEffectsByPhase 알림
111 if (TArray<ULevelStreamingEffect*>* PhaseEffects = PhaseChains.Find(CompletedPhase))
112 {
113 for (ULevelStreamingEffect* Effect : *PhaseEffects)
114 {
115 if (Effect)
116 {
117 Effect->OnCompletedEffectsByPhase(CompletedPhase);
118 }
119 }
120 }
121
122 if (OnCompleted)
123 {
124 OnCompleted(CompletedPhase);
125 }
126
127 return;
128 }
129
130 if (bDebugMode)
131 {
132 LOG_INFO(LogCKLevel, "ChainIndex '%d' Phase '%s'", ChainIndex, *UEnum::GetValueAsString(Phase));
133 }
134
136 DispatchEvent(Chain[ChainIndex], ELevelStreamingEffectCallType::Start, Context);
137}
ELevelStreamingPhase
Definition CK_ELevelType.h:5
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:30
Definition LevelStreamingEffect.h:18
FContextFactory ContextFactory
매 틱마다 컨텍스트를 생성하는 팩토리 함수.
Definition EffectChainExecutor.h:120
void DispatchEvent(ULevelStreamingEffect *Effect, ELevelStreamingEffectCallType CallType, const FLevelStreamingContext &Context) const
Phase에 맞는 인터페이스로 Start 또는 End 이벤트를 디스패치합니다.
Definition EffectChainExecutor.cpp:167
FOnChainCompleted OnCompleted
체인 완료 시 호출될 콜백.
Definition EffectChainExecutor.h:123
bool bDebugMode
디버그 로그 출력 여부.
Definition EffectChainExecutor.h:129
Definition LevelStreamingContext.h:10
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupEffects()

void FEffectChainExecutor::SetupEffects ( const TArray< ULevelStreamingEffect * > &  AllEffects)

이펙트 목록을 Phase별로 분류해 내부 체인 맵을 구성합니다.

ILevelPreLoad / ILevelLoading / ILevelPostLoad 인터페이스 캐스트로 Phase를 판별합니다. 한 이펙트가 여러 인터페이스를 구현하면 해당 Phase 모두에 등록됩니다.

매개변수
AllEffects분류할 이펙트 목록.
14{
15 PhaseChains.Reset();
16
17 PhaseChains.FindOrAdd(ELevelStreamingPhase::PreLoad);
18 PhaseChains.FindOrAdd(ELevelStreamingPhase::DuringLoad);
19 PhaseChains.FindOrAdd(ELevelStreamingPhase::PostLoad);
20
21 for (ULevelStreamingEffect* Effect : AllEffects)
22 {
23 if (Effect == nullptr)
24 {
25 continue;
26 }
27
28 if (Cast<ILevelPreLoad>(Effect))
29 {
30 PhaseChains[ELevelStreamingPhase::PreLoad].Add(Effect);
31 }
32
33 if (Cast<ILevelLoading>(Effect))
34 {
35 PhaseChains[ELevelStreamingPhase::DuringLoad].Add(Effect);
36 }
37
38 if (Cast<ILevelPostLoad>(Effect))
39 {
40 PhaseChains[ELevelStreamingPhase::PostLoad].Add(Effect);
41 }
42 }
43}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Start()

void FEffectChainExecutor::Start ( ELevelStreamingPhase  InPhase,
FContextFactory  InContextFactory,
FOnChainCompleted  InOnCompleted,
bool  bInDebugMode = false 
)

이펙트 체인 실행을 시작합니다.

이전 체인 상태를 초기화한 뒤 첫 번째 이펙트의 Start 이벤트를 즉시 호출합니다. 실행할 체인은 SetupEffects로 미리 구성되어 있어야 합니다.

매개변수
InPhase현재 Phase.
InContextFactory매 틱마다 컨텍스트를 생성하는 팩토리 함수.
InOnCompleted체인 완료 시 호출될 콜백.
bInDebugMode디버그 로그 출력 여부.
58{
59 TArray<ULevelStreamingEffect*>* FoundChain = PhaseChains.Find(InPhase);
60 Chain = FoundChain ? *FoundChain : TArray<ULevelStreamingEffect*>();
61
62 Phase = InPhase;
63 ContextFactory = MoveTemp(InContextFactory);
64 OnCompleted = MoveTemp(InOnCompleted);
65 bDebugMode = bInDebugMode;
66 ChainIndex = 0;
67 bActive = true;
68
69 Process();
70}
void Process()
다음 실행 대상 이펙트를 결정하고 Start 이벤트를 호출하거나 완료 처리합니다.
Definition EffectChainExecutor.cpp:95
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Tick()

void FEffectChainExecutor::Tick ( float  DeltaTime)

현재 이펙트를 틱합니다. 완료 시 End 이벤트를 호출하고 다음 이펙트로 진행합니다.

매개변수
DeltaTime프레임 경과 시간.
74{
75 if (bActive == false || Chain.IsValidIndex(ChainIndex) == false)
76 {
77 return;
78 }
79
82
83 Effect->LastExecutionResult = DispatchUpdate(Effect, Context);
84
85 //TODO 만약에 추후 병렬적으로 이펙트를 수행해야될 경우, EffectGroup을 만들어, 한 번에 돌리는 방식으로 개선.
86 if (Effect->LastExecutionResult != ELevelStreamingEffectResult::InProgress)
87 {
88 DispatchEvent(Effect, ELevelStreamingEffectCallType::End, Context);
89 ChainIndex++;
90 Process();
91 }
92}
ELevelStreamingEffectResult LastExecutionResult
Definition LevelStreamingEffect.h:33
ELevelStreamingEffectResult DispatchUpdate(ULevelStreamingEffect *Effect, const FLevelStreamingContext &Context) const
Phase에 맞는 인터페이스로 Update를 디스패치하고 결과를 반환합니다.
Definition EffectChainExecutor.cpp:140
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ bActive

bool FEffectChainExecutor::bActive = false
private

체인 실행 중 여부.

◆ bDebugMode

bool FEffectChainExecutor::bDebugMode = false
private

디버그 로그 출력 여부.

◆ Chain

TArray<ULevelStreamingEffect*> FEffectChainExecutor::Chain
private

현재 실행 중인 이펙트 목록. Start 시 PhaseChains에서 복사됩니다.

◆ ChainIndex

int32 FEffectChainExecutor::ChainIndex = 0
private

현재 실행 중인 이펙트의 인덱스.

◆ ContextFactory

FContextFactory FEffectChainExecutor::ContextFactory
private

매 틱마다 컨텍스트를 생성하는 팩토리 함수.

◆ OnCompleted

FOnChainCompleted FEffectChainExecutor::OnCompleted
private

체인 완료 시 호출될 콜백.

◆ Phase

ELevelStreamingPhase FEffectChainExecutor::Phase = ELevelStreamingPhase::None
private

현재 Phase.

◆ PhaseChains

TMap<ELevelStreamingPhase, TArray<ULevelStreamingEffect*> > FEffectChainExecutor::PhaseChains
private

Phase별로 분류된 이펙트 체인 맵. SetupEffects 호출 시 구성됩니다.


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