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

Main character driven directly by the player. 더 자세히 ...

#include <APlayerActor.h>

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

Public 멤버 함수

 APlayerActor ()
 
void Client_ShowSpeakJudesPopup (const struct FResponseSpeakingJudes &Response)
 SpeakJudge 결과 팝업을 클라이언트에 표시합니다 (Client RPC)
 
void ClientRPC_ShowGameMessage (const FString &Message)
 클라이언트에서 게임 메시지를 표시합니다.
 
void Cmd_Info () override
 
void Cmd_Jump () override
 
void Cmd_Look (const FVector2D &Axis) override
 
void Cmd_Move (const FVector2D &Axis) override
 
void Cmd_RecordEnd () override
 
void Cmd_RecordStart () override
 GPT 상호작용을 위한 음성 캡처를 시작합니다.
 
void Cmd_Run () override
 
void Cmd_StopMove () override
 
ECompassMarkerType GetCompassMarkerType ()
 
FORCEINLINE bool GetIsJumpStart ()
 
FORCEINLINE bool GetIsRunning ()
 
class UMainWidgetGetMainWidget () const
 메인 위젯을 가져옵니다.
 
class AMiniOwlBotGetMiniOwlBot () const
 
EQuestRole GetQuestRole ()
 
bool IsControlEnabled () const
 플레이어 조작이 가능한지 확인합니다
 
void MulticastRPC_DoJump ()
 
void MulticastRPC_DoJumpStart ()
 
void MulticastRPC_DoRun ()
 
void MulticastRPC_StopMove ()
 
void OnGameMessage (const FString &Message)
 게임 이벤트 메시지를 수신합니다.
 
void PlaySpeakInfo (int32 QuestStep)
 
void PlayTTSAudio (const TArray< uint8 > &AudioData)
 TTS 오디오를 재생합니다. VoiceConversationSystem으로 전달합니다.
 
void RequestListenAudio (const FString &AudioText)
 
void RequestSpeakAudio (const FString &AudioText)
 
void Server_NotifyConfirmSpeakJudes ()
 SpeakJudge 팝업 확인 버튼 클릭을 서버에 알립니다 (Server RPC)
 
void Server_NotifySpeakJudgeComplete (const struct FResponseSpeakingJudes &Response)
 SpeakJudge 결과를 서버로 전달하여 처리합니다 (Server RPC)
 
void ServerRPC_DoJump ()
 
void ServerRPC_DoJumpStart ()
 
void ServerRPC_DoRun ()
 
void ServerRPC_StopMove ()
 
void ServerRPC_Teleport (FTransform TargetTransform)
 
virtual void SetCompassMarkerInto (ECompassMarkerType InMarkerType)
 
virtual void SetShowOnCompass (bool bShow)
 
virtual bool ShouldShowOnCompass () const
 

Public 속성

bool bShowOnCompass = true
 
TObjectPtr< class USceneComponent > HoldPosition
 
TObjectPtr< class UStaticMeshComponent > HookCable
 
TObjectPtr< class UStaticMeshComponent > HookProjectileMesh
 
TObjectPtr< class UHookSystem > HookSystem
 
TObjectPtr< class UInteractionSystem > InteractionSystem
 
ECompassMarkerType MarkerType
 

Protected 멤버 함수

virtual void BeginPlay () override
 
virtual void GetLifetimeReplicatedProps (TArray< class FLifetimeProperty > &OutLifetimeProps) const override
 
void OnRep_AnotherValue ()
 
virtual void OnRep_Controller () override
 
void OnRep_LookPitch ()
 
virtual void PossessedBy (AController *NewController) override
 
void RecoveryMovementMode (const EMovementMode InMovementMode)
 
virtual void Tick (float DeltaTime) override
 

Protected 속성

float AnotherValue
 2P 구분을 위한 머티리얼 파라미터 (0=1P, 1=2P)
 
TObjectPtr< class UCameraComponent > FollowCamera
 
TObjectPtr< class UHookComponent > HookComp
 
float LookPitch
 
TObjectPtr< class UChildActorComponent > miniOwlBot
 
TObjectPtr< class UCharacterMovementComponent > MoveComp
 
TObjectPtr< class USpringArmComponent > SpringArmComp
 
TObjectPtr< class UVoiceConversationSystem > VoiceConversationSystem
 

Private 멤버 함수

void ApplyAnotherValue ()
 Another 머티리얼 파라미터를 실제로 적용합니다 (서버/클라이언트 공통)
 
void CreateMainWidget ()
 메인 위젯을 생성하고 뷰포트에 추가합니다.
 
void CreateToastWidget ()
 
FRotator FindRelativeRotationAtTarget (AActor *Target)
 
bool IsMainMap ()
 
void OnFadeOutCompleteForTeleport ()
 페이드 아웃 완료 후 텔레포트 실행
 
void OnResponseListenAudio (FResponseListenAudio &ResponseData, bool bWasSuccessful)
 
void OnResponseSpeakAudio (FResponseListenAudio &ResponseData, bool bWasSuccessful)
 
void OnRoomIdUpdated (int64 NewRoomId)
 
void OnRoomLevelUpdated (int32 NewRoomLevel)
 
void OnTeleportAllPlayers (FTransform TargetTransform)
 텔레포트 이벤트 핸들러
 
void UpdateCompassMarkers ()
 

Private 속성

FVector basePos = FVector(238,135.5,60)
 
FRotator baseRot = FRotator(-5.53,212.2,-0.2)
 
bool bIsJumpStart = false
 
bool bIsRequest = false
 
bool bIsRunning = false
 
TMap< AActor *, class UImage * > CompassMarkerMap
 
TObjectPtr< class UMainWidgetMainWidget
 메인 UI 위젯 인스턴스
 
TSubclassOf< class UMainWidgetMainWidgetClass
 메인 위젯 블루프린트 클래스
 
FTransform PendingTeleportTransform
 텔레포트 목표 위치
 
float RunSpeed = 500.f
 
TObjectPtr< class UToastWidgetToastWidget
 
TSubclassOf< class UToastWidgetToastWidgetClass
 
float WalkSpeed = 200.f
 

상세한 설명

Main character driven directly by the player.

Extends AGameCharacter with player-specific input and camera handling.

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

생성자 & 소멸자 문서화

◆ APlayerActor()

APlayerActor::APlayerActor ( )

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

65{
66 PrimaryActorTick.bCanEverTick = true;
67
68 GetCapsuleComponent()->InitCapsuleSize(45.f, 102.0f);
69 GetMesh()->SetRelativeLocationAndRotation(FVector(0, 0, -100), FRotator(0, -90, 0));
70 GetMesh()->SetRelativeScale3D(FVector(1.5));
71
72 // Movement
73 bUseControllerRotationPitch = false;
74 bUseControllerRotationYaw = true;
75 bUseControllerRotationRoll = false;
76
77 // SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
78 // SpringArmComp->SetupAttachment(GetMesh(), TEXT("Head"));
79 // SpringArmComp->TargetArmLength = 0;
80 // SpringArmComp->bUsePawnControlRotation = false;
81 // SpringArmComp->SetRelativeLocationAndRotation(FVector(0,-14.285715,21.428572), FRotator(90, 90, 0));
82 // // SpringArmComp->bInheritPitch = false;
83 // SpringArmComp->bInheritRoll = false;
84 // SpringArmComp->bInheritPitch = true;
85
86 FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
87 // FollowCamera->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
88 FollowCamera->SetupAttachment(GetMesh(), TEXT("Head"));
89 FollowCamera->SetRelativeLocationAndRotation(FVector(0.235242,-14.285715,24.304751), FRotator(90, 90, 0));
90 FollowCamera->bUsePawnControlRotation = true;
91
92 GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f);
93 GetCharacterMovement()->MaxWalkSpeed = WalkSpeed;
94 GetCharacterMovement()->bOrientRotationToMovement = false;
95
96 HoldPosition = CreateDefaultSubobject<USceneComponent>(TEXT("HoldPosition"));
97 HoldPosition->SetupAttachment(FollowCamera);
98 HoldPosition->SetRelativeLocation(FVector(80.952382,0,-14.285714));
99
100 LookPitch = 0.f;
101 AnotherValue = 0.f;
102
103 // System Component
104 InteractionSystem = CreateDefaultSubobject<UInteractionSystem>(TEXT("InteractionSystem"));
105 HookSystem = CreateDefaultSubobject<UHookSystem>(TEXT("HookSystem"));
106 VoiceConversationSystem = CreateDefaultSubobject<UVoiceConversationSystem>(TEXT("VoiceConversationSystem"));
107
108 // Hook
109 HookCable = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("HookCable"));
110 HookCable->SetupAttachment(GetMesh());
111 HookCable->SetVisibility(false);
112 HookCable->SetCollisionEnabled(ECollisionEnabled::NoCollision);
113 HookCable->SetMobility(EComponentMobility::Movable);
114 HookCable->SetUsingAbsoluteLocation(true);
115 HookCable->SetUsingAbsoluteRotation(true);
116
117 static ConstructorHelpers::FObjectFinder<UStaticMesh> CylinderMesh(TEXT("/Engine/BasicShapes/Cylinder.Cylinder"));
118 if (CylinderMesh.Succeeded())
119 HookCable->SetStaticMesh(CylinderMesh.Object);
120 HookCable->SetRelativeScale3D(FVector(0.05f, 0.05f, 1.0f));
121
122 HookProjectileMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("HookProjectileMesh"));
123 HookProjectileMesh->SetupAttachment(GetMesh());
124 HookProjectileMesh->SetVisibility(false);
125 HookProjectileMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
126
127 static ConstructorHelpers::FObjectFinder<UStaticMesh> HookMesh(HOOKMESHPATH_PATH);
128 if (HookMesh.Succeeded())
129 {
130 HookProjectileMesh->SetStaticMesh(HookMesh.Object);
131 HookProjectileMesh->SetRelativeScale3D(FVector(1.0f));
132 HookProjectileMesh->SetRelativeRotation(FRotator(0, 90, 0));
133 }
134
135 miniOwlBot = CreateDefaultSubobject<UChildActorComponent>(TEXT("miniOwlBot"));
136 miniOwlBot->SetupAttachment(GetRootComponent());
137 miniOwlBot->SetRelativeLocationAndRotation(basePos, baseRot);
138 ConstructorHelpers::FClassFinder<AMiniOwlBot> miniOwlBotRef(TEXT("/Game/CustomContents/Blueprints/BP_MiniOwlBot.BP_MiniOwlBot_C"));
139 if (miniOwlBotRef.Succeeded())
140 {
141 miniOwlBot->SetChildActorClass(miniOwlBotRef.Class);
142 }
143
144 // MainWidget 클래스 자동 로드
146
148
149 // Compass 마커
151 bShowOnCompass = true;
152
153 // 3인칭 메쉬는 플레이어에게 보이지 않도록
154 GetMesh()->SetOwnerNoSee(true);
155}
#define MAINWIDGET_PATH
#define HOOKMESHPATH_PATH
#define TOASTWIDGET_PATH
TObjectPtr< class UVoiceConversationSystem > VoiceConversationSystem
TObjectPtr< class UHookSystem > HookSystem
FVector basePos
TObjectPtr< class UChildActorComponent > miniOwlBot
FRotator baseRot
float AnotherValue
2P 구분을 위한 머티리얼 파라미터 (0=1P, 1=2P)
TObjectPtr< class UStaticMeshComponent > HookProjectileMesh
TSubclassOf< class UToastWidget > ToastWidgetClass
TObjectPtr< class UInteractionSystem > InteractionSystem
TObjectPtr< class UStaticMeshComponent > HookCable
TSubclassOf< class UMainWidget > MainWidgetClass
메인 위젯 블루프린트 클래스
TObjectPtr< class UCameraComponent > FollowCamera
TObjectPtr< class USceneComponent > HoldPosition
static T * LoadAsset(const TCHAR *Path)

다음을 참조함 : AnotherValue, basePos, baseRot, ICompassTargetInterface::bShowOnCompass, FollowCamera, HoldPosition, HookCable, HOOKMESHPATH_PATH, HookProjectileMesh, HookSystem, InteractionSystem, FComponentHelper::LoadAsset(), LookPitch, MAINWIDGET_PATH, MainWidgetClass, ICompassTargetInterface::MarkerType, miniOwlBot, OtherPlayer, TOASTWIDGET_PATH, ToastWidgetClass, VoiceConversationSystem, WalkSpeed.

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

멤버 함수 문서화

◆ ApplyAnotherValue()

void APlayerActor::ApplyAnotherValue ( )
private

Another 머티리얼 파라미터를 실제로 적용합니다 (서버/클라이언트 공통)

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

411{
412 USkeletalMeshComponent* MeshComp = GetMesh();
413 if (!MeshComp)
414 return;
415
416 // Dynamic Material Instance 생성 및 파라미터 설정
417 for (int32 i = 0; i < MeshComp->GetNumMaterials(); ++i)
418 {
419 UMaterialInterface* Material = MeshComp->GetMaterial(i);
420 if (!Material)
421 continue;
422
423 UMaterialInstanceDynamic* DynamicMaterial = Cast<UMaterialInstanceDynamic>(Material);
424 if (!DynamicMaterial)
425 DynamicMaterial = MeshComp->CreateAndSetMaterialInstanceDynamic(i);
426
427 if (DynamicMaterial)
428 DynamicMaterial->SetScalarParameterValue(FName("Another"), AnotherValue);
429 }
430
431
432 auto PS = GetPlayerState<ALingoPlayerState>();
433 if (PS)
434 {
435 PS->RefreshQuestState();
436 }
437}

다음을 참조함 : AnotherValue.

다음에 의해서 참조됨 : OnRep_AnotherValue(), PossessedBy().

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

◆ BeginPlay()

void APlayerActor::BeginPlay ( )
overrideprotectedvirtual

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

158{
159 Super::BeginPlay();
160
161 MoveComp = this->GetCharacterMovement();
162
163 VoiceConversationSystem->InitSystem(this);
165
166 // 텔레포트 이벤트 구독
167 if (auto DM = UBroadcastManager::Get(GetWorld()))
168 {
169 DM->OnTeleport.RemoveDynamic(this, &APlayerActor::OnTeleportAllPlayers);
170 DM->OnTeleport.AddDynamic(this, &APlayerActor::OnTeleportAllPlayers);
171
172 // DM->OnUpdateQuestRole.RemoveDynamic(this, &APlayerActor::OnUpdateQuestRole);
173 // DM->OnUpdateQuestRole.AddDynamic(this, &APlayerActor::OnUpdateQuestRole);
174 }
175
176 if (auto GS = ULingoGameHelper::GetLingoGameState(GetWorld()))
177 {
178 // GS->OnQuestScenarioDataUpdated.RemoveDynamic(this, &APlayerActor::OnUpdateQuestInfo);
179 // GS->OnQuestScenarioDataUpdated.AddDynamic(this, &APlayerActor::OnUpdateQuestInfo);
180 //
181 // GS->OnReadResultUpdated.RemoveDynamic(this, &APlayerActor::OnReadResultUpdated);
182 // GS->OnReadResultUpdated.AddDynamic(this, &APlayerActor::OnReadResultUpdated);
183 //
184 // GS->OnListenResultUpdated.RemoveDynamic(this, &APlayerActor::OnListenResultUpdated);
185 // GS->OnListenResultUpdated.AddDynamic(this, &APlayerActor::OnListenResultUpdated);
186
187 GS->OnRoomIdUpdated.RemoveDynamic(this, &APlayerActor::OnRoomIdUpdated);
188 GS->OnRoomIdUpdated.AddDynamic(this, &APlayerActor::OnRoomIdUpdated);
189
190 GS->OnRoomLevelUpdated.RemoveDynamic(this, &APlayerActor::OnRoomLevelUpdated);
191 GS->OnRoomLevelUpdated.AddDynamic(this, &APlayerActor::OnRoomLevelUpdated);
192
193 // 방향계 업데이트
194 FTimerHandle TimerHandle;
195 GetWorldTimerManager().SetTimer(TimerHandle, FTimerDelegate::CreateLambda([this, GS]
196 {
197 GS->SetAllCompassVisibility(false);
198 GS->SetCompassVisibilityByTag("ReadQuestStart", true);
199
200 }), 0.5f, false);
201 }
202
203 if (IsLocallyControlled())
204 {
207
208 if ( IsMainMap() )
210 }
211
212 // miniowlbot invisible 처리
213 PRINTLOG(TEXT("%s"), Cast<AMiniOwlBot>(miniOwlBot->GetChildActor()) == nullptr ? TEXT("miniOwlBot is null") : TEXT("miniOwlBot is not null"));
214 if (auto InChildActor = Cast<AMiniOwlBot>(miniOwlBot->GetChildActor()))
215 {
216 if (IsLocallyControlled())
217 {
218 Cast<AMiniOwlBot>(InChildActor)->SetActorHiddenInGame(false);
219 }
220 else
221 {
222 Cast<AMiniOwlBot>(InChildActor)->SetActorHiddenInGame(true);
223 }
224 }
225}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
void CreateToastWidget()
TObjectPtr< class UCharacterMovementComponent > MoveComp
void CreateMainWidget()
메인 위젯을 생성하고 뷰포트에 추가합니다.
void OnRoomIdUpdated(int64 NewRoomId)
void OnTeleportAllPlayers(FTransform TargetTransform)
텔레포트 이벤트 핸들러
void OnRoomLevelUpdated(int32 NewRoomLevel)
static void HideMouseCursor(const UObject *WorldContextObject)
마우스 커서를 숨기고 게임 전용 입력 모드로 설정합니다.
static class ALingoGameState * GetLingoGameState(const UObject *WorldContextObject)

다음을 참조함 : CreateMainWidget(), CreateToastWidget(), ULingoGameHelper::GetLingoGameState(), ULingoGameHelper::HideMouseCursor(), HookCable, HookProjectileMesh, HookSystem, IsMainMap(), miniOwlBot, MoveComp, OnRoomIdUpdated(), OnRoomLevelUpdated(), OnTeleportAllPlayers(), PRINTLOG, VoiceConversationSystem.

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

◆ Client_ShowSpeakJudesPopup()

void APlayerActor::Client_ShowSpeakJudesPopup ( const struct FResponseSpeakingJudes Response)

SpeakJudge 결과 팝업을 클라이언트에 표시합니다 (Client RPC)

매개변수
Response[in] 표시할 SpeakJudge 평가 결과

◆ ClientRPC_ShowGameMessage()

void APlayerActor::ClientRPC_ShowGameMessage ( const FString &  Message)

클라이언트에서 게임 메시지를 표시합니다.

매개변수
Message[in] 표시할 메시지

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

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

◆ Cmd_Info()

void APlayerActor::Cmd_Info ( )
overridevirtual

IControllable(으)로부터 재구현되었습니다.

◆ Cmd_Jump()

void APlayerActor::Cmd_Jump ( )
overridevirtual

IControllable를 구현.

◆ Cmd_Look()

void APlayerActor::Cmd_Look ( const FVector2D &  Axis)
overridevirtual

IControllable를 구현.

◆ Cmd_Move()

void APlayerActor::Cmd_Move ( const FVector2D &  Axis)
overridevirtual

IControllable를 구현.

◆ Cmd_RecordEnd()

void APlayerActor::Cmd_RecordEnd ( )
overridevirtual

IControllable(으)로부터 재구현되었습니다.

◆ Cmd_RecordStart()

void APlayerActor::Cmd_RecordStart ( )
overridevirtual

GPT 상호작용을 위한 음성 캡처를 시작합니다.

IControllable(으)로부터 재구현되었습니다.

◆ Cmd_Run()

void APlayerActor::Cmd_Run ( )
overridevirtual

IControllable를 구현.

◆ Cmd_StopMove()

void APlayerActor::Cmd_StopMove ( )
overridevirtual

IControllable를 구현.

◆ CreateMainWidget()

void APlayerActor::CreateMainWidget ( )
private

메인 위젯을 생성하고 뷰포트에 추가합니다.

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

264{
265 if (!MainWidgetClass)
266 return;
267
268 if(MainWidget)
269 return;
270
271 auto PC = Cast<APlayerControl>(GetController());
272 if ( !PC)
273 return;
274
275 MainWidget = CreateWidget<UMainWidget>(PC, MainWidgetClass);
276
277 if (MainWidget)
278 {
279 MainWidget->AddToViewport();
280
281 if ( IsMainMap())
282 {
283 if (auto GS = ULingoGameHelper::GetLingoGameState(GetWorld()))
284 MainWidget->UpdateRoomWidget( GS->GetRoomLevel(), GS->GetRoomId());
285
286 MainWidget->CompassWidget->SetVisibility( ESlateVisibility::Visible );
287 MainWidget->VoiceRecording->SetVisibility( ESlateVisibility::Visible );
288
289 // UserInfo가 로드되었으면 즉시 업데이트, 아니면 재시도
290 if (PC->HasUserInfo() )
291 {
292 MainWidget->UpdateStateWidget( PC->GetUserId(), PC->GetUserName());
293 MainWidget->UpdateChatWidget();
294 return;
295 }
296
297 // UserInfo 로드 대기 후 재시도 (0.5초 후 한 번)
298 FTimerHandle RetryTimer;
299 GetWorld()->GetTimerManager().SetTimer(RetryTimer, [this, PC]()
300 {
301 if ( PC->GetUserId())
302 {
303 MainWidget->UpdateStateWidget( PC->GetUserId(), PC->GetUserName());
304 }
305 MainWidget->UpdateChatWidget();
306 }, 0.5f, false);
307 }
308 }
309}
TObjectPtr< class UMainWidget > MainWidget
메인 UI 위젯 인스턴스

다음을 참조함 : ULingoGameHelper::GetLingoGameState(), IsMainMap(), MainWidget, MainWidgetClass.

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

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

◆ CreateToastWidget()

void APlayerActor::CreateToastWidget ( )
private

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

312{
313 if (!ToastWidgetClass)
314 return;
315
316 if(ToastWidget)
317 return;
318
319 APlayerController* PC = Cast<APlayerController>(GetController());
320 if (!PC)
321 return;
322
323 ToastWidget = CreateWidget<UToastWidget>(PC, ToastWidgetClass);
324 if (ToastWidget)
325 ToastWidget->AddToViewport(GameLayer::Toast);
326}
TObjectPtr< class UToastWidget > ToastWidget
static const int32 Toast
Definition Onepiece.h:10

다음을 참조함 : GameLayer::Toast, ToastWidget, ToastWidgetClass.

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

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

◆ FindRelativeRotationAtTarget()

FRotator APlayerActor::FindRelativeRotationAtTarget ( AActor *  Target)
private

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

962{
963 // Get World Location (Capsule Component)
964 FVector CapsuleLocation = GetCapsuleComponent()->GetComponentLocation();
965
966 // Get World Rotation (Capsule Component)
967 FRotator CapsuleRotation = GetCapsuleComponent()->GetComponentRotation();
968
969 // Get World Location (Root Component)
970 FVector TargetLocation = Target->GetActorLocation();
971
972 // Find Relative Look at Rotation
973 FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(
974 CapsuleLocation, TargetLocation);
975
976 // 상대 회전 계산
977 FRotator RelativeRotation = UKismetMathLibrary::NormalizedDeltaRotator(
978 LookAtRotation,CapsuleRotation);
979
980 // Return Value (Roll, Pitch, Yaw)
981 return RelativeRotation;
982}

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

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

◆ GetCompassMarkerType()

ECompassMarkerType ICompassTargetInterface::GetCompassMarkerType ( )
inlineinherited

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

29{return MarkerType;}

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

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

◆ GetIsJumpStart()

FORCEINLINE bool APlayerActor::GetIsJumpStart ( )
inline

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

131{ return bIsJumpStart; }

◆ GetIsRunning()

FORCEINLINE bool APlayerActor::GetIsRunning ( )
inline

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

130{ return bIsRunning; }

◆ GetLifetimeReplicatedProps()

void APlayerActor::GetLifetimeReplicatedProps ( TArray< class FLifetimeProperty > &  OutLifetimeProps) const
overrideprotectedvirtual

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

228{
229 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
230
231 DOREPLIFETIME(APlayerActor, LookPitch);
232 DOREPLIFETIME(APlayerActor, AnotherValue);
233}
Main character driven directly by the player.

다음을 참조함 : AnotherValue, LookPitch.

◆ GetMainWidget()

class UMainWidget * APlayerActor::GetMainWidget ( ) const
inline

메인 위젯을 가져옵니다.

반환값
메인 위젯 인스턴스

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

175{ return MainWidget; }

다음에 의해서 참조됨 : APlayerControl::OnChat(), APlayerControl::UpdateQuestInfoWidget(), APlayerControl::UpdateQuestOrderWidget(), APlayerControl::UpdateSpeakWidget().

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

◆ GetMiniOwlBot()

class AMiniOwlBot * APlayerActor::GetMiniOwlBot ( ) const

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

570{
571 return Cast<AMiniOwlBot>(miniOwlBot->GetChildActor());
572}

다음을 참조함 : miniOwlBot.

◆ GetQuestRole()

EQuestRole APlayerActor::GetQuestRole ( )

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

589{
590 ALingoPlayerState* PS = GetPlayerState<ALingoPlayerState>();
591 return PS->QuestRole;
592}
EQuestRole QuestRole
플레이어 역할 (싱글/멀티에서 문제1, 문제2 구분)

다음을 참조함 : ALingoPlayerState::QuestRole.

◆ IsControlEnabled()

bool APlayerActor::IsControlEnabled ( ) const

플레이어 조작이 가능한지 확인합니다

반환값
true면 조작 가능, false면 팝업으로 인해 조작 차단됨

팝업이 열려있고 해당 팝업이 플레이어 조작을 차단하는 경우 false 반환

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

236{
237 // 팝업이 열려있고 조작을 차단해야 하면 false 반환
238 if (UPopupManager* PopupMgr = UPopupManager::Get(GetWorld()))
239 {
240 if (PopupMgr->ShouldBlockPlayerControl())
241 return false;
242 }
243
244 // 팝업이 없거나 조작 허용 팝업이면 true 반환
245 return true;
246}
팝업 관리자

◆ IsMainMap()

bool APlayerActor::IsMainMap ( )
private

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

249{
250 FString MapName = GetWorld()->GetMapName();
251 MapName.RemoveFromStart(GetWorld()->StreamingLevelsPrefix);
252
253 if ( MapName.Contains(TEXT("Map1")) )
254 return true;
255 else if ( MapName.Contains(TEXT("Game")) )
256 return true;
257 else if ( MapName.Contains(TEXT("Person")) )
258 return true;
259
260 return false;
261}

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

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

◆ MulticastRPC_DoJump()

void APlayerActor::MulticastRPC_DoJump ( )

◆ MulticastRPC_DoJumpStart()

void APlayerActor::MulticastRPC_DoJumpStart ( )

◆ MulticastRPC_DoRun()

void APlayerActor::MulticastRPC_DoRun ( )

◆ MulticastRPC_StopMove()

void APlayerActor::MulticastRPC_StopMove ( )

◆ OnFadeOutCompleteForTeleport()

void APlayerActor::OnFadeOutCompleteForTeleport ( )
private

페이드 아웃 완료 후 텔레포트 실행

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

817{
818 // 텔레포트 실행
819 SetActorLocation(PendingTeleportTransform.GetLocation());
820 if (APlayerControl* PC = Cast<APlayerControl>(Controller))
821 {
822 PC->SetControlRotation(PendingTeleportTransform.Rotator());
823 }
824
825 // FadeWidget 가져오기
826 if (!MainWidget)
827 return;
828
829 UFadeWidget* FadeWidget = MainWidget->GetFadeWidget();
830 if (!FadeWidget)
831 return;
832
833 // FadeOut 델리게이트 해제
834 FadeWidget->OnFadeOutComplete.RemoveDynamic(this, &APlayerActor::OnFadeOutCompleteForTeleport);
835
836 // FadeIn 시작
837 MainWidget->FadeIn(0.5f);
838}
FTransform PendingTeleportTransform
텔레포트 목표 위치
void OnFadeOutCompleteForTeleport()
페이드 아웃 완료 후 텔레포트 실행
화면 페이드 인/아웃 효과를 제공하는 위젯
Definition UFadeWidget.h:22
FOnFadeComplete OnFadeOutComplete
페이드 아웃 완료 시 호출되는 델리게이트
Definition UFadeWidget.h:47

다음을 참조함 : MainWidget, UFadeWidget::OnFadeOutComplete, OnFadeOutCompleteForTeleport(), PendingTeleportTransform.

다음에 의해서 참조됨 : OnFadeOutCompleteForTeleport(), OnTeleportAllPlayers().

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

◆ OnGameMessage()

void APlayerActor::OnGameMessage ( const FString &  Message)

게임 이벤트 메시지를 수신합니다.

매개변수
Message[in] 수신된 이벤트 메시지

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

703{
704 PRINT_STRING(TEXT("Event Received: %s"), *Message);
705
706 // 서버에서 호출되면 클라이언트 RPC로 전달
707 if (HasAuthority())
708 {
710 }
711 else
712 {
713 ClientRPC_ShowGameMessage_Implementation(Message);
714 }
715}
#define PRINT_STRING(fmt,...)
Definition GameLogging.h:45
void ClientRPC_ShowGameMessage(const FString &Message)
클라이언트에서 게임 메시지를 표시합니다.

다음을 참조함 : ClientRPC_ShowGameMessage(), PRINT_STRING.

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

◆ OnRep_AnotherValue()

void APlayerActor::OnRep_AnotherValue ( )
protected

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

406{
408}
void ApplyAnotherValue()
Another 머티리얼 파라미터를 실제로 적용합니다 (서버/클라이언트 공통)

다음을 참조함 : ApplyAnotherValue().

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

◆ OnRep_Controller()

void APlayerActor::OnRep_Controller ( )
overrideprotectedvirtual

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

368{
369 Super::OnRep_Controller();
370
371 if (IsLocallyControlled())
372 {
375 }
376
377 // miniowlbot invisible 처리
378 PRINTLOG(TEXT("%s"), Cast<AMiniOwlBot>(miniOwlBot->GetChildActor()) == nullptr ? TEXT("miniOwlBot is null") : TEXT("miniOwlBot is not null"));
379 if (auto InChildActor = Cast<AMiniOwlBot>(miniOwlBot->GetChildActor()))
380 {
381 if (IsLocallyControlled())
382 {
383 Cast<AMiniOwlBot>(InChildActor)->SetActorHiddenInGame(false);
384 }
385 else
386 {
387 Cast<AMiniOwlBot>(InChildActor)->SetActorHiddenInGame(true);
388 }
389 }
390}

다음을 참조함 : CreateMainWidget(), CreateToastWidget(), miniOwlBot, PRINTLOG.

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

◆ OnRep_LookPitch()

void APlayerActor::OnRep_LookPitch ( )
protected

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

393{
394 // if (SpringArmComp)
395 // {
396 // // 다른 클라이언트에서 보이는 서버 캐릭터의 복제본의 설정 변경
397 // SpringArmComp->bUsePawnControlRotation = false;
398 //
399 // FRotator CurrentRotation = SpringArmComp->GetRelativeRotation();
400 // CurrentRotation.Pitch = LookPitch;
401 // SpringArmComp->SetRelativeRotation(CurrentRotation);
402 // }
403}

◆ OnResponseListenAudio()

void APlayerActor::OnResponseListenAudio ( FResponseListenAudio ResponseData,
bool  bWasSuccessful 
)
private

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

611{
612 bIsRequest = false;
613
614 if (bWasSuccessful)
615 {
616 this->PlayTTSAudio(ResponseData.audio_base64);
617 UDialogManager::Get(GetWorld())->ShowToast(*ResponseData.audio_text);
618 }
619}
void PlayTTSAudio(const TArray< uint8 > &AudioData)
TTS 오디오를 재생합니다. VoiceConversationSystem으로 전달합니다.
TArray< uint8 > audio_base64

다음을 참조함 : FResponseListenAudio::audio_base64, FResponseListenAudio::audio_text, bIsRequest, PlayTTSAudio().

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

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

◆ OnResponseSpeakAudio()

void APlayerActor::OnResponseSpeakAudio ( FResponseListenAudio ResponseData,
bool  bWasSuccessful 
)
private

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

639{
640 bIsRequest = false;
641
642 if (bWasSuccessful)
643 {
644 this->PlayTTSAudio(ResponseData.audio_base64);
645 }
646}

다음을 참조함 : FResponseListenAudio::audio_base64, bIsRequest, PlayTTSAudio().

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

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

◆ OnRoomIdUpdated()

void APlayerActor::OnRoomIdUpdated ( int64  NewRoomId)
private

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

985{
986 if (!IsLocallyControlled())
987 return;
988
989 if (MainWidget)
990 {
991 if (auto GS = ULingoGameHelper::GetLingoGameState(GetWorld()))
992 {
993 const int RoomLevel = GS->GetRoomLevel();
994 const int RoomId = NewRoomId;
995
996 MainWidget->UpdateRoomWidget(RoomLevel, RoomId);
997 }
998 }
999}

다음을 참조함 : ULingoGameHelper::GetLingoGameState(), MainWidget.

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

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

◆ OnRoomLevelUpdated()

void APlayerActor::OnRoomLevelUpdated ( int32  NewRoomLevel)
private

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

1002{
1003 if (!IsLocallyControlled())
1004 return;
1005
1006 if (MainWidget)
1007 {
1008 if (auto GS = ULingoGameHelper::GetLingoGameState(GetWorld()))
1009 {
1010 const int RoomLevel = NewRoomLevel;
1011 const int RoomId = GS->GetRoomId();
1012
1013 MainWidget->UpdateRoomWidget(RoomLevel, RoomId);
1014 }
1015 }
1016}

다음을 참조함 : ULingoGameHelper::GetLingoGameState(), MainWidget.

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

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

◆ OnTeleportAllPlayers()

void APlayerActor::OnTeleportAllPlayers ( FTransform  TargetTransform)
private

텔레포트 이벤트 핸들러

매개변수
TargetLocation목표 위치

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

727{
728 // 서버에 텔레포트 요청
729 ServerRPC_Teleport(TargetTransform);
730
731 // 로컬 플레이어만 페이드 처리
732 if (!IsLocallyControlled())
733 return;
734
735 PRINTLOG(TEXT("APlayerActor::OnTeleportAllPlayers - Start teleport to %s"), *TargetTransform.ToString());
736
737 // 목표 위치 저장
738 PendingTeleportTransform = TargetTransform;
739
740 // FadeWidget 가져오기
741 if (!MainWidget)
742 {
743 PRINTLOG(TEXT("APlayerActor::OnTeleportAllPlayers - MainWidget is null"));
744 return;
745 }
746
747 UFadeWidget* FadeWidget = MainWidget->GetFadeWidget();
748 if (!FadeWidget)
749 {
750 PRINTLOG(TEXT("APlayerActor::OnTeleportAllPlayers - FadeWidget is null"));
751 return;
752 }
753
754 // FadeOut 완료 시 텔레포트 실행
756
757 // FadeOut 시작
758 MainWidget->FadeOut(0.5f);
759}
void ServerRPC_Teleport(FTransform TargetTransform)

다음을 참조함 : MainWidget, UFadeWidget::OnFadeOutComplete, OnFadeOutCompleteForTeleport(), PendingTeleportTransform, PRINTLOG, ServerRPC_Teleport().

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

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

◆ PlaySpeakInfo()

void APlayerActor::PlaySpeakInfo ( int32  QuestStep)

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

575{
576 auto PS = GetPlayerState<ALingoPlayerState>();
577
578 FSpeakStageQuestion CurrentSpeakQuestion;
579 if (PS->GetCurrentSpeakQuestion(StepIndex, CurrentSpeakQuestion))
580 {
581 if (UDialogManager* DM = UDialogManager::Get(GetWorld()))
582 DM->ShowToast(*CurrentSpeakQuestion.GetQuestionMessage());
583
584 RequestSpeakAudio(CurrentSpeakQuestion.kor);
585 }
586}
void RequestSpeakAudio(const FString &AudioText)
토스트 메시지와 같은 간단한 다이얼로그 위젯의 표시를 관리하는 LocalPlayer 서브시스템입니다.
SpeakQuest 오디오 질문 데이터 구조체입니다.
FString GetQuestionMessage() const
FString kor
한국어 질문

다음을 참조함 : FSpeakStageQuestion::GetQuestionMessage(), FSpeakStageQuestion::kor, RequestSpeakAudio().

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

◆ PlayTTSAudio()

void APlayerActor::PlayTTSAudio ( const TArray< uint8 > &  AudioData)

TTS 오디오를 재생합니다. VoiceConversationSystem으로 전달합니다.

매개변수
AudioData[in] TTS로 생성된 오디오 데이터 (WAV)
반환값
재생 성공 여부

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

453{
454 VoiceConversationSystem->PlayVoiceAudio(AudioData);
455}

다음을 참조함 : VoiceConversationSystem.

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

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

◆ PossessedBy()

void APlayerActor::PossessedBy ( AController *  NewController)
overrideprotectedvirtual

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

329{
330 Super::PossessedBy(NewController);
331
332 APlayerState* PS = GetPlayerState();
333 if (!PS)
334 return;
335
336 // 플레이어 인덱스 확인 (GameState의 PlayerArray 사용)
337 int32 PlayerIndex = -1;
338 if (AGameStateBase* GS = GetWorld()->GetGameState())
339 PlayerIndex = GS->PlayerArray.IndexOfByKey(PS);
340
341 // 2P에게 Another = 1 적용 (1P는 0)
342 AnotherValue = (PlayerIndex == 0) ? 0.0f : 1.0f;
343
345}

다음을 참조함 : AnotherValue, ApplyAnotherValue().

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

◆ RecoveryMovementMode()

void APlayerActor::RecoveryMovementMode ( const EMovementMode  InMovementMode)
protected

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

440{
441 if ( InMovementMode == MOVE_None)
442 return;
443
444 auto Movement = this->GetCharacterMovement();
445
446 Movement->SetMovementMode( InMovementMode );
447 this->bUseControllerRotationYaw = false;
448 this->bUseControllerRotationPitch = false;
449 Movement->bOrientRotationToMovement = true;
450}

◆ RequestListenAudio()

void APlayerActor::RequestListenAudio ( const FString &  AudioText)

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

595{
596 if (bIsRequest)
597 return;
598
599 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
600 {
601 bIsRequest = true;
602
603 KLingoNetwork->RequestListenAudio(
604 AudioText,
605 FResponseListenAudioDelegate::CreateUObject(this, &APlayerActor::OnResponseListenAudio)
606 );
607 }
608}
void OnResponseListenAudio(FResponseListenAudio &ResponseData, bool bWasSuccessful)

다음을 참조함 : bIsRequest, OnResponseListenAudio().

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

◆ RequestSpeakAudio()

void APlayerActor::RequestSpeakAudio ( const FString &  AudioText)

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

623{
624 if (bIsRequest)
625 return;
626
627 if (auto KLingoNetwork = UKLingoNetworkSystem::Get(GetWorld()))
628 {
629 bIsRequest = true;
630
631 KLingoNetwork->RequestListenAudio(
632 AudioText,
633 FResponseListenAudioDelegate::CreateUObject(this, &APlayerActor::OnResponseSpeakAudio)
634 );
635 }
636}
void OnResponseSpeakAudio(FResponseListenAudio &ResponseData, bool bWasSuccessful)

다음을 참조함 : bIsRequest, OnResponseSpeakAudio().

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

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

◆ Server_NotifyConfirmSpeakJudes()

void APlayerActor::Server_NotifyConfirmSpeakJudes ( )

SpeakJudge 팝업 확인 버튼 클릭을 서버에 알립니다 (Server RPC)

사용자가 결과를 확인한 후 다음 질문으로 진행하도록 SpeakStage에 알림

◆ Server_NotifySpeakJudgeComplete()

void APlayerActor::Server_NotifySpeakJudgeComplete ( const struct FResponseSpeakingJudes Response)

SpeakJudge 결과를 서버로 전달하여 처리합니다 (Server RPC)

매개변수
Response[in] Client에서 받은 SpeakJudge 평가 결과

◆ ServerRPC_DoJump()

void APlayerActor::ServerRPC_DoJump ( )

◆ ServerRPC_DoJumpStart()

void APlayerActor::ServerRPC_DoJumpStart ( )

◆ ServerRPC_DoRun()

void APlayerActor::ServerRPC_DoRun ( )

◆ ServerRPC_StopMove()

void APlayerActor::ServerRPC_StopMove ( )

◆ ServerRPC_Teleport()

void APlayerActor::ServerRPC_Teleport ( FTransform  TargetTransform)

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

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

◆ SetCompassMarkerInto()

virtual void ICompassTargetInterface::SetCompassMarkerInto ( ECompassMarkerType  InMarkerType)
inlinevirtualinherited

AWheatly, AContactTrigger, ATeleportTrigger, AOrderKiosk, ALuggageHolder에서 재구현되었습니다.

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

30{MarkerType = InMarkerType;}

◆ SetShowOnCompass()

virtual void ICompassTargetInterface::SetShowOnCompass ( bool  bShow)
inlinevirtualinherited

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

33{bShowOnCompass = bShow;}

◆ ShouldShowOnCompass()

virtual bool ICompassTargetInterface::ShouldShowOnCompass ( ) const
inlinevirtualinherited

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

32{return bShowOnCompass;}

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

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

◆ Tick()

void APlayerActor::Tick ( float  DeltaTime)
overrideprotectedvirtual

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

348{
349 Super::Tick(DeltaTime);
350
351 if (MainWidget && MainWidget->CompassWidget)
352 {
353 UCompassWidget* Compass = MainWidget->CompassWidget;
354 float CameraRotationZ = FollowCamera->GetComponentRotation().Yaw;
355
356 Compass->RotateCompass(CameraRotationZ);
357
359 }
360
361 if (auto childOwlBot = Cast<AMiniOwlBot>(miniOwlBot->GetChildActor()))
362 {
363 childOwlBot->UpdateLocation(DeltaTime);
364 }
365}
void UpdateCompassMarkers()
void RotateCompass(float ZRotation)

다음을 참조함 : FollowCamera, MainWidget, miniOwlBot, UCompassWidget::RotateCompass(), UpdateCompassMarkers().

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

◆ UpdateCompassMarkers()

void APlayerActor::UpdateCompassMarkers ( )
private

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

841{
842 if (!MainWidget || !MainWidget->CompassWidget)
843 return;
844
845 UCompassWidget* Compass = MainWidget->CompassWidget;
846
847 // 1. 현재 월드의 모든 트래킹 대상 수집
848 TArray<AActor*> TrackedActors;
849 // GetAllActorsOfClass 시 배열 안에 있는건 clear됨. 임시배열 필요
850 TArray<AActor*> TempActors;
851
852 // AContactTrigger
853 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AContactTrigger::StaticClass(), TempActors);
854 TrackedActors.Append(TempActors);
855
856 // ALuggageHolder
857 UGameplayStatics::GetAllActorsOfClass(GetWorld(), ALuggageHolder::StaticClass(), TempActors);
858 TrackedActors.Append(TempActors);
859
860 // AOrderKiosk
861 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AOrderKiosk::StaticClass(), TempActors);
862 TrackedActors.Append(TempActors);
863
864 // Wheatly
865 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AWheatly::StaticClass(), TempActors);
866 TrackedActors.Append(TempActors);
867
868 // Teleporter
869 UGameplayStatics::GetAllActorsOfClass(GetWorld(), ATeleportTrigger::StaticClass(), TempActors);
870 TrackedActors.Append(TempActors);
871
872 // QuestionnaireKiosk
873 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AQuestionnaireKiosk::StaticClass(), TempActors);
874 TrackedActors.Append(TempActors);
875
876 // Evaluation Trigger
877 UGameplayStatics::GetAllActorsOfClass(GetWorld(), AEvaluationTrigger::StaticClass(), TempActors);
878 TrackedActors.Append(TempActors);
879
880 // Other player
881 UGameplayStatics::GetAllActorsOfClass(GetWorld(), APlayerActor::StaticClass(), TempActors);
882 for (AActor* OtherActor : TempActors)
883 {
884 if (OtherActor != this)
885 TrackedActors.Add(OtherActor);
886 }
887
888 // 2. 각 TrackedActor에 대해 마커 생성 or 업데이트
889 for (AActor* TrackedActor : TrackedActors)
890 {
891 if (!TrackedActor) continue;
892
893 // Interface로 캐스팅해서 타입 정보 가져오기
894 ICompassTargetInterface* Target = Cast<ICompassTargetInterface>(TrackedActor);
895 if (!Target) continue;
896
897 if (!Target->ShouldShowOnCompass())
898 {
899 if (UImage* ExistingMarker = CompassMarkerMap.FindRef(TrackedActor))
900 {
901 Compass->SetMarkerVisibility(ExistingMarker, ESlateVisibility::Hidden);
902 }
903 continue;
904 }
905
906 // Interface 함수로 마커 타입 확인
907 ECompassMarkerType CompassMarkerType = Target->GetCompassMarkerType();
908
909 // 2-1. 마커가 없으면 생성
910 UImage* Marker = CompassMarkerMap.FindRef(TrackedActor);
911 if (!Marker)
912 {
913 Marker = Compass->AddCompassMarker(CompassMarkerType);
914 CompassMarkerMap.Add(TrackedActor, Marker);
915 }
916 else
917 {
918 // 기존 마커 텍스처 업데이트
919 UTexture2D* NewTexture = Compass->GetTextureForMarkerType(CompassMarkerType);
920 if (NewTexture)
921 {
922 Marker->SetBrushFromTexture(NewTexture);
923 }
924
925 // 다시 보이게 설정 (Hidden 상태였을 수 있음)
926 Compass->SetMarkerVisibility(Marker, ESlateVisibility::Visible);
927 }
928
929 // 2-2. 상대 회전 계산 (Yaw만 필요)
930 FRotator RelativeRotation = FindRelativeRotationAtTarget(TrackedActor);
931 float TargetYaw = RelativeRotation.Yaw;
932
933 // 2-3. 마커 위치 업데이트 (bSideLock은 false로 가정)
934 Compass->SetMarkerPosition(Marker, TargetYaw, false);
935
936 // 2-4. 거리 계산 및 표시
937 float Distance = FVector::Dist(GetActorLocation(), TrackedActor->GetActorLocation());
938 Compass->SetMarkerDistance(Marker, Distance);
939 }
940
941 // 제거된 액터의 마커 정리
942 TArray<AActor*> ActorsToRemove;
943 for (auto& Pair : CompassMarkerMap)
944 {
945 if (!Pair.Key || !TrackedActors.Contains(Pair.Key))
946 {
947 if (Pair.Value)
948 {
949 Compass->SetMarkerVisibility(Pair.Value, ESlateVisibility::Hidden);
950 }
951 ActorsToRemove.Add(Pair.Key);
952 }
953 }
954
955 for (AActor* Actor : ActorsToRemove)
956 {
957 CompassMarkerMap.Remove(Actor);
958 }
959}
ECompassMarkerType
TMap< AActor *, class UImage * > CompassMarkerMap
FRotator FindRelativeRotationAtTarget(AActor *Target)
virtual bool ShouldShowOnCompass() const
ECompassMarkerType GetCompassMarkerType()
UImage * AddCompassMarker(ECompassMarkerType MarkerType)
void SetMarkerDistance(UImage *InMarker, float Distance)
마커 거리 설정 (미터 단위)
void SetMarkerPosition(UImage *InMarker, float TargetRotation, bool bSideLock)
void SetMarkerVisibility(UImage *InMarker, ESlateVisibility InVisibility)
마커와 거리 텍스트의 Visibility 동시 설정
UTexture2D * GetTextureForMarkerType(ECompassMarkerType MarkerType)

다음을 참조함 : UCompassWidget::AddCompassMarker(), CompassMarkerMap, FindRelativeRotationAtTarget(), ICompassTargetInterface::GetCompassMarkerType(), UCompassWidget::GetTextureForMarkerType(), MainWidget, UCompassWidget::SetMarkerDistance(), UCompassWidget::SetMarkerPosition(), UCompassWidget::SetMarkerVisibility(), ICompassTargetInterface::ShouldShowOnCompass().

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

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

멤버 데이터 문서화

◆ AnotherValue

float APlayerActor::AnotherValue
protected

2P 구분을 위한 머티리얼 파라미터 (0=1P, 1=2P)

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

다음에 의해서 참조됨 : APlayerActor(), ApplyAnotherValue(), GetLifetimeReplicatedProps(), PossessedBy().

◆ basePos

FVector APlayerActor::basePos = FVector(238,135.5,60)
private

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

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

◆ baseRot

FRotator APlayerActor::baseRot = FRotator(-5.53,212.2,-0.2)
private

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

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

◆ bIsJumpStart

bool APlayerActor::bIsJumpStart = false
private

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

◆ bIsRequest

bool APlayerActor::bIsRequest = false
private

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

다음에 의해서 참조됨 : OnResponseListenAudio(), OnResponseSpeakAudio(), RequestListenAudio(), RequestSpeakAudio().

◆ bIsRunning

bool APlayerActor::bIsRunning = false
private

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

◆ bShowOnCompass

bool ICompassTargetInterface::bShowOnCompass = true
inherited

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

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

◆ CompassMarkerMap

TMap<AActor*, class UImage*> APlayerActor::CompassMarkerMap
private

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

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

◆ FollowCamera

TObjectPtr<class UCameraComponent> APlayerActor::FollowCamera
protected

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

다음에 의해서 참조됨 : APlayerActor(), Tick().

◆ HoldPosition

TObjectPtr<class USceneComponent> APlayerActor::HoldPosition

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

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

◆ HookCable

TObjectPtr<class UStaticMeshComponent> APlayerActor::HookCable

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

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

◆ HookComp

TObjectPtr<class UHookComponent> APlayerActor::HookComp
protected

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

◆ HookProjectileMesh

TObjectPtr<class UStaticMeshComponent> APlayerActor::HookProjectileMesh

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

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

◆ HookSystem

TObjectPtr<class UHookSystem> APlayerActor::HookSystem

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

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

◆ InteractionSystem

TObjectPtr<class UInteractionSystem> APlayerActor::InteractionSystem

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

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

◆ LookPitch

float APlayerActor::LookPitch
protected

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

다음에 의해서 참조됨 : APlayerActor(), GetLifetimeReplicatedProps().

◆ MainWidget

TObjectPtr<class UMainWidget> APlayerActor::MainWidget
private

메인 UI 위젯 인스턴스

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

다음에 의해서 참조됨 : CreateMainWidget(), OnFadeOutCompleteForTeleport(), OnRoomIdUpdated(), OnRoomLevelUpdated(), OnTeleportAllPlayers(), Tick(), UpdateCompassMarkers().

◆ MainWidgetClass

TSubclassOf<class UMainWidget> APlayerActor::MainWidgetClass
private

메인 위젯 블루프린트 클래스

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

다음에 의해서 참조됨 : APlayerActor(), CreateMainWidget().

◆ MarkerType

◆ miniOwlBot

TObjectPtr<class UChildActorComponent> APlayerActor::miniOwlBot
protected

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

다음에 의해서 참조됨 : APlayerActor(), BeginPlay(), GetMiniOwlBot(), OnRep_Controller(), Tick().

◆ MoveComp

TObjectPtr<class UCharacterMovementComponent> APlayerActor::MoveComp
protected

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

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

◆ PendingTeleportTransform

FTransform APlayerActor::PendingTeleportTransform
private

텔레포트 목표 위치

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

다음에 의해서 참조됨 : OnFadeOutCompleteForTeleport(), OnTeleportAllPlayers().

◆ RunSpeed

float APlayerActor::RunSpeed = 500.f
private

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

◆ SpringArmComp

TObjectPtr<class USpringArmComponent> APlayerActor::SpringArmComp
protected

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

◆ ToastWidget

TObjectPtr<class UToastWidget> APlayerActor::ToastWidget
private

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

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

◆ ToastWidgetClass

TSubclassOf<class UToastWidget> APlayerActor::ToastWidgetClass
private

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

다음에 의해서 참조됨 : APlayerActor(), CreateToastWidget().

◆ VoiceConversationSystem

TObjectPtr<class UVoiceConversationSystem> APlayerActor::VoiceConversationSystem
protected

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

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

◆ WalkSpeed

float APlayerActor::WalkSpeed = 200.f
private

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

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


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