KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
UPopup_SpeakResult.cpp
이 파일의 문서화 페이지로 가기
1// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
3
5
6#include "ALingoPlayerState.h"
8#include "APlayerControl.h"
9#include "FResultStatData.h"
10#include "GameLogging.h"
11#include "UAnswerItem.h"
12#include "UBroadcastManager.h"
13#include "UImageButton.h"
14#include "ULingoGameHelper.h"
15#include "UPopupManager.h"
17#include "UResultStatWidget.h"
18#include "Components/Spacer.h"
19#include "Components/VerticalBox.h"
20#include "Onepiece/Onepiece.h"
21
23{
24 if (Btn_Confirm)
25 {
26 Btn_Confirm->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_SpeakResult::OnClickClose);
27 Btn_Confirm->OnButtonClickedEvent.AddDynamic(this, &UPopup_SpeakResult::OnClickClose);
28 }
29
30 this->SpeakResult = ResponseData;
31
32 this->InitScore();
33 this->InitQuestionList();
34}
35
37{
38 if (UPopupManager* PopupMgr = UPopupManager::Get(GetWorld()))
39 {
40 PopupMgr->HideCurrentPopup();
41 }
42
43 // PlayerController를 통해 서버에 Door 메시지 전송 요청
44 if (APlayerController* PC = GetOwningPlayer())
45 {
46 if (APlayerControl* PlayerControl = Cast<APlayerControl>(PC))
47 {
48 PlayerControl->Server_SendDoorMessage(DoorGroup::Step3_End, true);
49 }
50 }
51}
52
54{
55 auto ResultList = SpeakResult.GetResultStatData();
56
57 Result_Grade->InitData(ResultList[0]);
58 Result_TopRate->InitData(ResultList[1]);
59 Result_AverageScore->InitData(ResultList[2]);
60}
61
63{
64 auto PS= ULingoGameHelper::GetLingoPlayerState(GetWorld());
65 if (!PS)
66 {
67 PRINTLOG(TEXT("[UPopup_SpeakResult] Failed to get LingoPlayerState"));
68 return;
69 }
70
71 VerticalBox->ClearChildren();
72
73 for (int32 i = 0; i < SpeakResult.scores.Num(); ++i)
74 {
75 FSpeakResultItem InItemData;
76 InItemData.Index = i+1;
77
78 // 배열 범위 체크
79 if (i < PS->SpeakScenarioData.speak_quest_data.Num())
80 {
81 InItemData.Question = PS->SpeakScenarioData.speak_quest_data[i].eng;
82 }
83 else
84 {
85 PRINTLOG(TEXT("[UPopup_SpeakResult] speak_quest_data index %d out of range (size: %d)"),
86 i, PS->SpeakScenarioData.speak_quest_data.Num());
87 InItemData.Question = FString::Printf(TEXT("Question %d"), i + 1);
88 }
89
90 InItemData.Feedback = SpeakResult.scores[i].desc;
91 InItemData.Score = SpeakResult.scores[i].score;
92
93 if( auto ItemWidget = CreateWidget<UPopup_SpeakResultItem>(GetWorld(), AnswerItemClass) )
94 {
95 ItemWidget->InitData(InItemData);
96 VerticalBox->AddChildToVerticalBox(ItemWidget);
97
98 if (i < SpeakResult.scores.Num() - 1)
99 {
100 USpacer* Spacer = NewObject<USpacer>(this);
101 if (Spacer)
102 {
103 Spacer->SetSize(FVector2D(1.0f, 15.0f));
104 VerticalBox->AddChildToVerticalBox(Spacer);
105 }
106 }
107 }
108 }
109}
네트워크 복제를 위한 전역 브로드캐스트 Actor
APlayerControl 선언에 대한 Doxygen 주석을 제공합니다.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
static class ALingoPlayerState * GetLingoPlayerState(const UObject *WorldContextObject)
팝업 관리자
TObjectPtr< class UResultStatWidget > Result_Grade
TObjectPtr< class UImageButton > Btn_Confirm
FResponseSpeakResult SpeakResult
TSubclassOf< class UPopup_SpeakResultItem > AnswerItemClass
void InitPopup(const struct FResponseSpeakResult &ResponseData)
TObjectPtr< class UResultStatWidget > Result_AverageScore
TObjectPtr< class UVerticalBox > VerticalBox
TObjectPtr< class UResultStatWidget > Result_TopRate
static const int32 Step3_End
Definition Onepiece.h:33
TArray< FSpeakScoreDetail > scores
TArray< FResultStatData > GetResultStatData() const