7#include "EngineUtils.h"
9#include "Net/UnrealNetwork.h"
12#include "Kismet/KismetSystemLibrary.h"
20 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
51 return TEXT(
"You are a helpful assistant.");
57 auto GetQuestStatus = [](
bool bCompleted,
bool bInProgress) ->
const TCHAR*
59 if (bCompleted)
return TEXT(
"V");
60 if (bInProgress)
return TEXT(
"=");
65 FString StatusMsg = FString::Printf(TEXT(
"%s %s %s %s"),
75 PC->UpdateQuestOrderWidget(StatusMsg);
83 PC->UpdateQuestInfoWidget();
92void ALingoPlayerState::Server_SetSelectedWord1_Implementation(
const FString& Word1)
95 if (
QuestRole == EQuestRole::OnlyQuestion2)
97 PRINTLOG(TEXT(
"[PlayerState] ServerSetSelectedSymbol - Access denied for OnlyQuestion2 role"));
104 PRINTLOG(TEXT(
"[PlayerState] Symbol selected: %s"), *Word1);
107bool ALingoPlayerState::Server_SetSelectedWord1_Validate(
const FString& Word1)
113void ALingoPlayerState::Server_SetSelectedWord2_Implementation(
const FString& Word2)
116 if (
QuestRole == EQuestRole::OnlyQuestion1)
118 PRINTLOG(TEXT(
"[PlayerState] ServerSetSelectedColor - Access denied for OnlyQuestion1 role"));
125 PRINTLOG(TEXT(
"[PlayerState] Color selected: %s"), *Word2);
128bool ALingoPlayerState::Server_SetSelectedWord2_Validate(
const FString& Word2)
138 PRINTLOG(TEXT(
"[PlayerState] Evaluation result added - Total results: %d, Feedback: %s"),
142void ALingoPlayerState::Server_NotifySpeakDataReady_Implementation()
145 if (UWorld* World = GetWorld())
147 for (TActorIterator<ASpeakStageActor> It(World); It; ++It)
154 PRINTLOG(TEXT(
"[ALingoPlayerState] Client is ready. Starting SpeakQuest for: %s"), *GetPlayerName());
160 PRINTLOG(TEXT(
"[ALingoPlayerState] Server_NotifySpeakDataReady - ASpeakStageActor not found in world!"));
195 PRINTLOG(TEXT(
"[PlayerState] OnRep_SymbolWrong: %s"),
bWrongWord1 ? TEXT(
"true") : TEXT(
"false"));
200 PRINTLOG(TEXT(
"[PlayerState] OnRep_ColorWrong: %s"),
bWrongWord2 ? TEXT(
"true") : TEXT(
"false"));
313 PC->UpdateQuestInfoWidget();
316 auto GetQuestStatus = [](
bool bCompleted,
bool bInProgress) ->
const TCHAR*
318 if (bCompleted)
return TEXT(
"V");
319 if (bInProgress)
return TEXT(
"=");
324 FString StatusMsg = FString::Printf(TEXT(
"%s %s %s %s"),
330 PC->UpdateQuestOrderWidget(StatusMsg);
APlayerControl 선언에 대한 Doxygen 주석을 제공합니다.
EQuestRole
Read 퀘스트에서 플레이어의 역할을 정의합니다.
YiSan 전반에서 사용하는 공용 인터페이스를 선언합니다.
#define PRINTLOG(fmt,...)
#define ENUM_TO_NAME(EnumType, Value)
void AddSpeakJudes(const FResponseSpeakingJudes &EvaluationResult)
SpeakQuest 평가 결과를 저장합니다 (Server에서 호출됨)
FString SelectedWord2
선택한 색상 (문제2 답변)
bool GetCurrentSpeakQuestion(int32 StepIndex, FSpeakStageQuestion &Out) const
void SetListenQuestIng(bool bInProgress)
ListenQuest 진행 상태 설정 (서버에서만 호출)
bool bSpeakQuestIng
SpeakQuest 진행 여부 플래그
FString SelectedWord1
선택한 심볼 (문제1 답변)
void Server_NotifySpeakDataReady()
클라이언트가 SpeakScenarioData 수신 준비 완료를 서버에 알립니다.
void OnRep_SpeakScenarioData()
SpeakScenarioData 복제 알림 함수
void SetSpeakQuestCompleted()
SpeakQuest 완료 처리 (서버에서만 호출)
void SetWriteQuestIng(bool bInProgress)
WriteQuest 진행 상태 설정 (서버에서만 호출)
virtual void GetLifetimeReplicatedProps(TArray< class FLifetimeProperty > &OutLifetimeProps) const override
void SetListenQuestCompleted()
ListenQuest 완료 처리 (서버에서만 호출)
bool bWriteQuestCompleted
WriteQuest 완료 여부 플래그
bool bSpeakQuestCompleted
SpeakQuest 완료 여부 플래그
TArray< struct FResponseSpeakingJudes > SpeakJudesResults
SpeakQuest 평가 결과 목록
void SetSpeakQuestIng(bool bInProgress)
SpeakQuest 진행 상태 설정 (서버에서만 호출)
bool bWriteQuestIng
WriteQuest 진행 여부 플래그
void SetReadQuestIng(bool bInProgress)
ReadQuest 진행 상태 설정 (서버에서만 호출)
FString GetChatContext() const
Chat AI의 Context를 반환합니다.
bool bWrongWord1
심볼 오답 플래그
FResponseSpeakScenario SpeakScenarioData
void OnUpdateSpeakScenarioData()
SpeakScenarioData가 업데이트될 때 Host와 Client 모두에서 호출되는 공통 함수입니다.
void SetReadQuestCompleted()
ReadQuest 완료 처리 (서버에서만 호출)
bool bWrongWord2
색상 오답 플래그
void OnRep_SelectedWord2()
색상 선택 상태 복제 콜백
bool bReadQuestIng
ReadQuest 진행 여부 플래그
void OnRep_WrongWord2()
색상 오답 플래그 복제 콜백
EQuestRole QuestRole
플레이어 역할 (싱글/멀티에서 문제1, 문제2 구분)
void SetWriteQuestCompleted()
WriteQuest 완료 처리 (서버에서만 호출)
bool bListenQuestIng
ListenQuest 진행 여부 플래그
bool bListenQuestCompleted
ListenQuest 완료 여부 플래그
void OnRep_WrongWord1()
심볼 오답 플래그 복제 콜백
void OnRep_QuestState()
퀘스트 상태 변경 시 호출되는 복제 알림 함수
bool bReadQuestCompleted
ReadQuest 완료 여부 플래그
void OnRep_SelectedWord1()
심볼 선택 상태 복제 콜백
void UpdateQuestRole(EQuestRole QuestRole)
void StartStageForPlayer(class ALingoPlayerState *Player)
특정 플레이어에 대해 Speak Stage를 시작합니다.
TArray< FSpeakStageQuestion > speak_quest_data
오디오 질문 목록
Speaking Questions 응답 구조체입니다.
SpeakQuest 오디오 질문 데이터 구조체입니다.