KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPopup_Result 클래스 참조

#include <Popup_Result.h>

+ UPopup_Result에 대한 상속 다이어그램 :
+ UPopup_Result에 대한 협력 다이어그램:

Public 멤버 함수

void InitPopup (EQuestType InQuestType)
 
virtual void NativeDestruct () override
 
virtual void NativeTick (const FGeometry &MyGeometry, float InDeltaTime) override
 
void OpenAnimation ()
 팝업 오픈 애니메이션을 재생합니다
 

Public 속성

bool bAllowPlayerControl = false
 이 팝업이 활성화되어 있을 때 플레이어 조작을 허용할지 여부
 

Protected 멤버 함수

void UpdateAnimation (float InDeltaTime)
 스크립트 오픈 애니메이션 업데이트
 

Protected 속성

bool bIsOpenAnim = false
 애니메이션 재생 중 여부
 
UWidgetAnimation * BlueprintOpenAnimation
 블루프린트에서 정의한 오픈 애니메이션
 
TObjectPtr< class UImageButtonBtn_Confirm
 
TObjectPtr< class UImage > Image_Symbol
 
EGameSoundType OpenAnimSound = EGameSoundType::UI_PopupOpen
 팝업 오픈 시 재생될 사운드 타입
 
float OpenDuration = 0.2f
 애니메이션 지속 시간
 
EEaseType OpenEaseType = EEaseType::EaseOutBack
 Easing 타입
 
float OpenElapsedTime = 0.0f
 경과 시간
 
FVector2D OpenPivot = FVector2D(0.5f, 0.5f)
 애니메이션 중심점 (0~1 범위)
 
float OpenStartScale = 0.8f
 시작 스케일
 
float OpenTargetScale = 1.0f
 목표 스케일
 
EPopupType PopupType
 
TObjectPtr< class UResultStatWidgetResult_AverageScore
 
TObjectPtr< class UResultStatWidgetResult_Grade
 
TObjectPtr< class UResultStatWidgetResult_Time
 
TObjectPtr< class UResultStatWidgetResult_TopRate
 
TObjectPtr< class UTextBlock > Txt_Eng
 
TObjectPtr< class UTextBlock > Txt_Kor
 
TObjectPtr< class UTextBlock > Txt_Title
 
TObjectPtr< class UVerticalBox > VerticalBox
 

Private 멤버 함수

void InitListenResult (const FResponseListenResult &ResponseData)
 
void InitReadResult (const FResponseReadResult &ResponseData)
 
void InitWordWidget ()
 
void InitWrongList ()
 
void OnClickClose ()
 
void OnResponseListenResult (FResponseListenResult &ResponseData, bool bWasSuccessful)
 
void OnResponseReadResult (FResponseReadResult &ResponseData, bool bWasSuccessful)
 
void RequestResult ()
 

Private 속성

TSubclassOf< class UAnswerItemAnswerItemClass
 
EQuestType QuestType
 

상세한 설명

Popup_Result.h 파일의 15 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ InitListenResult()

void UPopup_Result::InitListenResult ( const FResponseListenResult ResponseData)
private

Popup_Result.cpp 파일의 221 번째 라인에서 정의되었습니다.

222{
223 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
224 {
225 // Symbol로 타임 처리
226 auto TimeTaken = GS->GetTimeTaken();
227 const int32 Minutes = FMath::FloorToInt(TimeTaken / 60.f);
228 const int32 Seconds = FMath::FloorToInt(TimeTaken) % 60;
229
230 FResultStatData TimeResultData;
232 TimeResultData.ColorType = EColorStyleType::Gray;
233 TimeResultData.TitleText = FText::FromString(TEXT("TIME"));
235 TimeResultData.SymbolValue = FString::Printf(TEXT("%02d:%02d"), Minutes, Seconds);
236 Result_Time->InitData(TimeResultData);
237 }
238
239 FResultStatData GradeResultData;
241 GradeResultData.ColorType = EColorStyleType::Gray;
242 GradeResultData.TitleText = FText::FromString(TEXT("GRADE"));
243 GradeResultData.GradeTextureType = ULingoGameHelper::ConvertGradeString(ResponseData.grade);
244 Result_Grade->InitData(GradeResultData);
245
246 FResultStatData TopRateResultData;
247 TopRateResultData.WidgetType = EResultItemWidgetType::Rate;
248 TopRateResultData.ColorType = EColorStyleType::Gray;
249 TopRateResultData.TitleText = FText::FromString(TEXT("TOP"));
250 TopRateResultData.RatePercent = ResponseData.top_percent;
251 Result_TopRate->InitData(TopRateResultData);
252
253 FResultStatData AverageScoreResultData;
254 AverageScoreResultData.WidgetType = EResultItemWidgetType::Symbol;
255 AverageScoreResultData.ColorType = EColorStyleType::Gray;
256 AverageScoreResultData.TitleText = FText::FromString(TEXT("SCORE"));
257 AverageScoreResultData.SymbolTextureType = EResourceTextureType::Score;
258 AverageScoreResultData.SymbolValue = FString::Printf(TEXT("%d"), static_cast<int>(ResponseData.average_score));
259 Result_AverageScore->InitData(AverageScoreResultData);
260}
static EResourceTextureType ConvertGradeString(const FString &Grade)
TObjectPtr< class UResultStatWidget > Result_Time
TObjectPtr< class UResultStatWidget > Result_Grade
TObjectPtr< class UResultStatWidget > Result_AverageScore
TObjectPtr< class UResultStatWidget > Result_TopRate
Result Stat 위젯 통합 데이터 구조 위젯 타입, 색상 스타일, 각 타입별 데이터를 통합 관리
EResourceTextureType SymbolTextureType
Symbol 타입 전용: 심볼 문자열
float RatePercent
Rate 타입 전용: 퍼센트 값 (0.0 ~ 1.0)
EColorStyleType ColorType
색상 스타일
FText TitleText
타이틀 텍스트
EResultItemWidgetType WidgetType
위젯 타입
EResourceTextureType GradeTextureType
Grade 타입 전용: 텍스처 타입

다음을 참조함 : FResponseListenResult::average_score, FResultStatData::ColorType, ULingoGameHelper::ConvertGradeString(), Grade, FResponseListenResult::grade, FResultStatData::GradeTextureType, Gray, Rate, FResultStatData::RatePercent, Result_AverageScore, Result_Grade, Result_Time, Result_TopRate, Score, Symbol, FResultStatData::SymbolTextureType, FResultStatData::SymbolValue, Time, FResultStatData::TitleText, FResponseListenResult::top_percent, FResultStatData::WidgetType.

다음에 의해서 참조됨 : InitPopup(), OnResponseListenResult().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ InitPopup()

void UPopup_Result::InitPopup ( EQuestType  InQuestType)

Popup_Result.cpp 파일의 32 번째 라인에서 정의되었습니다.

33{
34 // 결과 팝업이 뜰 때 MissionTimer 멈추기
35 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
36 {
37 GS->StopMissionTimer();
38 }
39
40 if (Btn_Confirm)
41 {
42 Btn_Confirm->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_Result::OnClickClose);
43 Btn_Confirm->OnButtonClickedEvent.AddDynamic(this, &UPopup_Result::OnClickClose);
44 }
45
46 this->QuestType =InQuestType;
47
50
51 // GameState에서 결과 확인
52 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
53 {
55 {
56 GS->OnReadResultUpdated.RemoveDynamic(this, &UPopup_Result::InitReadResult);
57 GS->OnReadResultUpdated.AddDynamic(this, &UPopup_Result::InitReadResult);
58 }
59 else if (QuestType == EQuestType::Listen)
60 {
61 GS->OnListenResultUpdated.RemoveDynamic(this, &UPopup_Result::InitListenResult);
62 GS->OnListenResultUpdated.AddDynamic(this, &UPopup_Result::InitListenResult);
63 }
64
65 bool bHasResult = false;
66
67 if (QuestType == EQuestType::Read && !GS->ReadResult.grade.IsEmpty())
68 {
69 // 이미 결과가 있으면 바로 표시
70 PRINTLOG(TEXT("[Popup_Result] Read result already exists in GameState"));
71 InitReadResult(GS->ReadResult);
72 bHasResult = true;
73 }
74 else if (QuestType == EQuestType::Listen && !GS->ListenResult.grade.IsEmpty())
75 {
76 // 이미 결과가 있으면 바로 표시
77 PRINTLOG(TEXT("[Popup_Result] Listen result already exists in GameState"));
78 InitListenResult(GS->ListenResult);
79 bHasResult = true;
80 }
81
82 // 결과가 없으면 Host만 요청
83 if (!bHasResult && GetOwningPlayer()->HasAuthority())
84 {
86 }
87 }
88}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
EQuestType QuestType
void InitListenResult(const FResponseListenResult &ResponseData)
void InitReadResult(const FResponseReadResult &ResponseData)
TObjectPtr< class UImageButton > Btn_Confirm

다음을 참조함 : Btn_Confirm, InitListenResult(), InitReadResult(), InitWordWidget(), InitWrongList(), Listen, OnClickClose(), PRINTLOG, QuestType, Read, RequestResult().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ InitReadResult()

void UPopup_Result::InitReadResult ( const FResponseReadResult ResponseData)
private

Popup_Result.cpp 파일의 180 번째 라인에서 정의되었습니다.

181{
182 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
183 {
184 // Symbol로 타임 처리
185 auto TimeTaken = GS->GetTimeTaken();
186 const int32 Minutes = FMath::FloorToInt(TimeTaken / 60.f);
187 const int32 Seconds = FMath::FloorToInt(TimeTaken) % 60;
188
189 FResultStatData TimeResultData;
191 TimeResultData.ColorType = EColorStyleType::Gray;
192 TimeResultData.TitleText = FText::FromString(TEXT("Time"));
194 TimeResultData.SymbolValue = FString::Printf(TEXT("%02d:%02d"), Minutes, Seconds);
195 Result_Time->InitData(TimeResultData);
196 }
197
198 FResultStatData GradeResultData;
200 GradeResultData.ColorType = EColorStyleType::Gray;
201 GradeResultData.TitleText = FText::FromString(TEXT("Grade"));
202 GradeResultData.GradeTextureType = ULingoGameHelper::ConvertGradeString(ResponseData.grade);
203 Result_Grade->InitData(GradeResultData);
204
205 FResultStatData TopRateResultData;
206 TopRateResultData.WidgetType = EResultItemWidgetType::Rate;
207 TopRateResultData.ColorType = EColorStyleType::Gray;
208 TopRateResultData.TitleText = FText::FromString(TEXT("Rate"));
209 TopRateResultData.RatePercent = ResponseData.top_percent;
210 Result_TopRate->InitData(TopRateResultData);
211
212 FResultStatData AverageScoreResultData;
213 AverageScoreResultData.WidgetType = EResultItemWidgetType::Symbol;
214 AverageScoreResultData.ColorType = EColorStyleType::Gray;
215 AverageScoreResultData.TitleText = FText::FromString(TEXT("Score"));
216 AverageScoreResultData.SymbolTextureType = EResourceTextureType::Score;
217 AverageScoreResultData.SymbolValue = FString::Printf(TEXT("%d"), static_cast<int>(ResponseData.average_score));
218 Result_AverageScore->InitData(AverageScoreResultData);
219}

다음을 참조함 : FResponseReadResult::average_score, FResultStatData::ColorType, ULingoGameHelper::ConvertGradeString(), Grade, FResponseReadResult::grade, FResultStatData::GradeTextureType, Gray, Rate, FResultStatData::RatePercent, Result_AverageScore, Result_Grade, Result_Time, Result_TopRate, Score, Symbol, FResultStatData::SymbolTextureType, FResultStatData::SymbolValue, Time, FResultStatData::TitleText, FResponseReadResult::top_percent, FResultStatData::WidgetType.

다음에 의해서 참조됨 : InitPopup(), OnResponseReadResult().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ InitWordWidget()

void UPopup_Result::InitWordWidget ( )
private

Popup_Result.cpp 파일의 101 번째 라인에서 정의되었습니다.

102{
103 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
104 {
106 {
107 Txt_Kor->SetText(FText::FromString(GS->ReadScenarioData.full_data.Kor));
108 Txt_Eng->SetText(FText::FromString(GS->ReadScenarioData.full_data.Eng));
109
110 Txt_Title->SetText(FText::FromString(TEXT("Read Quest")));
111 if (UTexture2D* Texture = UGameDataManager::Get(this)->GetTexture(EResourceTextureType::Read))
112 Image_Symbol->SetBrushFromTexture(Texture);
113 }
114 else if ( QuestType == EQuestType::Listen )
115 {
116 Txt_Kor->SetText(FText::FromString(GS->ListenScenarioData.full_data.Kor));
117 Txt_Eng->SetText(FText::FromString(GS->ListenScenarioData.full_data.Eng));
118
119 Txt_Title->SetText(FText::FromString(TEXT("Listen Quest")));
120 if (UTexture2D* Texture = UGameDataManager::Get(this)->GetTexture(EResourceTextureType::Listen))
121 Image_Symbol->SetBrushFromTexture(Texture);
122 }
123 }
124}
TObjectPtr< class UTextBlock > Txt_Title
TObjectPtr< class UTextBlock > Txt_Eng
TObjectPtr< class UImage > Image_Symbol
TObjectPtr< class UTextBlock > Txt_Kor

다음을 참조함 : Image_Symbol, Listen, QuestType, Read, Txt_Eng, Txt_Kor, Txt_Title.

다음에 의해서 참조됨 : InitPopup().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ InitWrongList()

void UPopup_Result::InitWrongList ( )
private

Popup_Result.cpp 파일의 126 번째 라인에서 정의되었습니다.

127{
128 ALingoGameState* GS = Cast<ALingoGameState>(GetWorld()->GetGameState());
129 if (!GS)
130 return;
131
132 // 틀린 인덱스 리스트
133 TArray<int32> WrongList;
134 // 전체 캐리어 정보
135 TArray<FScenarioTargetData> ScenarioData;
136 FScenarioTargetData CorrectData;
137
139 {
140 WrongList = GS->WrongReadAnswerList;
141 ScenarioData = GS->GetReadScenarioData().target_data;
142 CorrectData = GS->GetReadScenarioData().GetCorrectAnswerData();
143 }
144 else if ( QuestType == EQuestType::Listen )
145 {
146 WrongList = GS->WrongListenAnswerList;
147 ScenarioData = GS->TryListenAnswerData.target_data;
148 CorrectData = GS->GetListenScenarioData().GetCorrectAnswerData();
149 }
150
151 // 기존 항목 제거
152 VerticalBox->ClearChildren();
153 // WrongList의 각 항목을 UAnswerItem으로 추가
154 for (int32 i = 0; i < WrongList.Num(); i++)
155 {
156 const FScenarioTargetData& SD = ScenarioData[WrongList[i]];
157
158 // UAnswerItem 위젯 생성
159 if (AnswerItemClass)
160 {
161 UAnswerItem* AnswerItem = CreateWidget<UAnswerItem>(this, AnswerItemClass);
162 if (AnswerItem)
163 {
164 // AnswerItem 초기화
165 AnswerItem->InitInfo(QuestType, i + 1, SD, CorrectData);
166
167 // HorizontalBox에 추가
168 VerticalBox->AddChild(AnswerItem);
169
170 {
171 USpacer* Spacer = NewObject<USpacer>(VerticalBox);
172 Spacer->SetSize(FVector2D(1.f, 10.f));
173 VerticalBox->AddChild(Spacer);
174 }
175 }
176 }
177 }
178}
TArray< int32 > WrongListenAnswerList
FORCEINLINE const FResponseListenScenario & GetListenScenarioData() const
FResponseListenScenario TryListenAnswerData
TArray< int32 > WrongReadAnswerList
FORCEINLINE const FResponseReadScenario & GetReadScenarioData() const
void InitInfo(EQuestType QuestType, int32 InOrder, FScenarioTargetData TargetData, FScenarioTargetData CorrectData)
TObjectPtr< class UVerticalBox > VerticalBox
TSubclassOf< class UAnswerItem > AnswerItemClass
FScenarioTargetData GetCorrectAnswerData() const
TArray< FScenarioTargetData > target_data
FScenarioTargetData GetCorrectAnswerData() const
TArray< FScenarioTargetData > target_data
Scenario 타겟 데이터입니다.

다음을 참조함 : AnswerItemClass, FResponseReadScenario::GetCorrectAnswerData(), FResponseListenScenario::GetCorrectAnswerData(), ALingoGameState::GetListenScenarioData(), ALingoGameState::GetReadScenarioData(), UAnswerItem::InitInfo(), Listen, QuestType, Read, FResponseReadScenario::target_data, FResponseListenScenario::target_data, ALingoGameState::TryListenAnswerData, VerticalBox, ALingoGameState::WrongListenAnswerList, ALingoGameState::WrongReadAnswerList.

다음에 의해서 참조됨 : InitPopup().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NativeDestruct()

void UPopup_Result::NativeDestruct ( )
overridevirtual

Popup_Result.cpp 파일의 27 번째 라인에서 정의되었습니다.

28{
29 Super::NativeDestruct();
30}

◆ NativeTick()

void UBasePopup::NativeTick ( const FGeometry &  MyGeometry,
float  InDeltaTime 
)
overridevirtualinherited

UBasePopup.cpp 파일의 7 번째 라인에서 정의되었습니다.

8{
9 Super::NativeTick(MyGeometry, InDeltaTime);
10
11 if (bIsOpenAnim)
12 {
13 UpdateAnimation(InDeltaTime);
14 }
15}
bool bIsOpenAnim
애니메이션 재생 중 여부
Definition UBasePopup.h:57
void UpdateAnimation(float InDeltaTime)
스크립트 오픈 애니메이션 업데이트

다음을 참조함 : UBasePopup::bIsOpenAnim, UBasePopup::UpdateAnimation().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnClickClose()

void UPopup_Result::OnClickClose ( )
private

Popup_Result.cpp 파일의 90 번째 라인에서 정의되었습니다.

91{
92 // PopupManager를 통해 팝업 닫기 (마우스 커서 처리 포함)
93 if (UPopupManager* PopupMgr = UPopupManager::Get(GetWorld()))
94 {
95 PopupMgr->HideCurrentPopup();
96 }
97}
팝업 관리자

다음에 의해서 참조됨 : InitPopup().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnResponseListenResult()

void UPopup_Result::OnResponseListenResult ( FResponseListenResult ResponseData,
bool  bWasSuccessful 
)
private

Popup_Result.cpp 파일의 345 번째 라인에서 정의되었습니다.

346{
347 if (bWasSuccessful)
348 {
349 // GameState에 결과 저장 (자동으로 복제됨)
350 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
351 {
352 GS->ListenResult = ResponseData;
353 GS->OnListenResultUpdated.Broadcast(ResponseData);
354 }
355
356 this->InitListenResult(ResponseData);
357 }
358 else
359 {
360 PRINTLOG(TEXT("[Result] Quest result Failed"));
361 }
362}

다음을 참조함 : InitListenResult(), PRINTLOG.

다음에 의해서 참조됨 : RequestResult().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnResponseReadResult()

void UPopup_Result::OnResponseReadResult ( FResponseReadResult ResponseData,
bool  bWasSuccessful 
)
private

Popup_Result.cpp 파일의 323 번째 라인에서 정의되었습니다.

324{
325 if (bWasSuccessful)
326 {
327 PRINTLOG(TEXT("[Result] Grade: %s, average_score: %.2f%%, Top Percent: %.2f%%"),
328 *ResponseData.grade, ResponseData.average_score, ResponseData.top_percent);
329
330 // GameState에 결과 저장 (자동으로 복제됨)
331 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
332 {
333 GS->ReadResult = ResponseData;
334 GS->OnReadResultUpdated.Broadcast(ResponseData);
335 }
336
337 this->InitReadResult(ResponseData);
338 }
339 else
340 {
341 PRINTLOG(TEXT("[Result] Quest result Failed"));
342 }
343}

다음을 참조함 : FResponseReadResult::average_score, FResponseReadResult::grade, InitReadResult(), PRINTLOG, FResponseReadResult::top_percent.

다음에 의해서 참조됨 : RequestResult().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OpenAnimation()

void UBasePopup::OpenAnimation ( )
inherited

팝업 오픈 애니메이션을 재생합니다

UBasePopup.cpp 파일의 17 번째 라인에서 정의되었습니다.

18{
19 if (!IsInViewport())
20 {
21 AddToViewport();
22 }
23
24 // 팝업 오픈 사운드 재생 (None이 아닐 때만)
26 {
27 if (UGameSoundManager* SoundManager = UGameSoundManager::Get(this))
28 {
29 SoundManager->PlaySound2D(OpenAnimSound);
30 }
31 }
32
33 // 블루프린트에서 정의한 애니메이션이 있으면 해당 애니메이션 재생
35 {
36 PlayAnimation(BlueprintOpenAnimation);
37 return;
38 }
39
40 // 블루프린트 애니메이션이 없으면 기본 스크립트 애니메이션 사용
41 SetRenderTransformPivot(OpenPivot);
42 SetRenderScale(FVector2D(OpenStartScale, OpenStartScale));
43
44 bIsOpenAnim = OpenDuration > KINDA_SMALL_NUMBER;
45 OpenElapsedTime = 0.0f;
46
47 if (!bIsOpenAnim)
48 {
49 SetRenderScale(FVector2D(OpenTargetScale, OpenTargetScale));
50 }
51}
EGameSoundType OpenAnimSound
팝업 오픈 시 재생될 사운드 타입
Definition UBasePopup.h:96
float OpenDuration
애니메이션 지속 시간
Definition UBasePopup.h:64
float OpenElapsedTime
경과 시간
Definition UBasePopup.h:60
float OpenStartScale
시작 스케일
Definition UBasePopup.h:68
FVector2D OpenPivot
애니메이션 중심점 (0~1 범위)
Definition UBasePopup.h:76
float OpenTargetScale
목표 스케일
Definition UBasePopup.h:72
UWidgetAnimation * BlueprintOpenAnimation
블루프린트에서 정의한 오픈 애니메이션
Definition UBasePopup.h:45
게임 내 모든 사운드 재생을 관리하는 중앙 사운드 관리 서브시스템입니다.

다음을 참조함 : UBasePopup::bIsOpenAnim, UBasePopup::BlueprintOpenAnimation, None, UBasePopup::OpenAnimSound, UBasePopup::OpenDuration, UBasePopup::OpenElapsedTime, UBasePopup::OpenPivot, UBasePopup::OpenStartScale, UBasePopup::OpenTargetScale.

◆ RequestResult()

void UPopup_Result::RequestResult ( )
private

Popup_Result.cpp 파일의 262 번째 라인에서 정의되었습니다.

263{
264 APlayerController* PC = GetOwningPlayer();
265 if (!PC)
266 return;
267
268 // Host 플레이어(첫 번째 플레이어)인지 확인
269 bool bIsHost = false;
270 if (APlayerState* PS = PC->GetPlayerState<APlayerState>())
271 {
272 if (AGameStateBase* GameStateBase = GetWorld()->GetGameState())
273 {
274 int32 PlayerIndex = GameStateBase->PlayerArray.IndexOfByKey(PS);
275 bIsHost = (PlayerIndex == 0);
276 }
277 }
278
279 // Host가 아니면 요청하지 않음
280 if (!bIsHost)
281 {
282 PRINTLOG(TEXT("[Popup_Result] Guest player - skipping request, waiting for Host"));
283 return;
284 }
285
286 PRINTLOG(TEXT("[Popup_Result] Host player - sending result request"));
287
288 if (auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()))
289 {
290 // 네트워크 송신 (Host만)
291 if (UKLingoNetworkSystem* Network = UKLingoNetworkSystem::Get(GetWorld()))
292 {
294 {
295 FRequestReadResult ReadRequest;
296 ReadRequest.room_id = GS->GetRoomId();
297 ReadRequest.user_id = Cast<APlayerControl>(GetOwningPlayer())->GetUserId();
298 ReadRequest.scenario_id = 1;
300 ReadRequest.state_type = 0;
301 ReadRequest.result_time = GS->GetTimeTaken();
302 ReadRequest.wrong_idx = GS->WrongReadAnswerList;
303 Network->RequestReadResult(ReadRequest,
304 FResponseReadResultDelegate::CreateUObject(this, &UPopup_Result::OnResponseReadResult));
305 }
306 else if ( QuestType == EQuestType::Listen )
307 {
308 FRequestListenResult ListenRequest;
309 ListenRequest.room_id = GS->GetRoomId();
310 ListenRequest.user_id = Cast<APlayerControl>(GetOwningPlayer())->GetUserId();
311 ListenRequest.scenario_id = 1;
313 ListenRequest.state_type = 0;
314 ListenRequest.result_time = GS->GetTimeTaken();
315 ListenRequest.wrong_idx = GS->WrongListenAnswerList;
316 Network->RequestListenResult(ListenRequest,
317 FResponseListenResultDelegate::CreateUObject(this, &UPopup_Result::OnResponseListenResult));
318 }
319 }
320 }
321}
KLingo 서버와의 HTTP 요청을 중재하는 게임 인스턴스 서브시스템입니다.
static int32 GetStageTypeIndex(const EQuestType QuestType)
void OnResponseReadResult(FResponseReadResult &ResponseData, bool bWasSuccessful)
void OnResponseListenResult(FResponseListenResult &ResponseData, bool bWasSuccessful)
TArray< int32 > wrong_idx
TArray< int32 > wrong_idx

다음을 참조함 : ULingoGameHelper::GetStageTypeIndex(), Listen, OnResponseListenResult(), OnResponseReadResult(), PRINTLOG, QuestType, Read, FRequestReadResult::result_time, FRequestListenResult::result_time, FRequestReadResult::room_id, FRequestListenResult::room_id, FRequestReadResult::scenario_id, FRequestListenResult::scenario_id, FRequestReadResult::stage_type, FRequestListenResult::stage_type, FRequestReadResult::state_type, FRequestListenResult::state_type, FRequestReadResult::user_id, FRequestListenResult::user_id, FRequestReadResult::wrong_idx, FRequestListenResult::wrong_idx.

다음에 의해서 참조됨 : InitPopup().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateAnimation()

void UBasePopup::UpdateAnimation ( float  InDeltaTime)
protectedinherited

스크립트 오픈 애니메이션 업데이트

UBasePopup.cpp 파일의 53 번째 라인에서 정의되었습니다.

54{
55 if (!bIsOpenAnim)
56 {
57 return;
58 }
59
60 OpenElapsedTime += InDeltaTime;
61
62 const float Alpha = FMath::Clamp(OpenElapsedTime / OpenDuration, 0.0f, 1.0f);
63 const float EasedAlpha = FEaseHelper::Ease(Alpha, OpenEaseType);
64 const float NewScale = FMath::Lerp(OpenStartScale, OpenTargetScale, EasedAlpha);
65
66 SetRenderScale(FVector2D(NewScale, NewScale));
67
68 if (Alpha >= 1.0f)
69 {
70 bIsOpenAnim = false;
71 }
72}
EEaseType OpenEaseType
Easing 타입
Definition UBasePopup.h:83
static float Ease(float Alpha, EEaseType Type)
Definition FEaseHelper.h:45

다음을 참조함 : UBasePopup::bIsOpenAnim, FEaseHelper::Ease(), UBasePopup::OpenDuration, UBasePopup::OpenEaseType, UBasePopup::OpenElapsedTime, UBasePopup::OpenStartScale, UBasePopup::OpenTargetScale.

다음에 의해서 참조됨 : UBasePopup::NativeTick().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ AnswerItemClass

TSubclassOf<class UAnswerItem> UPopup_Result::AnswerItemClass
private

Popup_Result.h 파일의 73 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWrongList().

◆ bAllowPlayerControl

bool UBasePopup::bAllowPlayerControl = false
inherited

이 팝업이 활성화되어 있을 때 플레이어 조작을 허용할지 여부

true면 이 팝업이 열려있어도 플레이어가 캐릭터를 조작할 수 있습니다. 기본값은 false (대부분의 팝업은 플레이어 조작을 차단)

UBasePopup.h 파일의 105 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UPopup_DailyStudy::NativeConstruct(), UPopup_SpeakQuestJudes::NativeConstruct().

◆ bIsOpenAnim

bool UBasePopup::bIsOpenAnim = false
protectedinherited

애니메이션 재생 중 여부

UBasePopup.h 파일의 57 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::NativeTick(), UBasePopup::OpenAnimation(), UBasePopup::UpdateAnimation().

◆ BlueprintOpenAnimation

UWidgetAnimation* UBasePopup::BlueprintOpenAnimation
protectedinherited

블루프린트에서 정의한 오픈 애니메이션

설정된 경우 스크립트 애니메이션 대신 이 애니메이션을 재생합니다.

UBasePopup.h 파일의 45 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation().

◆ Btn_Confirm

TObjectPtr<class UImageButton> UPopup_Result::Btn_Confirm
protected

Popup_Result.h 파일의 51 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitPopup().

◆ Image_Symbol

TObjectPtr<class UImage> UPopup_Result::Image_Symbol
protected

Popup_Result.h 파일의 48 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWordWidget().

◆ OpenAnimSound

EGameSoundType UBasePopup::OpenAnimSound = EGameSoundType::UI_PopupOpen
protectedinherited

팝업 오픈 시 재생될 사운드 타입

블루프린트에서 팝업별로 다른 사운드를 설정할 수 있습니다. None으로 설정하면 사운드를 재생하지 않습니다. 기본값은 UI_PopupOpen입니다.

UBasePopup.h 파일의 96 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation().

◆ OpenDuration

float UBasePopup::OpenDuration = 0.2f
protectedinherited

애니메이션 지속 시간

UBasePopup.h 파일의 64 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation(), UBasePopup::UpdateAnimation().

◆ OpenEaseType

EEaseType UBasePopup::OpenEaseType = EEaseType::EaseOutBack
protectedinherited

Easing 타입

애니메이션의 보간 곡선을 선택합니다. 기본값은 EaseOutBack (탄성 효과)

UBasePopup.h 파일의 83 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::UpdateAnimation().

◆ OpenElapsedTime

float UBasePopup::OpenElapsedTime = 0.0f
protectedinherited

경과 시간

UBasePopup.h 파일의 60 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation(), UBasePopup::UpdateAnimation().

◆ OpenPivot

FVector2D UBasePopup::OpenPivot = FVector2D(0.5f, 0.5f)
protectedinherited

애니메이션 중심점 (0~1 범위)

UBasePopup.h 파일의 76 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation().

◆ OpenStartScale

float UBasePopup::OpenStartScale = 0.8f
protectedinherited

시작 스케일

UBasePopup.h 파일의 68 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation(), UBasePopup::UpdateAnimation().

◆ OpenTargetScale

float UBasePopup::OpenTargetScale = 1.0f
protectedinherited

목표 스케일

UBasePopup.h 파일의 72 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UBasePopup::OpenAnimation(), UBasePopup::UpdateAnimation().

◆ PopupType

EPopupType UBasePopup::PopupType
protectedinherited

UBasePopup.h 파일의 34 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UPopup_InputMsg::InitPopup(), UPopup_InputMsg::OnClickOk().

◆ QuestType

EQuestType UPopup_Result::QuestType
private

Popup_Result.h 파일의 75 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitPopup(), InitWordWidget(), InitWrongList(), RequestResult().

◆ Result_AverageScore

TObjectPtr<class UResultStatWidget> UPopup_Result::Result_AverageScore
protected

Popup_Result.h 파일의 69 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitListenResult(), InitReadResult().

◆ Result_Grade

TObjectPtr<class UResultStatWidget> UPopup_Result::Result_Grade
protected

Popup_Result.h 파일의 65 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitListenResult(), InitReadResult().

◆ Result_Time

TObjectPtr<class UResultStatWidget> UPopup_Result::Result_Time
protected

Popup_Result.h 파일의 63 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitListenResult(), InitReadResult().

◆ Result_TopRate

TObjectPtr<class UResultStatWidget> UPopup_Result::Result_TopRate
protected

Popup_Result.h 파일의 67 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitListenResult(), InitReadResult().

◆ Txt_Eng

TObjectPtr<class UTextBlock> UPopup_Result::Txt_Eng
protected

Popup_Result.h 파일의 57 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWordWidget().

◆ Txt_Kor

TObjectPtr<class UTextBlock> UPopup_Result::Txt_Kor
protected

Popup_Result.h 파일의 54 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWordWidget().

◆ Txt_Title

TObjectPtr<class UTextBlock> UPopup_Result::Txt_Title
protected

Popup_Result.h 파일의 45 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWordWidget().

◆ VerticalBox

TObjectPtr<class UVerticalBox> UPopup_Result::VerticalBox
protected

Popup_Result.h 파일의 60 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : InitWrongList().


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