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

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

#include <LevelStreamingEffect.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 이벤트를 호출하거나 완료 처리합니다.
 

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 체인 맵과 현재 실행 체인을 모두 초기화합니다.

43{
44 PhaseChains.Reset();
45 Chain.Reset();
46}
TArray< ULevelStreamingEffect * > Chain
현재 실행 중인 이펙트 목록. Start 시 PhaseChains에서 복사됩니다.
Definition LevelStreamingEffect.h:96
TMap< ELevelStreamingPhase, TArray< ULevelStreamingEffect * > > PhaseChains
Phase별로 분류된 이펙트 체인 맵. SetupEffects 호출 시 구성됩니다.
Definition LevelStreamingEffect.h:93

◆ GetChainIndex()

int32 FEffectChainExecutor::GetChainIndex ( ) const
inline

현재 ChainIndex를 반환합니다.

79 {
80 return ChainIndex;
81 }
int32 ChainIndex
현재 실행 중인 이펙트의 인덱스.
Definition LevelStreamingEffect.h:99

◆ GetPhase()

ELevelStreamingPhase FEffectChainExecutor::GetPhase ( ) const
inline

현재 Phase를 반환합니다.

73 {
74 return Phase;
75 }
ELevelStreamingPhase Phase
현재 Phase.
Definition LevelStreamingEffect.h:102

◆ IsActive()

bool FEffectChainExecutor::IsActive ( ) const
inline

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

67 {
68 return bActive;
69 }
bool bActive
체인 실행 중 여부.
Definition LevelStreamingEffect.h:111
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Process()

void FEffectChainExecutor::Process ( )
private

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

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

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

◆ SetupEffects()

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

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

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

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

◆ Start()

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

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

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

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

◆ Tick()

void FEffectChainExecutor::Tick ( float  DeltaTime)

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

매개변수
DeltaTime프레임 경과 시간.
72{
73 if (bActive == false || Chain.IsValidIndex(ChainIndex) == false)
74 {
75 return;
76 }
77
80
81 Effect->ExecuteUpdate(Phase, Context);
82
83 if (Effect->GetLastExecutionResult() == ELevelStreamingEffectResult::InProgress)
84 {
85 return;
86 }
87
88 //TODO 만약에 추후 병렬적으로 이펙트를 수행해야될 경우, EffectGroup을 만들어, 한 번에 돌리는 방식으로 개선.
89 Effect->CallPrepareOrFinishEvent(Phase, ELevelStreamingEffectCallType::End, Context);
90 ChainIndex++;
91 Process();
92}
FORCEINLINE ELevelStreamingEffectResult GetLastExecutionResult() const
Definition LevelStreamingEffect.h:141
virtual void CallPrepareOrFinishEvent(ELevelStreamingPhase Phase, ELevelStreamingEffectCallType CallType, const FLevelStreamingContext &Context)
Definition LevelStreamingEffect.cpp:194
virtual void ExecuteUpdate(ELevelStreamingPhase Phase, const FLevelStreamingContext &Context)
Definition LevelStreamingEffect.cpp:138
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ 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 호출 시 구성됩니다.


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