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

Daily Study 팝업 더 자세히 ...

#include <UPopup_DailyStudy.h>

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

Public 멤버 함수

FString GetCurrentQuestionText () const
 
void InitPopup (const TArray< struct FWordData > &WordDataArray)
 AI 생성 단어 데이터로 Daily Study 초기화
 
virtual void NativeTick (const FGeometry &MyGeometry, float InDeltaTime) override
 
void OnResponseSpeakingsJudges (const FResponseSpeakingJudes &JudgeResult)
 
void OpenAnimation ()
 팝업 오픈 애니메이션을 재생합니다
 

Public 속성

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

Protected 멤버 함수

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

Protected 속성

bool bIsOpenAnim = false
 애니메이션 재생 중 여부
 
UWidgetAnimation * BlueprintOpenAnimation
 블루프린트에서 정의한 오픈 애니메이션
 
TObjectPtr< class UBorder > Border_Question
 
TObjectPtr< class UTextureButtonBtn_Close
 
TObjectPtr< class UCanvasPanel > Canvas_Correct
 
TObjectPtr< class UCanvasPanel > Canvas_Question
 
TObjectPtr< class UCountDownCountDown_Widget
 
TObjectPtr< class UImage > Img_Correct
 
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 UCircularProgressBarProgressBar_RemainTime
 
TObjectPtr< class URichTextBlock > Rich_Text
 
TObjectPtr< class UTextBlock > Txt_Correct
 
TObjectPtr< class UTextBlock > Txt_CurScore
 
TObjectPtr< class UTextBlock > Txt_Infomation
 
TObjectPtr< class UTextBlock > Txt_QuestionProgress
 
TObjectPtr< class UTextBlock > Txt_RemainTime
 
TObjectPtr< class UTextBlock > Txt_SubTitle
 

Private 멤버 함수

void CheckVideoPlayback ()
 영상 재생 시간 체크
 
void LoadCurQuestion ()
 현재 질문 UI 업데이트
 
void MoveToNextQuestion ()
 다음 질문으로 이동
 
void OnAudioCapture (bool bIsRecording)
 
void OnClickClose ()
 닫기 버튼 클릭
 
void OnCountDownFinished ()
 
void OnResponseListenAudio (FResponseListenAudio &Response, bool bWasSuccessful)
 
void OnThinkTimeFinished ()
 
void OnVideoFinished ()
 영상 재생 완료 콜백
 
void PlayVideo (bool bIsCorrect)
 영상 재생 (정답/오답)
 
void ShowCorrectData (bool bIsCorrect)
 정답 데이터 표시 (정답/오답 판별)
 
void StartThinkTimer ()
 
void UpdateThinkTimer ()
 

Private 속성

TArray< FResponseSpeakingJudesAnswerList
 답변 리스트 (FResponseSpeakingJudes)
 
bool bLastAnswerCorrect = false
 마지막 답변이 정답인지 여부 (타임업 또는 50점 미만 = false)
 
int32 CorrectAnswerCount = 0
 
TObjectPtr< class UMediaSource > CorrectVideoSource
 정답 영상 소스
 
int32 CurIndex = 0
 현재 질문 인덱스 (0-based)
 
int32 CurrentScore = 0
 
TObjectPtr< class UMediaPlayer > MediaPlayer
 미디어 플레이어
 
TObjectPtr< class UMediaTexture > MediaTexture
 미디어 텍스처
 
FTimerHandle NextTimerHandle
 다음 문제 이동 타이머
 
TArray< struct FWordDataQuestionList
 AI 생성 단어 데이터 목록 (한글/영어/발음)
 
float RemainingThinkTime = 0.f
 
FTimerHandle ThinkingTimerHandle
 
FTimerHandle VideoCheckTimerHandle
 영상 재생 시간 체크 타이머
 
float VideoEndTime = 3.0f
 영상 재생 종료 시간 (초)
 
float VideoStartTime = 0.0f
 영상 재생 시작 시간 (초)
 
TObjectPtr< class UMediaSource > WrongVideoSource
 오답 영상 소스
 

상세한 설명

Daily Study 팝업

데일리 단어 반복 학습 팝업입니다. Listen → Speak → Judge 루프를 순차적으로 진행합니다.

  • 한 세션당 10개의 랜덤 단어 학습
  • 순차적 진행 (FSM 불필요)
  • 10개 완료 후 종합 점수 Summary 표시
  • PlayerActor의 VoiceConversationSystem과 연동하여 녹음 처리

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

멤버 함수 문서화

◆ CheckVideoPlayback()

void UPopup_DailyStudy::CheckVideoPlayback ( )
private

영상 재생 시간 체크

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

362{
363 if (!MediaPlayer)
364 return;
365
366 // 현재 재생 시간 확인
367 FTimespan CurrentTime = MediaPlayer->GetTime();
368 float CurrentSeconds = CurrentTime.GetTotalSeconds();
369
370 // 종료 시간 도달 체크
371 if (CurrentSeconds >= VideoEndTime)
372 {
373 // 타이머 중지
374 GetWorld()->GetTimerManager().ClearTimer(VideoCheckTimerHandle);
375
376 // 영상 종료 처리
378 }
379}
float VideoEndTime
영상 재생 종료 시간 (초)
void OnVideoFinished()
영상 재생 완료 콜백
TObjectPtr< class UMediaPlayer > MediaPlayer
미디어 플레이어
FTimerHandle VideoCheckTimerHandle
영상 재생 시간 체크 타이머

다음을 참조함 : MediaPlayer, OnVideoFinished(), VideoCheckTimerHandle, VideoEndTime.

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

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

◆ GetCurrentQuestionText()

FString UPopup_DailyStudy::GetCurrentQuestionText ( ) const

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

150{
151 if (QuestionList.IsValidIndex(CurIndex))
152 return QuestionList[CurIndex].Kor;
153
154 return FString();
155}
TArray< struct FWordData > QuestionList
AI 생성 단어 데이터 목록 (한글/영어/발음)
int32 CurIndex
현재 질문 인덱스 (0-based)

다음을 참조함 : CurIndex, QuestionList.

◆ InitPopup()

void UPopup_DailyStudy::InitPopup ( const TArray< struct FWordData > &  WordDataArray)

AI 생성 단어 데이터로 Daily Study 초기화

매개변수
WordDataArrayAI가 생성한 단어 데이터 배열 (한글/영어/발음)

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

82{
83 // 기본 초기화 (델리게이트 바인딩 등)
84 if (Btn_Close)
85 {
86 Btn_Close->OnButtonClickedEvent.RemoveDynamic(this, &UPopup_DailyStudy::OnClickClose);
87 Btn_Close->OnButtonClickedEvent.AddDynamic(this, &UPopup_DailyStudy::OnClickClose);
88 }
89
90 if (auto DM = UBroadcastManager::Get(GetWorld()))
91 {
92 DM->OnAudioCapture.RemoveDynamic(this, &UPopup_DailyStudy::OnAudioCapture);
93 DM->OnAudioCapture.AddDynamic(this, &UPopup_DailyStudy::OnAudioCapture);
94 }
95
97 {
98 CountDown_Widget->OnCountDownFinished.RemoveDynamic(this, &UPopup_DailyStudy::OnCountDownFinished);
99 CountDown_Widget->OnCountDownFinished.AddDynamic(this, &UPopup_DailyStudy::OnCountDownFinished);
100 }
101
102 // 초기화
103 CurIndex = 0;
104 CurrentScore = 0;
106
107 QuestionList.Empty();
108 QuestionList.Append(WordDataArray);
109
110 AnswerList.Empty();
111
112 Canvas_Correct->SetVisibility(ESlateVisibility::Hidden);
113 Canvas_Question->SetVisibility(ESlateVisibility::Hidden);
114
115 Txt_CurScore->SetText(FText::FromString(FString::Printf(TEXT("Score : %d"), CurrentScore)));
116
117 // 카운트다운 시작
118 CountDown_Widget->StartCountDown(3);
119}
TObjectPtr< class UCanvasPanel > Canvas_Question
TArray< FResponseSpeakingJudes > AnswerList
답변 리스트 (FResponseSpeakingJudes)
TObjectPtr< class UTextBlock > Txt_CurScore
TObjectPtr< class UTextureButton > Btn_Close
TObjectPtr< class UCanvasPanel > Canvas_Correct
void OnClickClose()
닫기 버튼 클릭
void OnAudioCapture(bool bIsRecording)
TObjectPtr< class UCountDown > CountDown_Widget

다음을 참조함 : AnswerList, Btn_Close, Canvas_Correct, Canvas_Question, CorrectAnswerCount, CountDown_Widget, CurIndex, CurrentScore, OnAudioCapture(), OnClickClose(), OnCountDownFinished(), QuestionList, Txt_CurScore.

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

◆ LoadCurQuestion()

void UPopup_DailyStudy::LoadCurQuestion ( )
private

현재 질문 UI 업데이트

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

122{
123 if (!QuestionList.IsValidIndex(CurIndex))
124 return;
125
126 Border_Question->SetVisibility(ESlateVisibility::Visible);
127 Txt_Infomation->SetVisibility(ESlateVisibility::Visible);
128
129 Rich_Text->SetText(FText::FromString(QuestionList[CurIndex].Eng));
130 Txt_SubTitle->SetText(FText::FromString(FString::Printf(TEXT("[%s]"), *QuestionList[CurIndex].Pronunciation)));
131
132 // 진행 상황 업데이트
133 Txt_QuestionProgress->SetText(FText::FromString(
134 FString::Printf(TEXT("%02d/%02d"),
135 CurIndex + 1,
136 QuestionList.Num())));
137
139}
TObjectPtr< class UTextBlock > Txt_SubTitle
TObjectPtr< class UBorder > Border_Question
TObjectPtr< class UTextBlock > Txt_QuestionProgress
TObjectPtr< class URichTextBlock > Rich_Text
TObjectPtr< class UTextBlock > Txt_Infomation

다음을 참조함 : Border_Question, CurIndex, QuestionList, Rich_Text, StartThinkTimer(), Txt_Infomation, Txt_QuestionProgress, Txt_SubTitle.

다음에 의해서 참조됨 : MoveToNextQuestion(), OnCountDownFinished().

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

◆ MoveToNextQuestion()

void UPopup_DailyStudy::MoveToNextQuestion ( )
private

다음 질문으로 이동

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

291{
292 Canvas_Correct->SetVisibility(ESlateVisibility::Hidden);
293
294 CurIndex++;
295
296 if (CurIndex < QuestionList.Num())
297 {
299 }
300 else
301 {
302 // 현재 팝업 닫기
303 OnClickClose();
304
305 // 모든 문제 완료 - DailyResult 팝업 표시
306 if (auto DailyResultPopup = UPopupManager::Get(GetWorld())->ShowPopupAs<UPopup_DailyResult>(EPopupType::DailyResult))
307 {
308 // FDailyStudyResult 생성
309 FDailyStudyResult Result;
310 Result.CurrentScore = CurrentScore;
311 Result.QuestionList = QuestionList;
312 Result.AnswerList = AnswerList;
313
314 DailyResultPopup->InitPopup(Result);
315 }
316 }
317}
void LoadCurQuestion()
현재 질문 UI 업데이트
TArray< FWordData > QuestionList
질문 단어 데이터 리스트 (한글/영어/발음)
int32 CurrentScore
현재 점수
TArray< FResponseSpeakingJudes > AnswerList
답변 리스트

다음을 참조함 : FDailyStudyResult::AnswerList, AnswerList, Canvas_Correct, CurIndex, FDailyStudyResult::CurrentScore, CurrentScore, LoadCurQuestion(), OnClickClose(), FDailyStudyResult::QuestionList, QuestionList.

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

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

◆ NativeConstruct()

void UPopup_DailyStudy::NativeConstruct ( )
overrideprotectedvirtual

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

34{
36
37 Super::NativeConstruct();
38
39 // 미디어 플레이어 초기화
40 if (!MediaPlayer)
41 {
42 MediaPlayer = NewObject<UMediaPlayer>(this);
43 MediaPlayer->SetLooping(false);
44 MediaPlayer->OnEndReached.AddDynamic(this, &UPopup_DailyStudy::OnVideoFinished);
45 }
46
47 // 미디어 텍스처 생성
48 if (!MediaTexture)
49 {
50 MediaTexture = NewObject<UMediaTexture>(this);
51 MediaTexture->SetMediaPlayer(MediaPlayer);
52 MediaTexture->UpdateResource();
53 }
54
55 // Img_Correct에 미디어 텍스처 바인딩
57 {
58 FSlateBrush Brush;
59 Brush.SetResourceObject(MediaTexture);
60 Brush.ImageSize = FVector2D(1920, 1080); // 영상 해상도에 맞게 조정
61 Img_Correct->SetBrush(Brush);
62 }
63}
bool bAllowPlayerControl
이 팝업이 활성화되어 있을 때 플레이어 조작을 허용할지 여부
Definition UBasePopup.h:105
TObjectPtr< class UImage > Img_Correct
TObjectPtr< class UMediaTexture > MediaTexture
미디어 텍스처

다음을 참조함 : UBasePopup::bAllowPlayerControl, Img_Correct, MediaPlayer, MediaTexture, OnVideoFinished().

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

◆ NativeDestruct()

void UPopup_DailyStudy::NativeDestruct ( )
overrideprotectedvirtual

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

66{
67 Super::NativeDestruct();
68
69 // 타이머 정리
70 if (GetWorld())
71 {
72 GetWorld()->GetTimerManager().ClearTimer(NextTimerHandle);
73 GetWorld()->GetTimerManager().ClearTimer(ThinkingTimerHandle);
74 GetWorld()->GetTimerManager().ClearTimer(VideoCheckTimerHandle);
75 }
76
77 // 미디어 플레이어 정리
78 MediaPlayer->Close();
79}
FTimerHandle NextTimerHandle
다음 문제 이동 타이머
FTimerHandle ThinkingTimerHandle

다음을 참조함 : MediaPlayer, NextTimerHandle, ThinkingTimerHandle, VideoCheckTimerHandle.

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

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

◆ OnAudioCapture()

void UPopup_DailyStudy::OnAudioCapture ( bool  bIsRecording)
private

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

224{
225 if (bIsRecording)
226 {
227 GetWorld()->GetTimerManager().ClearTimer(ThinkingTimerHandle);
228 }
229}

다음을 참조함 : ThinkingTimerHandle.

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

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

◆ OnClickClose()

void UPopup_DailyStudy::OnClickClose ( )
private

닫기 버튼 클릭

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

142{
143 if ( auto PopupMgr = UPopupManager::Get(GetWorld()) )
144 {
145 PopupMgr->HideCurrentPopup();
146 }
147}

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

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

◆ OnCountDownFinished()

void UPopup_DailyStudy::OnCountDownFinished ( )
private

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

284{
285 Canvas_Question->SetVisibility(ESlateVisibility::Visible);
286
288}

다음을 참조함 : Canvas_Question, LoadCurQuestion().

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

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

◆ OnResponseListenAudio()

void UPopup_DailyStudy::OnResponseListenAudio ( FResponseListenAudio Response,
bool  bWasSuccessful 
)
private

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

232{
233 if (bWasSuccessful)
234 {
235 if (auto PlayerActor = ULingoGameHelper::GetPlayerActor(this))
236 PlayerActor->PlayTTSAudio(ResponseData.audio_base64);
237
238 // 다음 문제로 이동 (기존 타이머 로직 사용)
239 GetWorld()->GetTimerManager().SetTimer(
243 false
244 );
245 }
246 else
247 {
248 // 다음 문제로 이동 (기존 타이머 로직 사용)
249 GetWorld()->GetTimerManager().SetTimer(
253 false
254 );
255 }
256}
static class APlayerActor * GetPlayerActor(const UObject *WorldContextObject)
첫 번째 플레이어의 PlayerActor를 가져옵니다.
void MoveToNextQuestion()
다음 질문으로 이동
static constexpr float NEXT_QUESTION

다음을 참조함 : FResponseListenAudio::audio_base64, ULingoGameHelper::GetPlayerActor(), MoveToNextQuestion(), DailyStudyConfig::NEXT_QUESTION, NextTimerHandle.

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

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

◆ OnResponseSpeakingsJudges()

void UPopup_DailyStudy::OnResponseSpeakingsJudges ( const FResponseSpeakingJudes JudgeResult)

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

158{
159 if (!QuestionList.IsValidIndex(CurIndex))
160 return;
161
162 // 답변 리스트에 추가
163 AnswerList.Add(JudgeResult);
164
165 CurrentScore += JudgeResult.final_overall_score;
166 Txt_CurScore->SetText(FText::FromString(FString::Printf(TEXT("Score : %d"), CurrentScore)));
167
168 // 정답/오답 판별 (50점 미만이면 오답)
169 bLastAnswerCorrect = (JudgeResult.final_overall_score >= 50);
170
171 if ( bLastAnswerCorrect )
173
174 // 정답/오답 화면 표시 (영상 + TTS)
176}
bool bLastAnswerCorrect
마지막 답변이 정답인지 여부 (타임업 또는 50점 미만 = false)
void ShowCorrectData(bool bIsCorrect)
정답 데이터 표시 (정답/오답 판별)

다음을 참조함 : AnswerList, bLastAnswerCorrect, CorrectAnswerCount, CurIndex, CurrentScore, FResponseSpeakingJudes::final_overall_score, QuestionList, ShowCorrectData(), Txt_CurScore.

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

◆ OnThinkTimeFinished()

void UPopup_DailyStudy::OnThinkTimeFinished ( )
private

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

202{
203 GetWorld()->GetTimerManager().ClearTimer(ThinkingTimerHandle);
204
205 // 타임업 = 오답 처리
206 bLastAnswerCorrect = false;
207
208 // 빈 답변 추가 (건너뜀 처리)
209 if (QuestionList.IsValidIndex(CurIndex))
210 {
211 FResponseSpeakingJudes EmptyAnswer;
212 EmptyAnswer.final_overall_score = 0;
213 EmptyAnswer.grammar_score = 0;
214 EmptyAnswer.context_score = 0;
215 EmptyAnswer.final_feedback = TEXT("Time Over");
216 AnswerList.Add(EmptyAnswer);
217 }
218
219 // 오답 화면 표시 (영상 + TTS)
220 ShowCorrectData(false);
221}
Speaking Questions 응답 구조체입니다.

다음을 참조함 : AnswerList, bLastAnswerCorrect, FResponseSpeakingJudes::context_score, CurIndex, FResponseSpeakingJudes::final_feedback, FResponseSpeakingJudes::final_overall_score, FResponseSpeakingJudes::grammar_score, QuestionList, ShowCorrectData(), ThinkingTimerHandle.

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

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

◆ OnVideoFinished()

void UPopup_DailyStudy::OnVideoFinished ( )
private

영상 재생 완료 콜백

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

382{
383 // 영상 숨기기
384 Img_Correct->SetVisibility(ESlateVisibility::Hidden);
385
386 // 미디어 플레이어 정지
387 MediaPlayer->Close();
388
389 // 타이머 정리
390 GetWorld()->GetTimerManager().ClearTimer(VideoCheckTimerHandle);
391}

다음을 참조함 : Img_Correct, MediaPlayer, VideoCheckTimerHandle.

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

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

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

◆ PlayVideo()

void UPopup_DailyStudy::PlayVideo ( bool  bIsCorrect)
private

영상 재생 (정답/오답)

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

320{
321 if (!MediaPlayer || !Img_Correct)
322 {
323 // 영상 재생 실패 시 바로 다음 문제로
325 return;
326 }
327
328 // 재생할 영상 소스 선택
329 UMediaSource* SourceToPlay = bIsCorrect ? CorrectVideoSource : WrongVideoSource;
330 UGameSoundManager::Get(GetWorld())->PlaySound2D(bIsCorrect? EGameSoundType::UI_Success : EGameSoundType::UI_Failure);
331
332 if (!SourceToPlay)
333 {
334 // 영상이 없으면 바로 다음 문제로 이동
336 return;
337 }
338
339 // Img_Correct 표시
340 Img_Correct->SetVisibility(ESlateVisibility::Visible);
341
342 // 영상 열기 및 재생
343 MediaPlayer->OpenSource(SourceToPlay);
344 MediaPlayer->Play();
345
346 // 시작 위치로 Seek
347 MediaPlayer->Seek(FTimespan::FromSeconds(VideoStartTime));
348
349 // 재생 시간 체크 타이머 시작 (0.1초마다 체크)
350 if (GetWorld())
351 {
352 GetWorld()->GetTimerManager().SetTimer(
355 0.1f,
356 true // 반복
357 );
358 }
359}
EGameSoundType
void CheckVideoPlayback()
영상 재생 시간 체크
TObjectPtr< class UMediaSource > WrongVideoSource
오답 영상 소스
float VideoStartTime
영상 재생 시작 시간 (초)
TObjectPtr< class UMediaSource > CorrectVideoSource
정답 영상 소스

다음을 참조함 : CheckVideoPlayback(), CorrectVideoSource, Img_Correct, MediaPlayer, OnVideoFinished(), UI_Failure, UI_Success, VideoCheckTimerHandle, VideoStartTime, WrongVideoSource.

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

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

◆ ShowCorrectData()

void UPopup_DailyStudy::ShowCorrectData ( bool  bIsCorrect)
private

정답 데이터 표시 (정답/오답 판별)

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

259{
260 if ( auto DM = UDialogManager::Get(GetWorld()))
261 DM->HideToastImmediately();
262
263 Canvas_Correct->SetVisibility(ESlateVisibility::Visible);
264
265 // FWordData에서 한글 단어 표시
266 Txt_Correct->SetText(FText::FromString(QuestionList[CurIndex].Kor));
267
268 Border_Question->SetVisibility(ESlateVisibility::Hidden);
269 Txt_Infomation->SetVisibility(ESlateVisibility::Hidden);
270
271 if (UKLingoNetworkSystem* NetworkSystem = UKLingoNetworkSystem::Get(GetWorld()))
272 {
273 // 한글 단어를 음성으로 요청
274 NetworkSystem->RequestListenAudio(
276 FResponseListenAudioDelegate::CreateUObject(this, &UPopup_DailyStudy::OnResponseListenAudio)
277 );
278 }
279
280 PlayVideo(bIsCorrect);
281}
KLingo 서버와의 HTTP 요청을 중재하는 게임 인스턴스 서브시스템입니다.
void OnResponseListenAudio(FResponseListenAudio &Response, bool bWasSuccessful)
TObjectPtr< class UTextBlock > Txt_Correct
void PlayVideo(bool bIsCorrect)
영상 재생 (정답/오답)

다음을 참조함 : Border_Question, Canvas_Correct, CurIndex, OnResponseListenAudio(), PlayVideo(), QuestionList, Txt_Correct, Txt_Infomation.

다음에 의해서 참조됨 : OnResponseSpeakingsJudges(), OnThinkTimeFinished().

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

◆ StartThinkTimer()

void UPopup_DailyStudy::StartThinkTimer ( )
private

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

179{
181
182 ProgressBar_RemainTime->SetPercent(1.0f);
183 Txt_RemainTime->SetText(FText::FromString(FString::Printf(TEXT("%.1f"), RemainingThinkTime)));
184
185 GetWorld()->GetTimerManager().SetTimer(ThinkingTimerHandle, this, &UPopup_DailyStudy::UpdateThinkTimer, 0.1f, true);
186}
TObjectPtr< class UCircularProgressBar > ProgressBar_RemainTime
TObjectPtr< class UTextBlock > Txt_RemainTime
static constexpr float THINK_TIME

다음을 참조함 : ProgressBar_RemainTime, RemainingThinkTime, DailyStudyConfig::THINK_TIME, ThinkingTimerHandle, Txt_RemainTime, UpdateThinkTimer().

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

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

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

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

◆ UpdateThinkTimer()

void UPopup_DailyStudy::UpdateThinkTimer ( )
private

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

189{
190 RemainingThinkTime -= 0.1f;
191 if (RemainingThinkTime <= 0.f)
192 {
193 RemainingThinkTime = 0.f;
195 }
196
198 Txt_RemainTime->SetText(FText::FromString(FString::Printf(TEXT("%.1f"), RemainingThinkTime)));
199}

다음을 참조함 : OnThinkTimeFinished(), ProgressBar_RemainTime, RemainingThinkTime, DailyStudyConfig::THINK_TIME, Txt_RemainTime.

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

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

멤버 데이터 문서화

◆ AnswerList

TArray<FResponseSpeakingJudes> UPopup_DailyStudy::AnswerList
private

답변 리스트 (FResponseSpeakingJudes)

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

다음에 의해서 참조됨 : InitPopup(), MoveToNextQuestion(), OnResponseSpeakingsJudges(), OnThinkTimeFinished().

◆ bAllowPlayerControl

bool UBasePopup::bAllowPlayerControl = false
inherited

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

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

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

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

◆ bIsOpenAnim

bool UBasePopup::bIsOpenAnim = false
protectedinherited

애니메이션 재생 중 여부

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

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

◆ bLastAnswerCorrect

bool UPopup_DailyStudy::bLastAnswerCorrect = false
private

마지막 답변이 정답인지 여부 (타임업 또는 50점 미만 = false)

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

다음에 의해서 참조됨 : OnResponseSpeakingsJudges(), OnThinkTimeFinished().

◆ BlueprintOpenAnimation

UWidgetAnimation* UBasePopup::BlueprintOpenAnimation
protectedinherited

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

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

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

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

◆ Border_Question

TObjectPtr<class UBorder> UPopup_DailyStudy::Border_Question
protected

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

다음에 의해서 참조됨 : LoadCurQuestion(), ShowCorrectData().

◆ Btn_Close

TObjectPtr<class UTextureButton> UPopup_DailyStudy::Btn_Close
protected

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

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

◆ Canvas_Correct

TObjectPtr<class UCanvasPanel> UPopup_DailyStudy::Canvas_Correct
protected

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

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

◆ Canvas_Question

TObjectPtr<class UCanvasPanel> UPopup_DailyStudy::Canvas_Question
protected

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

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

◆ CorrectAnswerCount

int32 UPopup_DailyStudy::CorrectAnswerCount = 0
private

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

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

◆ CorrectVideoSource

TObjectPtr<class UMediaSource> UPopup_DailyStudy::CorrectVideoSource
private

정답 영상 소스

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

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

◆ CountDown_Widget

TObjectPtr<class UCountDown> UPopup_DailyStudy::CountDown_Widget
protected

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

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

◆ CurIndex

int32 UPopup_DailyStudy::CurIndex = 0
private

현재 질문 인덱스 (0-based)

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

다음에 의해서 참조됨 : GetCurrentQuestionText(), InitPopup(), LoadCurQuestion(), MoveToNextQuestion(), OnResponseSpeakingsJudges(), OnThinkTimeFinished(), ShowCorrectData().

◆ CurrentScore

int32 UPopup_DailyStudy::CurrentScore = 0
private

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

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

◆ Img_Correct

TObjectPtr<class UImage> UPopup_DailyStudy::Img_Correct
protected

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

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

◆ MediaPlayer

TObjectPtr<class UMediaPlayer> UPopup_DailyStudy::MediaPlayer
private

미디어 플레이어

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

다음에 의해서 참조됨 : CheckVideoPlayback(), NativeConstruct(), NativeDestruct(), OnVideoFinished(), PlayVideo().

◆ MediaTexture

TObjectPtr<class UMediaTexture> UPopup_DailyStudy::MediaTexture
private

미디어 텍스처

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

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

◆ NextTimerHandle

FTimerHandle UPopup_DailyStudy::NextTimerHandle
private

다음 문제 이동 타이머

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

다음에 의해서 참조됨 : NativeDestruct(), OnResponseListenAudio().

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

◆ ProgressBar_RemainTime

TObjectPtr<class UCircularProgressBar> UPopup_DailyStudy::ProgressBar_RemainTime
protected

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

다음에 의해서 참조됨 : StartThinkTimer(), UpdateThinkTimer().

◆ QuestionList

TArray<struct FWordData> UPopup_DailyStudy::QuestionList
private

AI 생성 단어 데이터 목록 (한글/영어/발음)

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

다음에 의해서 참조됨 : GetCurrentQuestionText(), InitPopup(), LoadCurQuestion(), MoveToNextQuestion(), OnResponseSpeakingsJudges(), OnThinkTimeFinished(), ShowCorrectData().

◆ RemainingThinkTime

float UPopup_DailyStudy::RemainingThinkTime = 0.f
private

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

다음에 의해서 참조됨 : StartThinkTimer(), UpdateThinkTimer().

◆ Rich_Text

TObjectPtr<class URichTextBlock> UPopup_DailyStudy::Rich_Text
protected

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

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

◆ ThinkingTimerHandle

FTimerHandle UPopup_DailyStudy::ThinkingTimerHandle
private

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

다음에 의해서 참조됨 : NativeDestruct(), OnAudioCapture(), OnThinkTimeFinished(), StartThinkTimer().

◆ Txt_Correct

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_Correct
protected

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

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

◆ Txt_CurScore

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_CurScore
protected

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

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

◆ Txt_Infomation

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_Infomation
protected

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

다음에 의해서 참조됨 : LoadCurQuestion(), ShowCorrectData().

◆ Txt_QuestionProgress

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_QuestionProgress
protected

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

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

◆ Txt_RemainTime

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_RemainTime
protected

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

다음에 의해서 참조됨 : StartThinkTimer(), UpdateThinkTimer().

◆ Txt_SubTitle

TObjectPtr<class UTextBlock> UPopup_DailyStudy::Txt_SubTitle
protected

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

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

◆ VideoCheckTimerHandle

FTimerHandle UPopup_DailyStudy::VideoCheckTimerHandle
private

영상 재생 시간 체크 타이머

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

다음에 의해서 참조됨 : CheckVideoPlayback(), NativeDestruct(), OnVideoFinished(), PlayVideo().

◆ VideoEndTime

float UPopup_DailyStudy::VideoEndTime = 3.0f
private

영상 재생 종료 시간 (초)

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

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

◆ VideoStartTime

float UPopup_DailyStudy::VideoStartTime = 0.0f
private

영상 재생 시작 시간 (초)

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

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

◆ WrongVideoSource

TObjectPtr<class UMediaSource> UPopup_DailyStudy::WrongVideoSource
private

오답 영상 소스

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

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


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