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

#include <APlayerControl.h>

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

Public 멤버 함수

 APlayerControl ()
 
void Client_EndSpeakQuest ()
 SpeakQuest 완료를 클라이언트에게 알리고 관련 UI를 최종 처리합니다.
 
void Client_InteractKiosk ()
 
void Client_OpenHowToPlay (EQuestType InType)
 
void Client_RequestSpeakScenario (class AWheatly *Wheatly)
 Client에게 Speak 시나리오 데이터를 요청하도록 지시 (Client RPC)
 
void Client_ToastMessage (const FString &Message)
 
void Client_UpdateSpeakQuest (int32 StepIndex)
 SpeakQuest의 현재 단계를 클라이언트에게 업데이트합니다. (Toast, TTS 포함)
 
class UChatHistorySystem * GetChatHistorySystem () const
 Chat History System에 접근합니다.
 
int32 GetUserId () const
 
const FResponseUserMeGetUserInfo () const
 
FString GetUserName () const
 
bool HasUserInfo () const
 
void Multicast_OpenHowToPlay (EQuestType InType)
 
void OnTutorialCompleted ()
 
void Server_SendDoorMessage (int32 InDoorIndex, bool bOpen)
 Door 메시지를 서버를 통해 전송 (Server RPC)
 
void Server_SetUserInfo (const FResponseUserMe &InUserInfo)
 
void Server_SyncSpeakScenarioData (class AWheatly *Wheatly, const struct FResponseSpeakScenario &Data)
 Client에서 받은 시나리오 데이터를 Wheatly에 전달 (Server RPC)
 
void ServerRPC_SendAIQuestion (const FString &Question)
 AI 질문을 서버로 전송하고 응답을 받아 채팅으로 표시합니다.
 
void ServerRPC_SendChat (const FText &inMessage)
 
bool ShouldSkipTutorial () const
 
void StartTutorialManually ()
 
void UpdateQuestInfoWidget ()
 퀘스트 상태에 따라 QuestInfoWidget 업데이트
 
void UpdateQuestOrderWidget (const FString &inQuestOrder)
 
void UpdateQuestRole (EQuestRole QuestRole)
 

Public 속성

TObjectPtr< class UChatHistorySystem > ChatHistorySystem
 Chat History 관리 컴포넌트
 
class UTutorialComponent * TutorialComponent
 

Protected 멤버 함수

virtual void BeginPlay () override
 
void OnChat (const FInputActionValue &Value)
 
void OnDoorMessage (int32 InDoorIndex, bool bInOpen, AActor *EventInstigator)
 DoorMessage 이벤트 핸들러
 
void OnGrab (const FInputActionValue &Value)
 
void OnGrabRelease (const FInputActionValue &Value)
 
void OnHistory (const FInputActionValue &Value)
 
void OnHook (const FInputActionValue &Value)
 
void OnHowToCtrl (const FInputActionValue &Value)
 
void OnHowToPlay (const FInputActionValue &Value)
 
void OnInfo (const FInputActionValue &Value)
 
void OnInteract (const FInputActionValue &Value)
 
void OnJump (const FInputActionValue &Value)
 
void OnLook (const FInputActionValue &Value)
 
void OnMove (const FInputActionValue &Value)
 
void OnRecordPressed (const FInputActionValue &Value)
 
void OnRecordReleased (const FInputActionValue &Value)
 
void OnRun (const FInputActionValue &Value)
 
void OnStopMove (const FInputActionValue &Value)
 
void Server_OnGrab ()
 
void Server_OnGrabRelease ()
 
void Server_OnHook ()
 
void Server_OnInteract ()
 
void Server_RequestDrop ()
 
virtual void SetupInputComponent () override
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Chat
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Grab
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_History
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Hook
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_HowToCtrl
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_HowToPlay
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Info
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Interact
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Jump
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Look
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Move
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Record
 
 UPROPERTY (EditDefaultsOnly, Category="Input") TObjectPtr< class UInputAction > IA_Run
 

Protected 속성

TObjectPtr< class UInputMappingContext > IMC_Default
 

Private 멤버 함수

class IControllableGetControllable () const
 
void OnChatAnswerReceived (FResponseChatAnswers &ResponseData, bool bWasSuccessful)
 AI 응답을 받았을 때 Bot 정보로 채팅에 표시합니다.
 
void OnResponseSpeakResult (FResponseSpeakResult &ResponseData, bool bWasSuccessful)
 
void OpenHowToPlay (EQuestType QuestType)
 
void RequestDrop (APlayerControl *Requester)
 
void RequestSpeakResult ()
 
void TEST_AddItemToBoxList ()
 
void TEST_DropperDropProcess ()
 
void UpdateSpeakWidget (int32 StepIndex)
 

Private 속성

FResponseUserMe UserInfo
 사용자 정보 (레벨 전환에서도 유지됨)
 

상세한 설명

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

생성자 & 소멸자 문서화

◆ APlayerControl()

APlayerControl::APlayerControl ( )

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

66{
68
82
83 TutorialComponent = CreateDefaultSubobject<UTutorialComponent>(TEXT("TutorialComponent"));
84 ChatHistorySystem = CreateDefaultSubobject<UChatHistorySystem>(TEXT("ChatHistorySystem"));
85}
#define IMC_DEFAULT_PATH
#define IA_HOWTOCTRL_PATH
#define IA_HISTORY_PATH
#define IA_INFO_PATH
#define IA_INTERACT_PATH
#define IA_JUMP_PATH
#define IA_RECORD_PATH
#define IA_LOOK_PATH
#define IA_HOWTOPLAY_PATH
#define IA_RUN_PATH
#define IA_MOVE_PATH
#define IA_GRAB_PATH
#define IA_CHAT_PATH
#define IA_HOOK_PATH
class UTutorialComponent * TutorialComponent
TObjectPtr< class UChatHistorySystem > ChatHistorySystem
Chat History 관리 컴포넌트
TObjectPtr< class UInputMappingContext > IMC_Default
static T * LoadAsset(const TCHAR *Path)

다음을 참조함 : ChatHistorySystem, IA_CHAT_PATH, IA_GRAB_PATH, IA_HISTORY_PATH, IA_HOOK_PATH, IA_HOWTOCTRL_PATH, IA_HOWTOPLAY_PATH, IA_INFO_PATH, IA_INTERACT_PATH, IA_JUMP_PATH, IA_LOOK_PATH, IA_MOVE_PATH, IA_RECORD_PATH, IA_RUN_PATH, IMC_Default, IMC_DEFAULT_PATH, FComponentHelper::LoadAsset(), TutorialComponent.

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

멤버 함수 문서화

◆ BeginPlay()

void APlayerControl::BeginPlay ( )
overrideprotectedvirtual

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

88{
89 Super::BeginPlay();
90
91 if (auto LP = GetLocalPlayer())
92 {
93 if (auto SubSystem = LP->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
94 {
95 if (IMC_Default)
96 {
97 SubSystem->ClearAllMappings();
98 SubSystem->AddMappingContext(IMC_Default, 0);
99 }
100 }
101 }
102 if (IsLocalController())
103 {
104 UserInfo = ULingoGameInstanceSubsystem::Get(GetWorld())->GetUserInfo();
106
107 // 맵 로딩 완료 시 로딩 서클 숨김
108 if (ULoadingCircleManager* LoadingManager = ULoadingCircleManager::Get(GetWorld()))
109 LoadingManager->LoadingCircle(false);
110 }
111
112 // 서버에서만 DoorMessage 구독
113 if (HasAuthority())
114 {
115 UBroadcastManager::Get(GetWorld())->OnDoorMessage.AddDynamic(this, &APlayerControl::OnDoorMessage);
116 }
117}
FResponseUserMe UserInfo
사용자 정보 (레벨 전환에서도 유지됨)
void Server_SetUserInfo(const FResponseUserMe &InUserInfo)
void OnDoorMessage(int32 InDoorIndex, bool bInOpen, AActor *EventInstigator)
DoorMessage 이벤트 핸들러
전역 로딩 서클의 표시 여부를 관리하는 LocalPlayerSubsystem입니다.

다음을 참조함 : IMC_Default, OnDoorMessage(), Server_SetUserInfo(), UserInfo.

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

◆ Client_EndSpeakQuest()

void APlayerControl::Client_EndSpeakQuest ( )

SpeakQuest 완료를 클라이언트에게 알리고 관련 UI를 최종 처리합니다.

◆ Client_InteractKiosk()

void APlayerControl::Client_InteractKiosk ( )

◆ Client_OpenHowToPlay()

void APlayerControl::Client_OpenHowToPlay ( EQuestType  InType)

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

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

◆ Client_RequestSpeakScenario()

void APlayerControl::Client_RequestSpeakScenario ( class AWheatly Wheatly)

Client에게 Speak 시나리오 데이터를 요청하도록 지시 (Client RPC)

매개변수
Wheatly[in] 요청을 시작한 Wheatly 액터

◆ Client_ToastMessage()

void APlayerControl::Client_ToastMessage ( const FString &  Message)

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

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

◆ Client_UpdateSpeakQuest()

void APlayerControl::Client_UpdateSpeakQuest ( int32  StepIndex)

SpeakQuest의 현재 단계를 클라이언트에게 업데이트합니다. (Toast, TTS 포함)

◆ GetChatHistorySystem()

class UChatHistorySystem * APlayerControl::GetChatHistorySystem ( ) const
inline

Chat History System에 접근합니다.

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

142{ return ChatHistorySystem; }

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

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

◆ GetControllable()

IControllable * APlayerControl::GetControllable ( ) const
private

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

157{
158 APawn* P = GetPawn();
159 if (!P)
160 return nullptr;
161
162 // UObject 기반 UInterface 라면 Cast 가능
163 if (IControllable* C = Cast<IControllable>(P))
164 return C;
165
166 return nullptr;
167}

다음에 의해서 참조됨 : OnInfo(), OnJump(), OnLook(), OnMove(), OnRecordPressed(), OnRecordReleased(), OnRun(), OnStopMove().

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

◆ GetUserId()

int32 APlayerControl::GetUserId ( ) const
inline

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

31{ return UserInfo.id; }

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

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

◆ GetUserInfo()

const FResponseUserMe & APlayerControl::GetUserInfo ( ) const
inline

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

32{ return UserInfo; }

◆ GetUserName()

FString APlayerControl::GetUserName ( ) const
inline

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

30{ return UserInfo.username; }

◆ HasUserInfo()

bool APlayerControl::HasUserInfo ( ) const
inline

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

29{ return GetUserId() > 0; }
int32 GetUserId() const

◆ Multicast_OpenHowToPlay()

void APlayerControl::Multicast_OpenHowToPlay ( EQuestType  InType)

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

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

◆ OnChat()

void APlayerControl::OnChat ( const FInputActionValue &  Value)
protected

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

320{
321 // GameAndUI로??
322 FInputModeUIOnly uiInputMode;
323 SetInputMode(uiInputMode);
324
325 APlayerActor* player = Cast<APlayerActor>(GetPawn());
326 player->GetMainWidget()->SetFocusOnChat();
327}
Main character driven directly by the player.
class UMainWidget * GetMainWidget() const
메인 위젯을 가져옵니다.
void SetFocusOnChat()

다음을 참조함 : APlayerActor::GetMainWidget(), UMainWidget::SetFocusOnChat().

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

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

◆ OnChatAnswerReceived()

void APlayerControl::OnChatAnswerReceived ( FResponseChatAnswers ResponseData,
bool  bWasSuccessful 
)
private

AI 응답을 받았을 때 Bot 정보로 채팅에 표시합니다.

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

763{
764 if (!bWasSuccessful || ResponseData.answer.IsEmpty())
765 {
766 PRINTLOG(TEXT("[AI Chat] Failed to receive AI response"));
767 return;
768 }
769
770 // AI 응답을 Bot 정보로 채팅에 표시
771 if (auto* GS = GetWorld()->GetGameState<ALingoGameState>())
772 {
773 FText AIAnswer = FText::FromString(ResponseData.answer);
774 // Bot은 PlayerIndex -1 사용
775 GS->MulticastRPC_SendChat(GS->GetBotInfo(), AIAnswer, DefineData::BotID);
776
777 // Chat History 저장
779 ChatHistorySystem->SaveChatHistory(ResponseData.question, ResponseData.answer);
780 }
781
782 // ai tutor 봇에 메시지 표시
783 if (auto playerActor = Cast<APlayerActor>(GetPawn()))
784 {
785 playerActor->GetMiniOwlBot()->UpdateText(ResponseData.answer);
786 }
787}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
static const int32 BotID
Definition Onepiece.h:56

다음을 참조함 : FResponseChatAnswers::answer, DefineData::BotID, ChatHistorySystem, PRINTLOG, FResponseChatAnswers::question.

◆ OnDoorMessage()

void APlayerControl::OnDoorMessage ( int32  InDoorIndex,
bool  bInOpen,
AActor *  EventInstigator 
)
protected

DoorMessage 이벤트 핸들러

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

790{
791 // 서버에서만 실행
792 if (!HasAuthority())
793 return;
794
795 // 문이 열릴 때만 처리
796 if (!bInOpen)
797 return;
798
799 // PlayerState 가져오기
800 ALingoPlayerState* PS = GetPlayerState<ALingoPlayerState>();
801 if (!PS)
802 return;
803
804 // End DoorIndex에 따라 퀘스트 완료 처리
805 if (InDoorIndex == DoorGroup::Step1_End)
806 {
807 // ReadQuest: 협력 퀘스트, 모든 플레이어 완료
809 }
810 else if (InDoorIndex == DoorGroup::Step2_End)
811 {
812 // ListenQuest: 협력 퀘스트, 모든 플레이어 완료
814 }
815 else if (InDoorIndex == DoorGroup::Step3_End)
816 {
817 // SpeakQuest: 개인 퀘스트, EventInstigator 확인
818 if (EventInstigator != nullptr && EventInstigator != GetPawn())
819 return;
820
822 }
823 else if (InDoorIndex == DoorGroup::Step4_End)
824 {
825 // WriteQuest: 개인 퀘스트, EventInstigator 확인
826 if (EventInstigator != nullptr && EventInstigator != GetPawn())
827 return;
828
830 }
831
832 if (InDoorIndex == DoorGroup::Step1_Tutorial)
833 {
835 }
836 else if (InDoorIndex == DoorGroup::Step2_Tutorial)
837 {
839 }
840 else if (InDoorIndex == DoorGroup::Step3_Tutorial)
841 {
842 // 개인 퀘스트: Instigator가 본인인지 확인 후 해당 클라이언트에게만 알림
843 if (EventInstigator == GetPawn())
844 {
846 }
847 }
848 else if (InDoorIndex == DoorGroup::Step3_Tutorial)
849 {
850 // 개인 퀘스트: Instigator가 본인인지 확인 후 해당 클라이언트에게만 알림
851 if (EventInstigator == GetPawn())
852 {
854 }
855 }
856}
void SetSpeakQuestCompleted()
SpeakQuest 완료 처리 (서버에서만 호출)
void SetListenQuestCompleted()
ListenQuest 완료 처리 (서버에서만 호출)
void SetReadQuestCompleted()
ReadQuest 완료 처리 (서버에서만 호출)
void SetWriteQuestCompleted()
WriteQuest 완료 처리 (서버에서만 호출)
void Client_OpenHowToPlay(EQuestType InType)
void Multicast_OpenHowToPlay(EQuestType InType)
static const int32 Step3_End
Definition Onepiece.h:33
static const int32 Step1_Tutorial
Definition Onepiece.h:20
static const int32 Step2_Tutorial
Definition Onepiece.h:28
static const int32 Step1_End
Definition Onepiece.h:25
static const int32 Step4_End
Definition Onepiece.h:37
static const int32 Step2_End
Definition Onepiece.h:29
static const int32 Step3_Tutorial
Definition Onepiece.h:32

다음을 참조함 : Client_OpenHowToPlay(), Listen, Multicast_OpenHowToPlay(), Read, ALingoPlayerState::SetListenQuestCompleted(), ALingoPlayerState::SetReadQuestCompleted(), ALingoPlayerState::SetSpeakQuestCompleted(), ALingoPlayerState::SetWriteQuestCompleted(), Speak, DoorGroup::Step1_End, DoorGroup::Step1_Tutorial, DoorGroup::Step2_End, DoorGroup::Step2_Tutorial, DoorGroup::Step3_End, DoorGroup::Step3_Tutorial, DoorGroup::Step4_End, Write.

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

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

◆ OnGrab()

void APlayerControl::OnGrab ( const FInputActionValue &  Value)
protected

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

257{
259}
void Server_OnGrab()

다음을 참조함 : Server_OnGrab().

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

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

◆ OnGrabRelease()

void APlayerControl::OnGrabRelease ( const FInputActionValue &  Value)
protected

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

262{
264}
void Server_OnGrabRelease()

다음을 참조함 : Server_OnGrabRelease().

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

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

◆ OnHistory()

void APlayerControl::OnHistory ( const FInputActionValue &  Value)
protected

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

330{
331 if (auto Popup = UPopupManager::ShowPopupAs<UPopup_History>(GetWorld(), EPopupType::History))
332 {
333 Popup->InitPopup();
334 }
335}

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

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

◆ OnHook()

void APlayerControl::OnHook ( const FInputActionValue &  Value)
protected

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

315{
317}
void Server_OnHook()

다음을 참조함 : Server_OnHook().

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

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

◆ OnHowToCtrl()

void APlayerControl::OnHowToCtrl ( const FInputActionValue &  Value)
protected

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

339{
341}
void OpenHowToPlay(EQuestType QuestType)

다음을 참조함 : None, OpenHowToPlay().

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

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

◆ OnHowToPlay()

void APlayerControl::OnHowToPlay ( const FInputActionValue &  Value)
protected

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

345{
346 // 현재 진행 중인 퀘스트 타입 확인
347 if (auto PS = GetPlayerState<ALingoPlayerState>())
348 {
349 // Read 퀘스트 진행 중
350 if (PS->bReadQuestIng && !PS->bReadQuestCompleted)
351 {
353 }
354 else if (PS->bListenQuestIng && !PS->bListenQuestCompleted)
355 {
357 }
358 else if (PS->bSpeakQuestIng && !PS->bSpeakQuestCompleted)
359 {
361 }
362 else if (PS->bWriteQuestIng && !PS->bWriteQuestCompleted)
363 {
365 }
366 }
367}

다음을 참조함 : Listen, OpenHowToPlay(), Read, Speak, Write.

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

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

◆ OnInfo()

void APlayerControl::OnInfo ( const FInputActionValue &  Value)
protected

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

249{
251 {
252 C->Cmd_Info();
253 }
254}
class IControllable * GetControllable() const

다음을 참조함 : GetControllable().

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

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

◆ OnInteract()

void APlayerControl::OnInteract ( const FInputActionValue &  Value)
protected

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

267{
268 // 튜토리얼 체크 (로컬 플레이어만, 실제 동작은 서버에서만)
269 APlayerActor* MyPlayer = Cast<APlayerActor>(GetPawn());
270 if (MyPlayer && MyPlayer->InteractionSystem && MyPlayer->InteractionSystem->CurrentTarget)
271 {
272 // Button 타입인 경우 튜토리얼 체크
273 if (MyPlayer->InteractionSystem->CurrentTarget->InteractionType == EInteractionType::Button)
274 {
275 AActor* TargetActor = MyPlayer->InteractionSystem->CurrentTarget->GetOwner();
276 if (UTutorialComponent* Tutorial = FindComponentByClass<UTutorialComponent>())
277 {
278 Tutorial->OnObjectInteracted(TargetActor);
279 }
280 }
281 }
282
284}
TObjectPtr< class UInteractionSystem > InteractionSystem
void Server_OnInteract()

다음을 참조함 : APlayerActor::InteractionSystem, Server_OnInteract().

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

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

◆ OnJump()

void APlayerControl::OnJump ( const FInputActionValue &  Value)
protected

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

219{
221 C->Cmd_Jump();
222
223 //this->TEST_DropperDropProcess();
224 // this->TEST_AddItemToBoxList();
225}

다음을 참조함 : GetControllable().

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

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

◆ OnLook()

void APlayerControl::OnLook ( const FInputActionValue &  Value)
protected

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

205{
207 C->Cmd_Look(Value.Get<FVector2D>());
208}

다음을 참조함 : GetControllable().

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

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

◆ OnMove()

void APlayerControl::OnMove ( const FInputActionValue &  Value)
protected

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

199{
201 C->Cmd_Move(Value.Get<FVector2D>());
202}

다음을 참조함 : GetControllable().

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

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

◆ OnRecordPressed()

void APlayerControl::OnRecordPressed ( const FInputActionValue &  Value)
protected

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

237{
239 C->Cmd_RecordStart();
240}

다음을 참조함 : GetControllable().

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

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

◆ OnRecordReleased()

void APlayerControl::OnRecordReleased ( const FInputActionValue &  Value)
protected

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

243{
245 C->Cmd_RecordEnd();
246}

다음을 참조함 : GetControllable().

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

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

◆ OnResponseSpeakResult()

void APlayerControl::OnResponseSpeakResult ( FResponseSpeakResult ResponseData,
bool  bWasSuccessful 
)
private

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

647{
648 if (bWasSuccessful)
649 {
650 if ( auto PS = GetPlayerState<ALingoPlayerState>() )
651 {
652 // PS에 결과 데이터를 저장한다
653 PS->SpeakResult = ResponseData;
654
655 if ( auto Popup = UPopupManager::ShowPopupAs<UPopup_SpeakResult>(GetWorld(), EPopupType::SpeakResult) )
656 Popup->InitPopup(ResponseData);
657 }
658 }
659 else
660 {
661 PRINTLOG(TEXT("[Result] Quest result Failed"));
662 }
663}

다음을 참조함 : PRINTLOG, ALingoPlayerState::SpeakResult.

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

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

◆ OnRun()

void APlayerControl::OnRun ( const FInputActionValue &  Value)
protected

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

229{
231 {
232 C->Cmd_Run();
233 }
234}

다음을 참조함 : GetControllable().

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

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

◆ OnStopMove()

void APlayerControl::OnStopMove ( const FInputActionValue &  Value)
protected

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

211{
213 {
214 C->Cmd_StopMove();
215 }
216}

다음을 참조함 : GetControllable().

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

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

◆ OnTutorialCompleted()

void APlayerControl::OnTutorialCompleted ( )

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

192{
193 // 세이브 시스템에 여부 저장
194 const int32 UserId = ULingoGameHelper::GetUserId(GetWorld());
195 UConfigLibrary::SetUserBool(UserId, TEXT("TutorialCompleted"), true);
196}
static void SetUserBool(int32 UserId, const FString &Key, bool bValue, bool bAutoSave=true)
유저별 불린 설정 저장
static int32 GetUserId(const UObject *WorldContextObject)

다음을 참조함 : ULingoGameHelper::GetUserId(), UConfigLibrary::SetUserBool().

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

◆ OpenHowToPlay()

void APlayerControl::OpenHowToPlay ( EQuestType  QuestType)
private

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

370{
371 if (auto Popup = UPopupManager::ShowPopupAs<UPopup_HowToPlay>(GetWorld(), EPopupType::HowToPlay))
372 {
373 TArray<EHowToPlayPageType> PageTypes;
374
375 if ( QuestType == EQuestType::None )
376 {
377 PageTypes.Add(EHowToPlayPageType::Control_P1);
378 PageTypes.Add(EHowToPlayPageType::Control_P2);
379 PageTypes.Add(EHowToPlayPageType::Control_P3);
380 PageTypes.Add(EHowToPlayPageType::Control_P4);
381 PageTypes.Add(EHowToPlayPageType::Control_P5);
382 PageTypes.Add(EHowToPlayPageType::Control_P6);
383 }
384 else if ( QuestType == EQuestType::Read )
385 {
386 PageTypes.Add(EHowToPlayPageType::Read_P1);
387 PageTypes.Add(EHowToPlayPageType::Read_P2);
388 PageTypes.Add(EHowToPlayPageType::Read_P3);
389 PageTypes.Add(EHowToPlayPageType::Read_P4);
390 }
391 else if ( QuestType == EQuestType::Listen )
392 {
393 PageTypes.Add(EHowToPlayPageType::Listen_P1);
394 PageTypes.Add(EHowToPlayPageType::Listen_P2);
395 PageTypes.Add(EHowToPlayPageType::Listen_P3);
396 PageTypes.Add(EHowToPlayPageType::Listen_P4);
397 }
398 else if ( QuestType == EQuestType::Speak )
399 {
400 PageTypes.Add(EHowToPlayPageType::Speak_P1);
401 PageTypes.Add(EHowToPlayPageType::Speak_P2);
402 PageTypes.Add(EHowToPlayPageType::Speak_P3);
403 }
404 else if ( QuestType == EQuestType::Write )
405 {
406 PageTypes.Add(EHowToPlayPageType::Write_P1);
407 PageTypes.Add(EHowToPlayPageType::Write_P2);
408 PageTypes.Add(EHowToPlayPageType::Write_P3);
409 }
410
411 Popup->InitPopup(PageTypes);
412 }
413}

다음을 참조함 : Listen, None, Read, Speak, Write.

다음에 의해서 참조됨 : OnHowToCtrl(), OnHowToPlay().

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

◆ RequestDrop()

void APlayerControl::RequestDrop ( APlayerControl Requester)
private

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

431{
432 if (auto World = GetWorld())
433 {
434 for (TActorIterator<ADropper> It(World); It; ++It)
435 {
436 ADropper* Dropper = *It;
437 if (Dropper)
438 {
439 if (Dropper->IsBusy() )
440 {
441 Requester->Client_ToastMessage( TEXT("Dropper is Busy") );
442 return;
443 }
444
445 FLuggageData tmpData;
446 tmpData.word1 = tmpData.word1.GetRandomAnimal();
447 tmpData.word2 = tmpData.word2.GetRandomColor();
448
449 Dropper->SetSpawnData(tmpData);
450 Dropper->SetSpawnClass( LoadClass<AActor>(nullptr, TEXT("/Game/CustomContents/Blueprints/Interactables/BP_Luggage.BP_Luggage_C")));
451 Dropper->RequestSpawn();
452 return;
453 }
454 }
455 }
456}
void SetSpawnData(const FLuggageData &InData)
[Luggage용] 스폰 전에 Dropper가 생성될 액터에게 넘겨줄 데이터 등록
Definition ADropper.h:48
void SetSpawnClass(TSubclassOf< AActor > InClass)
스폰 전에 Dropper가 어떤 클래스를 스폰할지 등록
Definition ADropper.h:45
FORCEINLINE bool IsBusy() const
Definition ADropper.h:54
bool RequestSpawn()
스폰 요청 (서버에서만 동작)
Definition ADropper.cpp:49
void Client_ToastMessage(const FString &Message)
FWordInfo word1
시나리오 단어 정보
Definition ADropper.h:18
FWordInfo word2
Definition ADropper.h:21
static FWordInfo GetRandomAnimal()
랜덤 동물 선택 - CSV 기반 하드코딩
static FWordInfo GetRandomColor()
랜덤 색상 선택 - CSV 기반 하드코딩

다음을 참조함 : Client_ToastMessage(), FWordInfo::GetRandomAnimal(), FWordInfo::GetRandomColor(), ADropper::IsBusy(), ADropper::RequestSpawn(), ADropper::SetSpawnClass(), ADropper::SetSpawnData(), FLuggageData::word1, FLuggageData::word2.

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

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

◆ RequestSpeakResult()

void APlayerControl::RequestSpeakResult ( )
private

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

629{
630 if ( auto GS = Cast<ALingoGameState>(GetWorld()->GetGameState()) )
631 {
632 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
633 {
634 FRequestSpeakResult SpeakRequest;
635 SpeakRequest.room_id = GS->GetRoomId();
636 SpeakRequest.user_id = GetUserId();
637 SpeakRequest.scenario_id = 1;
639 SpeakRequest.state_type = 0;
640 KLingoNetwork->RequestSpeakResult(SpeakRequest,
641 FResponseSpeakResultDelegate::CreateUObject(this, &APlayerControl::OnResponseSpeakResult));
642 }
643 }
644}
void OnResponseSpeakResult(FResponseSpeakResult &ResponseData, bool bWasSuccessful)
static int32 GetStageTypeIndex(const EQuestType QuestType)

다음을 참조함 : ULingoGameHelper::GetStageTypeIndex(), GetUserId(), OnResponseSpeakResult(), FRequestSpeakResult::room_id, FRequestSpeakResult::scenario_id, Speak, FRequestSpeakResult::stage_type, FRequestSpeakResult::state_type, FRequestSpeakResult::user_id.

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

◆ Server_OnGrab()

void APlayerControl::Server_OnGrab ( )
protected

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

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

◆ Server_OnGrabRelease()

void APlayerControl::Server_OnGrabRelease ( )
protected

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

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

◆ Server_OnHook()

void APlayerControl::Server_OnHook ( )
protected

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

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

◆ Server_OnInteract()

void APlayerControl::Server_OnInteract ( )
protected

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

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

◆ Server_RequestDrop()

void APlayerControl::Server_RequestDrop ( )
protected

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

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

◆ Server_SendDoorMessage()

void APlayerControl::Server_SendDoorMessage ( int32  InDoorIndex,
bool  bOpen 
)

Door 메시지를 서버를 통해 전송 (Server RPC)

매개변수
InDoorIndex[in] Door 인덱스
bOpen[in] 열기 여부

◆ Server_SetUserInfo()

void APlayerControl::Server_SetUserInfo ( const FResponseUserMe InUserInfo)

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

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

◆ Server_SyncSpeakScenarioData()

void APlayerControl::Server_SyncSpeakScenarioData ( class AWheatly Wheatly,
const struct FResponseSpeakScenario Data 
)

Client에서 받은 시나리오 데이터를 Wheatly에 전달 (Server RPC)

매개변수
Wheatly[in] 데이터를 전달할 Wheatly 액터
Data[in] Client에서 받은 시나리오 데이터

◆ ServerRPC_SendAIQuestion()

void APlayerControl::ServerRPC_SendAIQuestion ( const FString &  Question)

AI 질문을 서버로 전송하고 응답을 받아 채팅으로 표시합니다.

매개변수
Question[in] AI에게 보낼 질문 (이미 사용자 메시지는 채팅으로 전송된 상태)

◆ ServerRPC_SendChat()

void APlayerControl::ServerRPC_SendChat ( const FText &  inMessage)

◆ SetupInputComponent()

void APlayerControl::SetupInputComponent ( )
overrideprotectedvirtual

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

120{
121 Super::SetupInputComponent();
122
123 if (UEnhancedInputComponent* EIC = Cast<UEnhancedInputComponent>(InputComponent))
124 {
125 EIC->BindAction(IA_Move, ETriggerEvent::Triggered, this, &APlayerControl::OnMove);
126 EIC->BindAction(IA_Move, ETriggerEvent::Completed, this, &APlayerControl::OnStopMove);
127 EIC->BindAction(IA_Look, ETriggerEvent::Triggered, this, &APlayerControl::OnLook);
128
129 EIC->BindAction(IA_Jump, ETriggerEvent::Started, this, &APlayerControl::OnJump);
130
131 EIC->BindAction(IA_Record, ETriggerEvent::Started, this, &APlayerControl::OnRecordPressed);
132 EIC->BindAction(IA_Record, ETriggerEvent::Completed, this, &APlayerControl::OnRecordReleased);
133
134 EIC->BindAction(IA_Grab, ETriggerEvent::Started, this, &APlayerControl::OnGrab);
135 EIC->BindAction(IA_Grab, ETriggerEvent::Completed, this, &APlayerControl::OnGrabRelease);
136
137 EIC->BindAction(IA_Interact, ETriggerEvent::Started, this, &APlayerControl::OnInteract);
138 EIC->BindAction(IA_Run, ETriggerEvent::Started, this, &APlayerControl::OnRun);
139
140 EIC->BindAction(IA_Info, ETriggerEvent::Started, this, &APlayerControl::OnInfo);
141
142 EIC->BindAction(IA_Hook, ETriggerEvent::Started, this, &APlayerControl::OnHook);
143
144 EIC->BindAction(IA_Chat, ETriggerEvent::Started, this, &APlayerControl::OnChat);
145 EIC->BindAction(IA_History, ETriggerEvent::Started, this, &APlayerControl::OnHistory);
146 EIC->BindAction(IA_HowToCtrl, ETriggerEvent::Started, this, &APlayerControl::OnHowToCtrl);
147 EIC->BindAction(IA_HowToPlay, ETriggerEvent::Started, this, &APlayerControl::OnHowToPlay);
148 }
149}
void OnRecordReleased(const FInputActionValue &Value)
void OnJump(const FInputActionValue &Value)
void OnInteract(const FInputActionValue &Value)
void OnGrabRelease(const FInputActionValue &Value)
void OnMove(const FInputActionValue &Value)
void OnLook(const FInputActionValue &Value)
void OnChat(const FInputActionValue &Value)
void OnRun(const FInputActionValue &Value)
void OnInfo(const FInputActionValue &Value)
void OnGrab(const FInputActionValue &Value)
void OnHistory(const FInputActionValue &Value)
void OnHook(const FInputActionValue &Value)
void OnHowToCtrl(const FInputActionValue &Value)
void OnRecordPressed(const FInputActionValue &Value)
void OnHowToPlay(const FInputActionValue &Value)
void OnStopMove(const FInputActionValue &Value)

다음을 참조함 : OnChat(), OnGrab(), OnGrabRelease(), OnHistory(), OnHook(), OnHowToCtrl(), OnHowToPlay(), OnInfo(), OnInteract(), OnJump(), OnLook(), OnMove(), OnRecordPressed(), OnRecordReleased(), OnRun(), OnStopMove().

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

◆ ShouldSkipTutorial()

bool APlayerControl::ShouldSkipTutorial ( ) const

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

170{
171 const int32 UserId = ULingoGameHelper::GetUserId(GetWorld());
172
173 if (UConfigLibrary::GetUserBool(UserId, TEXT("TutorialCompleted"), false))
174 {
175 PRINTLOG(TEXT("[Tutorial] User %d already completed tutorial"), UserId);
176 return true; // 스킵
177 }
178
179 return false; // 튜토리얼 진행
180}
static bool GetUserBool(int32 UserId, const FString &Key, bool bDefaultValue=false)
유저별 불린 설정 읽기

다음을 참조함 : UConfigLibrary::GetUserBool(), ULingoGameHelper::GetUserId(), PRINTLOG.

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

◆ StartTutorialManually()

void APlayerControl::StartTutorialManually ( )

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

183{
185 {
186 TutorialComponent->StartTutorial();
187 PRINTLOG(TEXT("[Tutorial] Starting tutorial manually"));
188 }
189}

다음을 참조함 : PRINTLOG, TutorialComponent.

◆ TEST_AddItemToBoxList()

void APlayerControl::TEST_AddItemToBoxList ( )
private

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

675{
676 // 테스트: 랜덤 아이템 추가
677 if (auto BM = UBroadcastManager::Get(GetWorld()))
678 {
679 TArray<FResultStatData> TestItems;
680
681 // 랜덤하게 1~3개의 아이템 생성
682 int32 ItemCount = FMath::RandRange(1, 3);
683 for (int32 i = 0; i < ItemCount; ++i)
684 {
685 FResultStatData Item;
686
687 // 랜덤 위젯 타입 선택
688 int32 RandomType = FMath::RandRange(0, 3);
689 switch (RandomType)
690 {
691 case 0: // Grade
693 Item.GradeTextureType = static_cast<EResourceTextureType>(FMath::RandRange(0, 4)); // Rarity_D ~ Rarity_S
694 Item.TitleText = FText::FromString(TEXT("등급"));
695 break;
696
697 case 1: // Score
699 Item.ScoreValue = FMath::RandRange(100, 9999);
700 Item.TitleText = FText::FromString(TEXT("점수"));
701 break;
702
703 case 2: // Rate
705 Item.RatePercent = FMath::FRandRange(0.0f, 1.0f);
706 Item.TitleText = FText::FromString(TEXT("비율"));
707 break;
708
709 case 3: // Symbol
711 Item.SymbolValue = FString::SanitizeFloat( FMath::FRandRange(0.0f, 1.0f) );
712 Item.TitleText = FText::FromString(TEXT("심볼"));
713 break;
714 }
715
716 // 랜덤 색상 선택
717 Item.ColorType = static_cast<EColorStyleType>(FMath::RandRange(0, 7)); // Green ~ Gray
718
719 TestItems.Add(Item);
720 }
721
722 // BroadcastManager를 통해 전송
723 BM->SendAddItemToBoxList(TestItems);
724 }
725}
EColorStyleType
EResourceTextureType
Result Stat 위젯 통합 데이터 구조 위젯 타입, 색상 스타일, 각 타입별 데이터를 통합 관리
float RatePercent
Rate 타입 전용: 퍼센트 값 (0.0 ~ 1.0)
EColorStyleType ColorType
색상 스타일
FText TitleText
타이틀 텍스트
EResultItemWidgetType WidgetType
위젯 타입
EResourceTextureType GradeTextureType
Grade 타입 전용: 텍스처 타입
float ScoreValue
Score 타입 전용: 점수 값

다음을 참조함 : FResultStatData::ColorType, Grade, FResultStatData::GradeTextureType, Rate, FResultStatData::RatePercent, Score, FResultStatData::ScoreValue, Symbol, FResultStatData::SymbolValue, FResultStatData::TitleText, FResultStatData::WidgetType.

◆ TEST_DropperDropProcess()

void APlayerControl::TEST_DropperDropProcess ( )
private

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

666{
667 // 테스트 : 맵에 있는 ADropper를 찾아서 ALuggage를 스폰
668 if ( HasAuthority())
669 RequestDrop(this);
670 else
672}
void RequestDrop(APlayerControl *Requester)
void Server_RequestDrop()

다음을 참조함 : RequestDrop(), Server_RequestDrop().

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

◆ UpdateQuestInfoWidget()

void APlayerControl::UpdateQuestInfoWidget ( )

퀘스트 상태에 따라 QuestInfoWidget 업데이트

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

876{
877 // PlayerActor 가져오기
878 APlayerActor* PlayerActor = Cast<APlayerActor>(GetPawn());
879 if (!PlayerActor)
880 return;
881
882 // MainWidget 가져오기
883 UMainWidget* MainWidget = PlayerActor->GetMainWidget();
884 if (!MainWidget)
885 return;
886
887 // QuestInfoWidget 가져오기
888 UQuestInfoWidget* QuestWidget = MainWidget->GetQuestInfoWidget();
889 if (!QuestWidget)
890 return;
891
892 // PlayerState 가져오기
893 ALingoPlayerState* PS = GetPlayerState<ALingoPlayerState>();
894 if (!PS)
895 return;
896
897 // 퀘스트 상태 확인 및 위젯 업데이트
898 FString Title;
899 FString Description;
900 bool bShouldShow = false;
901
902 // ReadQuest 상태 확인
903 if (PS->bReadQuestIng && !PS->bReadQuestCompleted)
904 {
905 Title = TEXT("Mission Goal");
906 Description = TEXT("Place the object on the switch to open the gate");
907 bShouldShow = true;
908 }
909 else if (PS->bReadQuestCompleted && !PS->bListenQuestIng)
910 {
911 Title = TEXT("Move Food Court");
912 Description = TEXT("Move Food Court With Friend");
913 bShouldShow = true;
914 }
915 // ListenQuest 상태 확인
916 else if (PS->bListenQuestIng && !PS->bListenQuestCompleted)
917 {
918 Title = TEXT("Move Next Goal");
919 Description = TEXT("Place the object on the switch to open the gate");
920 bShouldShow = true;
921 }
922 else if (PS->bListenQuestCompleted && !PS->bSpeakQuestIng)
923 {
924 Title = TEXT("Move Jugdes");
925 Description = TEXT("Move Judes And Talk");
926 bShouldShow = true;
927 }
928 // SpeakQuest 상태 확인
929 else if (PS->bSpeakQuestIng && !PS->bSpeakQuestCompleted)
930 {
931 Title = TEXT("Press V Key And Talk");
932 Description = TEXT("Answer Judes Question");
933 bShouldShow = true;
934 }
935 else if (PS->bSpeakQuestCompleted && !PS->bWriteQuestIng)
936 {
937 // Speak 종료 후 바로 Write로 이어지는 경우 처리
938 // 잠시 숨김 처리 (또는 다른 메시지 표시)
939 bShouldShow = false;
940 }
941 // WriteQuest 상태 확인
942 else if (PS->bWriteQuestIng && !PS->bWriteQuestCompleted)
943 {
944 Title = TEXT("Move Paper");
945 Description = TEXT("Find Wirte Kiosk And Interaction");
946 bShouldShow = true;
947 }
948 else if (PS->bWriteQuestCompleted)
949 {
950 Title = TEXT("Move End Point");
951 Description = TEXT("Get Evalution");
952 bShouldShow = true;
953 }
954
955 // 위젯 업데이트
956 if (bShouldShow)
957 {
958 QuestWidget->UpdateQuestText(Title, Description);
959 QuestWidget->SetVisibility(ESlateVisibility::Visible);
960 }
961 else
962 {
963 QuestWidget->SetVisibility(ESlateVisibility::Collapsed);
964 }
965}
bool bSpeakQuestIng
SpeakQuest 진행 여부 플래그
bool bWriteQuestCompleted
WriteQuest 완료 여부 플래그
bool bSpeakQuestCompleted
SpeakQuest 완료 여부 플래그
bool bWriteQuestIng
WriteQuest 진행 여부 플래그
bool bReadQuestIng
ReadQuest 진행 여부 플래그
bool bListenQuestIng
ListenQuest 진행 여부 플래그
bool bListenQuestCompleted
ListenQuest 완료 여부 플래그
bool bReadQuestCompleted
ReadQuest 완료 여부 플래그
메인 UI 위젯
Definition UMainWidget.h:17
class UQuestInfoWidget * GetQuestInfoWidget() const
Definition UMainWidget.h:59
void UpdateQuestText(FString InTitle, FString InDescription)

다음을 참조함 : ALingoPlayerState::bListenQuestCompleted, ALingoPlayerState::bListenQuestIng, ALingoPlayerState::bReadQuestCompleted, ALingoPlayerState::bReadQuestIng, ALingoPlayerState::bSpeakQuestCompleted, ALingoPlayerState::bSpeakQuestIng, ALingoPlayerState::bWriteQuestCompleted, ALingoPlayerState::bWriteQuestIng, APlayerActor::GetMainWidget(), UMainWidget::GetQuestInfoWidget(), UQuestInfoWidget::UpdateQuestText().

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

◆ UpdateQuestOrderWidget()

void APlayerControl::UpdateQuestOrderWidget ( const FString &  inQuestOrder)

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

968{
969 // PlayerActor 가져오기
970 APlayerActor* PlayerActor = Cast<APlayerActor>(GetPawn());
971 if (!PlayerActor)
972 return;
973
974 // MainWidget 가져오기
975 UMainWidget* MainWidget = PlayerActor->GetMainWidget();
976 if (!MainWidget)
977 return;
978
979 // QuestInfoWidget 가져오기
980 UQuestOrderWidget* QuestOrderWidget = MainWidget->GetQuestOrderWidget();
981 if (!QuestOrderWidget)
982 return;
983
984 // PlayerState 가져오기
985 ALingoPlayerState* PS = GetPlayerState<ALingoPlayerState>();
986 if (!PS)
987 return;
988
989 // 위젯 업데이트
990 QuestOrderWidget->UpdateQuestOrder(inQuestOrder);
991 QuestOrderWidget->SetVisibility(ESlateVisibility::Visible);
992}
class UQuestOrderWidget * GetQuestOrderWidget() const
Definition UMainWidget.h:62
void UpdateQuestOrder(const FString &inQuestOrder)

다음을 참조함 : APlayerActor::GetMainWidget(), UMainWidget::GetQuestOrderWidget(), UQuestOrderWidget::UpdateQuestOrder().

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

◆ UpdateQuestRole()

void APlayerControl::UpdateQuestRole ( EQuestRole  QuestRole)

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

152{
153 UBroadcastManager::Get(GetWorld())->SendUpdateQuestRole(QuestRole);
154}

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

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

◆ UpdateSpeakWidget()

void APlayerControl::UpdateSpeakWidget ( int32  StepIndex)
private

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

618{
619 if (APlayerActor* PlayerActor = Cast<APlayerActor>(GetPawn()))
620 {
621 if (UMainWidget* MainWidget = PlayerActor->GetMainWidget())
622 {
623 MainWidget->UpdateSpeakWidget(StepIndex);
624 }
625 }
626}

다음을 참조함 : APlayerActor::GetMainWidget().

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

◆ UPROPERTY() [1/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [2/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [3/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [4/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [5/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [6/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [7/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [8/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [9/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [10/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [11/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [12/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

◆ UPROPERTY() [13/13]

APlayerControl::UPROPERTY ( EditDefaultsOnly  ,
Category  = "Input" 
)
protected

멤버 데이터 문서화

◆ ChatHistorySystem

TObjectPtr<class UChatHistorySystem> APlayerControl::ChatHistorySystem

Chat History 관리 컴포넌트

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

다음에 의해서 참조됨 : APlayerControl(), OnChatAnswerReceived().

◆ IMC_Default

TObjectPtr<class UInputMappingContext> APlayerControl::IMC_Default
protected

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

다음에 의해서 참조됨 : APlayerControl(), BeginPlay().

◆ TutorialComponent

class UTutorialComponent* APlayerControl::TutorialComponent

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

다음에 의해서 참조됨 : APlayerControl(), StartTutorialManually().

◆ UserInfo

FResponseUserMe APlayerControl::UserInfo
private

사용자 정보 (레벨 전환에서도 유지됨)

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

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


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