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

#include <LSE_PlayCutscene.h>

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

Public 멤버 함수

virtual void OnLoadingStart (const FLevelStreamingContext Context) override
 
virtual ELevelStreamingEffectResult OnLoadingUpdate (const FLevelStreamingContext Context) override
 
virtual void OnLoadingEnd (const FLevelStreamingContext Context) override
 
- ULevelStreamingEffect(으)로부터 상속된 Public 멤버 함수
virtual void InitEffect ()
 
virtual void OnCompletedEffectsByPhase (const ELevelStreamingPhase CompletedPhase)
 
virtual void ExecuteUpdate (ELevelStreamingPhase Phase, const FLevelStreamingContext &Context)
 
virtual void CallPrepareOrFinishEvent (ELevelStreamingPhase Phase, ELevelStreamingEffectCallType CallType, const FLevelStreamingContext &Context)
 
FORCEINLINE ELevelStreamingEffectResult GetLastExecutionResult () const
 
FORCEINLINE bool IsSkipThisEffect () const
 

Public 속성

FUIContext CutsceneContext
 
int32 CutsceneID = 0
 
bool bUseTypewriter = false
 
float CharactersPerSecond = 40.0f
 

Protected 속성

TObjectPtr< UScenarioCutsceneWidgetScenarioCutsceneWidget
 
- ULevelStreamingEffect(으)로부터 상속된 Protected 속성
bool bSkipThisEffect = false
 
ELevelStreamingEffectResult LastExecutionResult = ELevelStreamingEffectResult::None
 

Private 멤버 함수

TArray< FDT_ScenarioCutsceneTableBuildCutsceneRows () const
 
void RestrictPlayerInput (const FLevelStreamingContext &Context)
 
void RestorePlayerInput (const FLevelStreamingContext &Context)
 

Private 속성

TWeakObjectPtr< UAbilitySystemComponent > RestrictedASC
 
TWeakObjectPtr< ACharacter > RestrictedCharacter
 
bool bCutsceneStarted = false
 

멤버 함수 문서화

◆ BuildCutsceneRows()

TArray< FDT_ScenarioCutsceneTable > ULSE_PlayCutscene::BuildCutsceneRows ( ) const
private
127{
128 TArray<FDT_ScenarioCutsceneTable> Result;
129
130 if (CutsceneID == 0)
131 {
132 LOG_WARNING(LogCKLevel, "재생할 CutsceneID가 설정되지 않았습니다.");
133 return Result;
134 }
135
136 UStageManifest* StageManifest = UDataBundleRegistry::GetBundleAssetByTag<UStageManifest>(TAG_BUNDLE_INITIAL);
137
138 if (StageManifest == nullptr)
139 {
140 LOG_WARNING(LogCKLevel, "%s를 찾을 수 없어 컷신 데이터를 만들 수 없습니다.", NAMEOF(UStageManifest));
141 return Result;
142 }
143
144 const UDataTable* ScenarioCutsceneTable = StageManifest->ScenarioCutsceneDataMap.LoadSynchronous();
145
146 if (ScenarioCutsceneTable == nullptr)
147 {
148 LOG_WARNING(LogCKLevel, "ScenarioCutsceneDataMap 로드 실패: DataTable이 nullptr입니다.");
149 return Result;
150 }
151
152 TArray<FDT_ScenarioCutsceneTable*> CutsceneRows;
153 ScenarioCutsceneTable->GetAllRows(TEXT("ULSE_PlayCutscene::BuildCutsceneRows"), CutsceneRows);
154
155 for (const FDT_ScenarioCutsceneTable* Row : CutsceneRows)
156 {
157 if (Row && Row->Cutscene_ID == CutsceneID)
158 {
159 Result.Add(*Row);
160 }
161 }
162
164 {
165 return (Left.Dialog_ID == Right.Dialog_ID ? Left.Group_ID < Right.Group_ID : Left.Dialog_ID < Right.Dialog_ID);
166 });
167
168 if (Result.IsEmpty())
169 {
170 LOG_WARNING(LogCKLevel, "Cutscene_ID '%d'에 해당하는 컷신 데이터가 없습니다.", CutsceneID);
171 }
172
173 return Result;
174}
#define NAMEOF(Type)
Definition CK_UE.h:30
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
int32 CutsceneID
Definition LSE_PlayCutscene.h:36
Definition StageManifest.h:161
TSoftObjectPtr< UDataTable > ScenarioCutsceneDataMap
Definition StageManifest.h:249
Definition DT_ScenarioCutsceneTable.h:10
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnLoadingEnd()

void ULSE_PlayCutscene::OnLoadingEnd ( const FLevelStreamingContext  Context)
overridevirtual

ILevelLoadingInterface를 구현.

94{
95 RestorePlayerInput(Context);
96
97 if (ScenarioCutsceneWidget == nullptr)
98 {
99 return;
100 }
101
102 if (Context.OriginalWorld == nullptr)
103 {
104 ScenarioCutsceneWidget = nullptr;
105 return;
106 }
107
108 UGameInstance* GI = Context.OriginalWorld->GetGameInstance();
109
110 if (GI == nullptr)
111 {
112 ScenarioCutsceneWidget = nullptr;
113 return;
114 }
115
116 if (UUIManagementSubsystem* UISubsystem = GI->GetSubsystem<UUIManagementSubsystem>())
117 {
118 UISubsystem->PopWidget(ScenarioCutsceneWidget);
119 }
120
121 ScenarioCutsceneWidget = nullptr;
122 bCutsceneStarted = false;
123}
void RestorePlayerInput(const FLevelStreamingContext &Context)
Definition LSE_PlayCutscene.cpp:223
TObjectPtr< UScenarioCutsceneWidget > ScenarioCutsceneWidget
Definition LSE_PlayCutscene.h:46
bool bCutsceneStarted
Definition LSE_PlayCutscene.h:56
Definition UIManagementSubsystem.h:22
TObjectPtr< UWorld > OriginalWorld
Definition LevelStreamingContext.h:27
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLoadingStart()

void ULSE_PlayCutscene::OnLoadingStart ( const FLevelStreamingContext  Context)
overridevirtual

ILevelLoadingInterface를 구현.

20{
21 if (Context.OriginalWorld == nullptr)
22 {
23 LOG_WARNING(LogCKLevel, "OriginalWorld가 없어 컷신을 시작할 수 없습니다.");
24 return;
25 }
26
27 ScenarioCutsceneWidget = nullptr;
28 bCutsceneStarted = false;
29
31
32 if (UISubsystem == nullptr)
33 {
34 LOG_WARNING(LogCKLevel, "%s를 찾을 수 없어 컷신을 시작할 수 없습니다.", NAMEOF(UUIManagementSubsystem));
35 return;
36 }
37
38 UUILayer* OutLayer = nullptr;
39 FUIContext ScenarioCutsceneContext = CutsceneContext;
40 ScenarioCutsceneContext.Primary = true;
41
42 UUserWidgetBase* Widget = UISubsystem->PushPlayerWidget(ScenarioCutsceneContext, OutLayer);
43 ScenarioCutsceneWidget = Cast<UScenarioCutsceneWidget>(Widget);
44
46 {
47 RestrictPlayerInput(Context);
50 bCutsceneStarted = true;
51 return;
52 }
53
54 LOG_WARNING(LogCKLevel, "%s를 생성하지 못했습니다.", NAMEOF(UScenarioCutsceneWidget));
55
56 if (Widget)
57 {
58 UISubsystem->PopWidget(Widget);
59 }
60 else
61 {
62 LOG_ERROR(LogCK, "%s이 Nullptr 입니다. ", NAMEOF_VAR(Widget));
63 }
64}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
#define NAMEOF_VAR(Expr)
Definition CK_UE.h:34
static UUIManagementSubsystem * GetUIManagementSubsystem(const UObject *WorldContextObject)
Definition CK_BPFunctionLibrary.cpp:138
bool bUseTypewriter
Definition LSE_PlayCutscene.h:39
float CharactersPerSecond
Definition LSE_PlayCutscene.h:42
void RestrictPlayerInput(const FLevelStreamingContext &Context)
Definition LSE_PlayCutscene.cpp:177
FUIContext CutsceneContext
Definition LSE_PlayCutscene.h:33
TArray< FDT_ScenarioCutsceneTable > BuildCutsceneRows() const
Definition LSE_PlayCutscene.cpp:126
Definition ScenarioCutsceneWidget.h:30
Definition UILayer.h:14
UUserWidgetBase * PushPlayerWidget(const FUIContext &Context, UUILayer *&OutLayer)
Definition UIManagementSubsystem.cpp:112
bool PopWidget(UUserWidgetBase *Widget)
Definition UIManagementSubsystem.cpp:168
Definition UserWidgetBase.h:33
Definition UIContext.h:10
bool Primary
Definition UIContext.h:28
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnLoadingUpdate()

ELevelStreamingEffectResult ULSE_PlayCutscene::OnLoadingUpdate ( const FLevelStreamingContext  Context)
overridevirtual

ILevelLoadingInterface를 구현.

68{
69 if (bCutsceneStarted == false)
70 {
71 LOG_ERROR(LogCK, "%s 컷신이 시작되지 않았습니다. ", NAMEOF_VAR(bCutsceneStarted));
72 return ELevelStreamingEffectResult::Completed;
73 }
74
75 if (ScenarioCutsceneWidget == nullptr)
76 {
77 LOG_ERROR(LogCK, "%s 이 Nullptr 입니다. ", NAMEOF_VAR(ScenarioCutsceneWidget));
78 return ELevelStreamingEffectResult::Completed;
79 }
80
81 if (ScenarioCutsceneWidget->IsCutsceneFinished())
82 {
83 LOG_INFO(LogCK, "컷씬이 완료되었습니다. ");
84 return ELevelStreamingEffectResult::Completed;
85 }
86 else
87 {
88 return ELevelStreamingEffectResult::InProgress;
89 }
90}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38

◆ RestorePlayerInput()

void ULSE_PlayCutscene::RestorePlayerInput ( const FLevelStreamingContext Context)
private
224{
225 if (RestrictedASC.IsValid())
226 {
227 RestrictedASC->RemoveLooseGameplayTag(TAG_CHARACTER_STATE_ISBLOCKMOVEMENT);
228 RestrictedASC->RemoveLooseGameplayTag(TAG_CHARACTER_STATE_ISBLOCKINPUT);
229 RestrictedASC.Reset();
230 }
231
232 if (!RestrictedCharacter.IsValid())
233 {
234 return;
235 }
236
237 if (UCharacterMovementComponent* MovementComponent = RestrictedCharacter->GetCharacterMovement())
238 {
239 MovementComponent->SetMovementMode(MOVE_Walking);
240 }
241
242 RestrictedCharacter.Reset();
243}
TWeakObjectPtr< ACharacter > RestrictedCharacter
Definition LSE_PlayCutscene.h:55
TWeakObjectPtr< UAbilitySystemComponent > RestrictedASC
Definition LSE_PlayCutscene.h:54
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RestrictPlayerInput()

void ULSE_PlayCutscene::RestrictPlayerInput ( const FLevelStreamingContext Context)
private
178{
179 if (Context.PlayerController == nullptr)
180 {
181 LOG_WARNING(LogCKLevel, "PlayerController가 없어 컷신 중 입력 제한을 적용할 수 없습니다.");
182 return;
183 }
184
185 ACharacter* Character = Cast<ACharacter>(Context.PlayerController->GetPawn());
186
187 if (Character == nullptr)
188 {
189 LOG_WARNING(LogCKLevel, "플레이어 캐릭터를 얻어올 수 없어 컷신 중 입력 제한을 적용할 수 없습니다.");
190 return;
191 }
192
193 RestrictedCharacter = Character;
194
195 if (UCharacterMovementComponent* MovementComponent = Character->GetCharacterMovement())
196 {
197 MovementComponent->DisableMovement();
198 }
199
200 IAbilitySystemInterface* ASI = Cast<IAbilitySystemInterface>(Character);
201
202 if (ASI == nullptr)
203 {
204 LOG_WARNING(LogCKLevel, "%s을 얻어올 수 없어 컷신 중 GAS 입력 제한을 적용할 수 없습니다.", NAMEOF(IAbilitySystemInterface));
205 return;
206 }
207
208 UAbilitySystemComponent* ASC = ASI->GetAbilitySystemComponent();
209
210 if (ASC == nullptr)
211 {
212 LOG_WARNING(LogCKLevel, "%s을 얻어올 수 없어 컷신 중 GAS 입력 제한을 적용할 수 없습니다.", NAMEOF(UAbilitySystemComponent));
213 return;
214 }
215
216 RestrictedASC = ASC;
217 ASC->AddLooseGameplayTag(TAG_CHARACTER_STATE_ISBLOCKMOVEMENT);
218 ASC->AddLooseGameplayTag(TAG_CHARACTER_STATE_ISBLOCKINPUT);
219 ASC->CancelAllAbilities();
220}
TObjectPtr< APlayerController > PlayerController
Definition LevelStreamingContext.h:39
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ bCutsceneStarted

bool ULSE_PlayCutscene::bCutsceneStarted = false
private

◆ bUseTypewriter

bool ULSE_PlayCutscene::bUseTypewriter = false

◆ CharactersPerSecond

float ULSE_PlayCutscene::CharactersPerSecond = 40.0f

◆ CutsceneContext

FUIContext ULSE_PlayCutscene::CutsceneContext

◆ CutsceneID

int32 ULSE_PlayCutscene::CutsceneID = 0

◆ RestrictedASC

TWeakObjectPtr<UAbilitySystemComponent> ULSE_PlayCutscene::RestrictedASC
private

◆ RestrictedCharacter

TWeakObjectPtr<ACharacter> ULSE_PlayCutscene::RestrictedCharacter
private

◆ ScenarioCutsceneWidget

TObjectPtr<UScenarioCutsceneWidget> ULSE_PlayCutscene::ScenarioCutsceneWidget
protected

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