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

Daily Study 결과 팝업 더 자세히 ...

#include <UPopup_DailyResult.h>

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

Public 멤버 함수

void InitPopup (const FDailyStudyResult &Result)
 Daily Study 결과로 팝업 초기화
 
virtual void NativeTick (const FGeometry &MyGeometry, float InDeltaTime) override
 
void OpenAnimation ()
 팝업 오픈 애니메이션을 재생합니다
 

Public 속성

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

Protected 멤버 함수

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

Protected 속성

bool bIsOpenAnim = false
 애니메이션 재생 중 여부
 
UWidgetAnimation * BlueprintOpenAnimation
 블루프린트에서 정의한 오픈 애니메이션
 
TObjectPtr< class UTextureButtonBtn_Close
 
TObjectPtr< class UImageButtonBtn_Confirm
 확인 버튼 (팝업 닫기)
 
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 UVerticalBox > VerticalBox
 결과 리스트를 담는 VerticalBox (스크롤 가능)
 

Private 멤버 함수

void InitQuestionList ()
 질문 리스트 초기화 (스크롤 가능한 아이템 생성)
 
void OnClickConfirm ()
 확인 버튼 클릭
 

Private 속성

TSubclassOf< class UPopup_DailyResultItemAnswerItemClass
 아이템 위젯 클래스
 
FDailyStudyResult StudyResult
 Daily Study 결과 데이터
 

상세한 설명

Daily Study 결과 팝업

Daily Study에서 학습한 단어들의 결과를 스크롤 가능한 리스트로 표시합니다. UPopup_SpeakResult를 참조하여 구현되었습니다.

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

멤버 함수 문서화

◆ InitPopup()

void UPopup_DailyResult::InitPopup ( const FDailyStudyResult Result)

Daily Study 결과로 팝업 초기화

매개변수
ResultDaily Study 결과 데이터

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

44{
45 // 데이터 저장
46 StudyResult = Result;
47
48 // 질문 리스트 초기화
50}
void InitQuestionList()
질문 리스트 초기화 (스크롤 가능한 아이템 생성)
FDailyStudyResult StudyResult
Daily Study 결과 데이터

다음을 참조함 : InitQuestionList(), StudyResult.

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

◆ InitQuestionList()

void UPopup_DailyResult::InitQuestionList ( )
private

질문 리스트 초기화 (스크롤 가능한 아이템 생성)

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

115{
116 if (!VerticalBox)
117 return;
118
119 // 기존 아이템 제거
120 VerticalBox->ClearChildren();
121
122 // QuestionList와 AnswerList를 페어로 사용하여 아이템 생성
123 for (int32 i = 0; i < StudyResult.QuestionList.Num(); ++i)
124 {
125 // AnswerList 범위 체크
126 if (!StudyResult.AnswerList.IsValidIndex(i))
127 continue;
128
129 // 아이템 위젯 생성 및 초기화
130 if (auto ItemWidget = CreateWidget<UPopup_DailyResultItem>(GetWorld(), AnswerItemClass))
131 {
132 // 간단하게 3개 파라미터만 전달 (FWordData에서 한글 단어 추출)
133 ItemWidget->InitData(
134 i+1,
135 StudyResult.QuestionList[i].Kor, // Question (한글)
136 StudyResult.AnswerList[i].final_feedback, // FeedBack
137 StudyResult.AnswerList[i].final_overall_score // Score
138 );
139
140 VerticalBox->AddChildToVerticalBox(ItemWidget);
141
142 // 마지막 아이템이 아니면 Spacer 추가 (아이템 간 간격)
143 if (i < StudyResult.QuestionList.Num() - 1)
144 {
145 USpacer* Spacer = NewObject<USpacer>(this);
146 if (Spacer)
147 {
148 Spacer->SetSize(FVector2D(1.0f, 15.0f));
149 VerticalBox->AddChildToVerticalBox(Spacer);
150 }
151 }
152 }
153 }
154}
TObjectPtr< class UVerticalBox > VerticalBox
결과 리스트를 담는 VerticalBox (스크롤 가능)
TSubclassOf< class UPopup_DailyResultItem > AnswerItemClass
아이템 위젯 클래스
TArray< FWordData > QuestionList
질문 단어 데이터 리스트 (한글/영어/발음)
TArray< FResponseSpeakingJudes > AnswerList
답변 리스트

다음을 참조함 : AnswerItemClass, FDailyStudyResult::AnswerList, FDailyStudyResult::QuestionList, StudyResult, VerticalBox.

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

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

◆ NativeConstruct()

void UPopup_DailyResult::NativeConstruct ( )
overrideprotectedvirtual

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

21{
22 Super::NativeConstruct();
23
24 // 버튼 바인딩
25 if (Btn_Confirm)
26 {
27 Btn_Confirm->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_DailyResult::OnClickConfirm);
28 Btn_Confirm->OnButtonClickedEvent.AddDynamic(this, &UPopup_DailyResult::OnClickConfirm);
29 }
30
31 if (Btn_Close)
32 {
33 Btn_Close->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_DailyResult::OnClickConfirm);
34 Btn_Close->OnButtonClickedEvent.AddDynamic(this, &UPopup_DailyResult::OnClickConfirm);
35 }
36
37}
TObjectPtr< class UTextureButton > Btn_Close
void OnClickConfirm()
확인 버튼 클릭
TObjectPtr< class UImageButton > Btn_Confirm
확인 버튼 (팝업 닫기)

다음을 참조함 : Btn_Close, Btn_Confirm, OnClickConfirm().

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

◆ 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().

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

◆ OnClickConfirm()

void UPopup_DailyResult::OnClickConfirm ( )
private

확인 버튼 클릭

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

57{
58 // ConfigLibrary를 이용하여 점수 저장 (플레이어 인덱스 기준)
59 const int32 UserId = ULingoGameHelper::GetUserId(this);
60 const int32 CurrentScore = StudyResult.CurrentScore;
61
62 // 기존 최고 점수 가져오기
63 const int32 BestScore = UConfigLibrary::GetUserInt(UserId, TEXT("DailyBestScore"), 0);
64
65 // 현재 점수가 최고 점수보다 높으면 저장
66 bool bScoreUpdated = false;
67 if (CurrentScore > BestScore)
68 {
69 UConfigLibrary::SetUserInt(UserId, TEXT("DailyBestScore"), CurrentScore, true);
70 PRINTLOG(TEXT("[DailyResult] New best score saved: %d (Previous: %d)"), CurrentScore, BestScore);
71 bScoreUpdated = true;
72 }
73 else
74 {
75 PRINTLOG(TEXT("[DailyResult] Current score: %d (Best: %d)"), CurrentScore, BestScore);
76 }
77
78 // 모든 DailyKiosk의 위젯 업데이트 (클라이언트 측에서만 실행)
79 // Popup은 클라이언트 UI이므로 이 코드는 각 클라이언트에서 독립적으로 실행됩니다.
80 // Screen Space Widget이므로 각 클라이언트가 자신의 화면에만 렌더링합니다.
81 if (bScoreUpdated)
82 {
83 int32 UpdateCount = 0;
84 for (TActorIterator<ADailyKiosk> It(GetWorld()); It; ++It)
85 {
86 ADailyKiosk* Kiosk = *It;
87 if (Kiosk && Kiosk->GetWidgetComp())
88 {
89 if (UDailyKioskWidget* Widget = Cast<UDailyKioskWidget>(Kiosk->GetWidgetComp()->GetWidget()))
90 {
91 Widget->UpdateBestScore();
92 UpdateCount++;
93 }
94 }
95 }
96
97 if (UpdateCount > 0)
98 {
99 PRINTLOG(TEXT("[DailyResult] Updated %d DailyKiosk widget(s) for User %d"), UpdateCount, UserId);
100 }
101 }
102
103 // 팝업 닫기
104 if (auto PopupMgr = UPopupManager::Get(GetWorld()))
105 {
106 PopupMgr->HideCurrentPopup();
107 }
108}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
Daily Study Kiosk
Definition ADailyKiosk.h:19
class UWidgetComponent * GetWidgetComp()
Definition ADailyKiosk.h:25
static int32 GetUserInt(int32 UserId, const FString &Key, int32 DefaultValue=0)
유저별 정수 설정 읽기
static void SetUserInt(int32 UserId, const FString &Key, int32 Value, bool bAutoSave=true)
유저별 정수 설정 저장
static int32 GetUserId(const UObject *WorldContextObject)
int32 CurrentScore
현재 점수

다음을 참조함 : FDailyStudyResult::CurrentScore, ULingoGameHelper::GetUserId(), UConfigLibrary::GetUserInt(), ADailyKiosk::GetWidgetComp(), PRINTLOG, UConfigLibrary::SetUserInt(), StudyResult.

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

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

◆ 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.

◆ 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 UPopup_DailyResultItem> UPopup_DailyResult::AnswerItemClass
private

아이템 위젯 클래스

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

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

◆ 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_Close

TObjectPtr<class UTextureButton> UPopup_DailyResult::Btn_Close
protected

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

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

◆ Btn_Confirm

TObjectPtr<class UImageButton> UPopup_DailyResult::Btn_Confirm
protected

확인 버튼 (팝업 닫기)

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

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

◆ 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().

◆ StudyResult

FDailyStudyResult UPopup_DailyResult::StudyResult
private

Daily Study 결과 데이터

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

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

◆ VerticalBox

TObjectPtr<class UVerticalBox> UPopup_DailyResult::VerticalBox
protected

결과 리스트를 담는 VerticalBox (스크롤 가능)

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

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


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