Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
UStageEventProcessor 클래스 참조

#include <StageEventProcessor.h>

UStageEventProcessor에 대한 상속 다이어그램 :
Inheritance graph
UStageEventProcessor에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

void Process (UStageManagementSubsystem *StageManagement, const FName EventID, const AActor *Caller, const AActor *InteractableActor, const FStageEventContext &Context)
 
EStageEvent GetStageEvent () const
 

Public 속성

FName ProcessorID = NAME_None
 
int32 MaxTriggerCount = 1
 

Protected 멤버 함수

void OnProcessEvent (const FName EventID, const AActor *Caller, const AActor *InteractableActor, const FStageEventContext &Context)
 

Protected 속성

TSet< EListenerSlotIgnoredSlots
 

Private 멤버 함수

int32 ProcessProcessorTrigger (UStageManagementSubsystem *StageManagement, FName EventID, const AActor *Caller)
 Processor 발동 횟수 증가와 발동 알림을 처리한다.
 
int32 ProcessProcessorTriggerWithoutRecord (UStageManagementSubsystem *StageManagement, FName EventID, const AActor *Caller)
 Command 기록 없이 Processor 발동을 즉시 반영한다.
 

멤버 함수 문서화

◆ GetStageEvent()

EStageEvent UStageEventProcessor::GetStageEvent ( ) const
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnProcessEvent()

void UStageEventProcessor::OnProcessEvent ( const FName  EventID,
const AActor *  Caller,
const AActor *  InteractableActor,
const FStageEventContext Context 
)
protected
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Process()

void UStageEventProcessor::Process ( UStageManagementSubsystem StageManagement,
const FName  EventID,
const AActor *  Caller,
const AActor *  InteractableActor,
const FStageEventContext Context 
)
14{
15 checkf(StageManagement, TEXT("%s 가 nullptr 입니다. "), NAMEOF(UStageManagementSubsystem));
16 const int32 CurrentCount = StageManagement->GetProcessorTriggerCount(this);
17
18 if (CurrentCount >= MaxTriggerCount)
19 {
21 (
22 FColor::Orange,
23 "[StageEvent] Skipped (limit) EventID = %s ProcessorID = %s (%d/%d)",
24 *EventID.ToString(),
25 *(ProcessorID.IsNone() ? TEXT("None") : ProcessorID.ToString()),
26 CurrentCount,
28 );
29
30 return;
31 }
32
33 const int32 NewCount = ProcessProcessorTrigger(StageManagement, EventID, Caller);
34 FStageEventContext FilteredContext;
35
36 for (AActor* Actor : Context.ValidListeners)
37 {
38 IStageEventListenerInterface* Listener = Cast<IStageEventListenerInterface>(Actor);
39
40 if (Listener == nullptr)
41 {
42 continue;
43 }
44
45 if (Listener->GetStageEvent() != GetStageEvent())
46 {
47 continue;
48 }
49
50 const EListenerSlot Slot = Listener->GetSlotForEvent(EventID);
51
52 if (Slot == EListenerSlot::None)
53 {
54 FilteredContext.ValidListeners.Add(Actor);
55 continue;
56 }
57
58 if (IgnoredSlots.Contains(Slot))
59 {
60 continue;
61 }
62
63 FilteredContext.ValidListeners.Add(Actor);
64
65 const TObjectPtr<AActor>* FoundActor = Context.ValidListenersBySlot.Find(Slot);
66
67 if (FoundActor == nullptr || FoundActor->Get() != Actor)
68 {
69 continue;
70 }
71
72 FilteredContext.ValidListenersBySlot.Add(Slot, Actor);
73 }
74
76 (
77 FColor::Cyan,
78 "[StageEvent] %-9s EventID = %-16s ProcessorID = %-20s ListenerCount = %d (%d/%d)",
79 TEXT("Deliver"),
80 *EventID.ToString(),
81 *(ProcessorID.IsNone() ? TEXT("None") : ProcessorID.ToString()),
82 FilteredContext.ValidListeners.Num(),
83 NewCount,
85 );
86
87 OnProcessEvent(EventID, Caller, InteractableActor, FilteredContext);
88}
#define LOG_SCREEN_C(Color, Format,...)
Definition CK_UE.h:49
#define NAMEOF(Type)
Definition CK_UE.h:30
EListenerSlot
Definition EStageEventEnums.h:29
Definition StageEventListenerInterface.h:24
virtual EListenerSlot GetSlotForEvent(const FName EventID) const
Definition StageEventListenerInterface.h:32
virtual EStageEvent GetStageEvent() const =0
TSet< EListenerSlot > IgnoredSlots
Definition StageEventProcessor.h:79
EStageEvent GetStageEvent() const
int32 ProcessProcessorTrigger(UStageManagementSubsystem *StageManagement, FName EventID, const AActor *Caller)
Processor 발동 횟수 증가와 발동 알림을 처리한다.
Definition StageEventProcessor.cpp:103
void OnProcessEvent(const FName EventID, const AActor *Caller, const AActor *InteractableActor, const FStageEventContext &Context)
int32 MaxTriggerCount
Definition StageEventProcessor.h:75
FName ProcessorID
Definition StageEventProcessor.h:70
Definition StageManagementSubsystem.h:147
int32 GetProcessorTriggerCount(const UStageEventProcessor *Processor) const
Definition StageManagementSubsystem.cpp:399
Definition StageEventContext.h:18
TArray< TObjectPtr< AActor > > ValidListeners
Definition StageEventContext.h:23
TMap< EListenerSlot, TObjectPtr< AActor > > ValidListenersBySlot
Definition StageEventContext.h:26
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ProcessProcessorTrigger()

int32 UStageEventProcessor::ProcessProcessorTrigger ( UStageManagementSubsystem StageManagement,
FName  EventID,
const AActor *  Caller 
)
private

Processor 발동 횟수 증가와 발동 알림을 처리한다.

SnapshotSubsystem을 사용할 수 있으면 UProcessorTriggerCommand로 실행해 롤백 가능 상태로 기록한다. Subsystem 접근 실패 또는 Command 실행 실패 시에는 이벤트 진행이 누락되지 않도록 직접 처리 경로로 fallback한다.

매개변수
StageManagement발동 횟수와 Processor 알림을 관리하는 월드 서브시스템.
EventID현재 처리 중인 Storyboard Event ID.
Caller이벤트를 발생시킨 액터.
반환값
실제 처리 후 Processor 발동 횟수.
104{
105 checkf(StageManagement, TEXT("%s 가 nullptr 입니다. "), NAMEOF(UStageManagementSubsystem));
106
107 UProcessorTriggerCommand* Command = USnapshotSubsystem::ProcessNewCommand<UProcessorTriggerCommand>(StageManagement, [StageManagement, this, EventID, Caller](UProcessorTriggerCommand* NewCommand)
108 {
109 NewCommand->Initialize(StageManagement, this, EventID, Caller);
110 });
111
112 if (Command)
113 {
114 return Command->GetTriggerCountAfterProcess();
115 }
116
117 // SnapshotSubsystem 사용 불가 또는 커맨드 실행 실패 시 이벤트 진행이 누락되지 않도록 직접 처리한다.
118 return ProcessProcessorTriggerWithoutRecord(StageManagement, EventID, Caller);
119}
Definition ProcessorTriggerCommand.h:14
void Initialize(UStageManagementSubsystem *InStageManagement, UStageEventProcessor *InProcessor, FName InEventID, const AActor *InCaller)
Definition ProcessorTriggerCommand.cpp:9
FORCEINLINE int32 GetTriggerCountAfterProcess() const
Definition ProcessorTriggerCommand.h:22
int32 ProcessProcessorTriggerWithoutRecord(UStageManagementSubsystem *StageManagement, FName EventID, const AActor *Caller)
Command 기록 없이 Processor 발동을 즉시 반영한다.
Definition StageEventProcessor.cpp:122
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ProcessProcessorTriggerWithoutRecord()

int32 UStageEventProcessor::ProcessProcessorTriggerWithoutRecord ( UStageManagementSubsystem StageManagement,
FName  EventID,
const AActor *  Caller 
)
private

Command 기록 없이 Processor 발동을 즉시 반영한다.

SnapshotSubsystem을 사용할 수 없는 구간에서도 StageEvent 진행이 멈추지 않도록 사용하는 fallback 경로다.

매개변수
StageManagement발동 횟수와 Processor 알림을 관리하는 월드 서브시스템.
EventID현재 처리 중인 Storyboard Event ID.
Caller이벤트를 발생시킨 액터.
반환값
증가 후 Processor 발동 횟수.
123{
124 checkf(StageManagement, TEXT("%s 가 nullptr 입니다. "), NAMEOF(UStageManagementSubsystem));
125 const int32 NewCount = StageManagement->IncrementProcessorTriggerCount(this);
126 StageManagement->NotifyProcessorTriggered(EventID, Caller, this);
127 return NewCount;
128}
int32 IncrementProcessorTriggerCount(const UStageEventProcessor *Processor)
Definition StageManagementSubsystem.cpp:417
void NotifyProcessorTriggered(const FName EventID, const AActor *Caller, const UStageEventProcessor *Processor)
Definition StageManagementSubsystem.cpp:455
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ IgnoredSlots

TSet<EListenerSlot> UStageEventProcessor::IgnoredSlots
protected

◆ MaxTriggerCount

int32 UStageEventProcessor::MaxTriggerCount = 1

◆ ProcessorID

FName UStageEventProcessor::ProcessorID = NAME_None

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