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

#include <ALuggageHolder.h>

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

Public 멤버 함수

 ALuggageHolder ()
 
ECompassMarkerType GetCompassMarkerType ()
 
void Multicast_ShowResultPopup (int32 CorrectAnswerIndex)
 [Multicast RPC] 모든 클라이언트에 정답 결과 팝업 표시
 
void Multicast_ShowWrongPopup (const FString &LuggageColor, const FString &LuggagePattern)
 [Multicast RPC] 모든 클라이언트에 오답 메시지 표시
 
void OnActivate (bool bSuccess)
 
virtual void SetShowOnCompass (bool bShow)
 
virtual bool ShouldShowOnCompass () const
 

Public 속성

TObjectPtr< class UBoxComponent > BoxCollision
 
bool bShowOnCompass = true
 
TObjectPtr< class USceneComponent > HoldPos
 
ECompassMarkerType MarkerType
 
TObjectPtr< class USkeletalMeshComponent > MeshComponent
 
TObjectPtr< class UWidgetComponent > WidgetGuideComp
 

Protected 멤버 함수

virtual void BeginPlay () override
 
virtual void GetLifetimeReplicatedProps (TArray< class FLifetimeProperty > &OutLifetimeProps) const override
 
virtual void SetCompassMarkerInto (ECompassMarkerType InMarkerType) override
 
virtual void Tick (float DeltaTime) override
 

Protected 속성

float ActivatedHeightOffset = 50.0f
 
bool bIsActivated = false
 
TObjectPtr< class AActor > CurTarget
 
float RotationSpeed = 90.0f
 

Private 멤버 함수

void BillboardInteractWidget ()
 상호작용 위젯 빌보드화 (카메라를 향하도록)
 
bool CheckLuggage (class Aluggage *TargetLuggage, int CorrectIndex)
 
void OnBoxOverlapBegin (UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
 
void OnRep_CurTarget ()
 
void OnRep_IsActivated ()
 
void UpdateActivateState (bool State)
 

Private 속성

FTimerHandle DestroyTimerHandle
 

상세한 설명

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

생성자 & 소멸자 문서화

◆ ALuggageHolder()

ALuggageHolder::ALuggageHolder ( )

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

23{
24 PrimaryActorTick.bCanEverTick = true;
25
26 // Replication
27 bReplicates = true;
28
29 // Root component
30 USceneComponent* Root = CreateDefaultSubobject<USceneComponent>(TEXT("DefaultSceneRoot"));
31 RootComponent = Root;
32
33 // Mesh component
34 MeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("MeshComponent"));
35 MeshComponent->SetupAttachment(RootComponent);
36
37 // Box collision component
38 BoxCollision = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxCollision"));
39 BoxCollision->SetupAttachment(MeshComponent);
40 BoxCollision->SetGenerateOverlapEvents(true);
41 BoxCollision->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
42 BoxCollision->SetCollisionResponseToAllChannels(ECR_Overlap);
43
44 // HoldPos component
45 HoldPos = CreateDefaultSubobject<USceneComponent>(TEXT("HoldPos"));
46 HoldPos->SetupAttachment(MeshComponent);
47
48 WidgetGuideComp = CreateDefaultSubobject<UWidgetComponent>(TEXT("WidgetGuideComp"));
49 WidgetGuideComp->SetupAttachment(RootComponent);
50 WidgetGuideComp->SetRelativeLocation(FVector(0.f, 0.f, 180.f));
51 WidgetGuideComp->SetDrawAtDesiredSize(true);
52 ConstructorHelpers::FClassFinder<UUserWidget> widgetGuideClassRef(TEXT("/Game/CustomContents/UI/Widgets/WBP_LuggageSlotWidget.WBP_LuggageSlotWidget_C"));
53 if (widgetGuideClassRef.Succeeded())
54 {
55 WidgetGuideComp->SetWidgetClass(widgetGuideClassRef.Class);
56 }
57
59}
TObjectPtr< class USceneComponent > HoldPos
TObjectPtr< class UWidgetComponent > WidgetGuideComp
TObjectPtr< class USkeletalMeshComponent > MeshComponent
TObjectPtr< class UBoxComponent > BoxCollision

다음을 참조함 : BoxCollision, HoldPos, ICompassTargetInterface::MarkerType, MeshComponent, QuestEnd, WidgetGuideComp.

멤버 함수 문서화

◆ BeginPlay()

void ALuggageHolder::BeginPlay ( )
overrideprotectedvirtual

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

62{
63 Super::BeginPlay();
64
65 BoxCollision->OnComponentBeginOverlap.AddDynamic(this, &ALuggageHolder::OnBoxOverlapBegin);
66
67 // 머티리얼 파라미터 초기화 (비활성화 상태)
69}
void UpdateActivateState(bool State)
void OnBoxOverlapBegin(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)

다음을 참조함 : BoxCollision, OnBoxOverlapBegin(), UpdateActivateState().

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

◆ BillboardInteractWidget()

void ALuggageHolder::BillboardInteractWidget ( )
private

상호작용 위젯 빌보드화 (카메라를 향하도록)

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

241{
242 // 위젯이 없으면 빌보드화 안 함
243 if (!WidgetGuideComp)
244 return;
245
246 // Visibility 체크 - 보이지 않으면 빌보드화 안 함
247 if (!WidgetGuideComp->IsVisible())
248 return;
249
250 // 카메라 가져오기
251 AActor* Camera = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0);
252 if (!Camera)
253 return;
254
255 // 카메라를 향하도록 회전 계산
256 FRotator Rotation = UKismetMathLibrary::MakeRotFromXZ( -Camera->GetActorForwardVector(), Camera->GetActorUpVector() );
257 Rotation.Pitch = 0;
258
259 // 위젯 회전 설정
260 WidgetGuideComp->SetWorldRotation(Rotation);
261}

다음을 참조함 : WidgetGuideComp.

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

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

◆ CheckLuggage()

bool ALuggageHolder::CheckLuggage ( class Aluggage TargetLuggage,
int  CorrectIndex 
)
private

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

191{
192 if (!TargetLuggage)
193 return false;
194
195 // Luggage의 모든 충돌 비활성화 (pickup, hook 등 모든 상호작용 차단)
196 TargetLuggage->SetAllCollision(false);
197
198 // ReadQuest 정답 인덱스 가져오기
199 if (CorrectIndex == TargetLuggage->GetSpawnIdx())
200 {
201 // Success: Luggage를 HoldPos 위치보다 살짝 위에 배치
202 FVector ActivatedLocation = HoldPos->GetComponentLocation();
203 ActivatedLocation.Z += ActivatedHeightOffset;
204 TargetLuggage->SetActorLocation(ActivatedLocation);
205 TargetLuggage->SetActorRotation(HoldPos->GetComponentRotation());
206
207 // Activate 상태로 전환
208 bIsActivated = true;
209 CurTarget = TargetLuggage;
210
211 // 서버에서도 머티리얼 업데이트 (클라이언트는 OnRep_IsActivated에서 호출됨)
213
214 return true;
215 }
216 else
217 {
218 // Fail: 서버에서 머티리얼 업데이트 (오답)
219 bIsActivated = false;
220 UpdateActivateState(false);
221
222 return false;
223 }
224}
float ActivatedHeightOffset
TObjectPtr< class AActor > CurTarget

다음을 참조함 : ActivatedHeightOffset, bIsActivated, CurTarget, Aluggage::GetSpawnIdx(), HoldPos, Aluggage::SetAllCollision(), UpdateActivateState().

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

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

◆ GetCompassMarkerType()

ECompassMarkerType ICompassTargetInterface::GetCompassMarkerType ( )
inlineinherited

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

29{return MarkerType;}

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

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

◆ GetLifetimeReplicatedProps()

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

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

87{
88 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
89
90 DOREPLIFETIME(ALuggageHolder, bIsActivated);
91 DOREPLIFETIME(ALuggageHolder, CurTarget);
92}

다음을 참조함 : bIsActivated, CurTarget.

◆ Multicast_ShowResultPopup()

void ALuggageHolder::Multicast_ShowResultPopup ( int32  CorrectAnswerIndex)

[Multicast RPC] 모든 클라이언트에 정답 결과 팝업 표시

매개변수
CorrectAnswerIndex정답 인덱스 (WrongAnswerList 마지막에 추가)

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

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

◆ Multicast_ShowWrongPopup()

void ALuggageHolder::Multicast_ShowWrongPopup ( const FString &  LuggageColor,
const FString &  LuggagePattern 
)

[Multicast RPC] 모든 클라이언트에 오답 메시지 표시

매개변수
LuggageColor선택한 Luggage 색상
LuggagePattern선택한 Luggage 무늬

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

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

◆ OnActivate()

void ALuggageHolder::OnActivate ( bool  bSuccess)

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

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

◆ OnBoxOverlapBegin()

void ALuggageHolder::OnBoxOverlapBegin ( UPrimitiveComponent *  OverlappedComponent,
AActor *  OtherActor,
UPrimitiveComponent *  OtherComp,
int32  OtherBodyIndex,
bool  bFromSweep,
const FHitResult &  SweepResult 
)
private

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

120{
121 if (!OtherActor)
122 return;
123
124 if (!HasAuthority())
125 return;
126
127 if ( bIsActivated )
128 return;
129
130 ALingoGameState* GS = Cast<ALingoGameState>(GetWorld()->GetGameState());
131 if (!GS)
132 return;
133
134 // Luggage인지 확인
135 if (auto Luggage = Cast<Aluggage>(OtherActor))
136 {
137 // Hook 중인 Luggage는 무시 (PlayerActor가 들고 있는 상태)
138 if (Luggage->bIsBeingHooked)
139 return;
140
141 const bool bSuccess = CheckLuggage(Luggage, GS->GetReadScenarioData().correct_answer_index );
142
143 // 블루프린트 이벤트 호출
144 OnActivate(bSuccess);
145
146 if (bSuccess)
147 {
148 // 정답인 경우
149 int32 CorrectIdx = Luggage->GetSpawnIdx();
150
151 // 마커 표시
152 GS->SetAllCompassVisibility(false);
153 GS->SetCompassVisibilityByTag("ReadQuestEnd", true);
154
155 FTimerHandle TimerHandle;
156 GetWorldTimerManager().SetTimer(TimerHandle, [this, CorrectIdx]
157 {
158 // 모든 클라이언트에 정답 인덱스와 함께 결과 팝업 표시
159 Multicast_ShowResultPopup(CorrectIdx);
160
161 }, 0.5f, false);
162 }
163 else
164 {
165 // 오답인 경우
166 FTimerHandle TimerHandle;
167 GetWorldTimerManager().SetTimer(TimerHandle, [this, Luggage, GS]
168 {
169 GS->AddWrongReadAnswer(Luggage->GetSpawnIdx());
170
171 // 모든 클라이언트에 오답 메시지 표시
172 Multicast_ShowWrongPopup(Luggage->GetColor(), Luggage->GetPattern());
173
174 // Dissolve 재생
175 GetWorldTimerManager().SetTimer(DestroyTimerHandle, [this, Luggage]
176 {
177 if (Luggage->UpdateDissolve())
178 {
179 GetWorldTimerManager().ClearTimer(DestroyTimerHandle);
180 // 큐브 소거 (서버에서만, 자동 복제됨)
181 Luggage->Destroy();
182 }
183 },GetWorld()->DeltaTimeSeconds, true);
184
185 }, 0.5f, false);
186 }
187 }
188}
void SetCompassVisibilityByTag(FName Tag, bool bVisible)
void SetAllCompassVisibility(bool bVisible)
FORCEINLINE const FResponseReadScenario & GetReadScenarioData() const
void AddWrongReadAnswer(int32 Value)
FTimerHandle DestroyTimerHandle
bool CheckLuggage(class Aluggage *TargetLuggage, int CorrectIndex)
void Multicast_ShowWrongPopup(const FString &LuggageColor, const FString &LuggagePattern)
[Multicast RPC] 모든 클라이언트에 오답 메시지 표시
void Multicast_ShowResultPopup(int32 CorrectAnswerIndex)
[Multicast RPC] 모든 클라이언트에 정답 결과 팝업 표시
void OnActivate(bool bSuccess)

다음을 참조함 : ALingoGameState::AddWrongReadAnswer(), bIsActivated, CheckLuggage(), FResponseReadScenario::correct_answer_index, DestroyTimerHandle, ALingoGameState::GetReadScenarioData(), Multicast_ShowResultPopup(), Multicast_ShowWrongPopup(), OnActivate(), ALingoGameState::SetAllCompassVisibility(), ALingoGameState::SetCompassVisibilityByTag().

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

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

◆ OnRep_CurTarget()

void ALuggageHolder::OnRep_CurTarget ( )
private

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

101{
102 // CurTarget이 복제될 때 클라이언트에서도 충돌 비활성화
103 if (CurTarget)
104 {
105 if (Aluggage* Luggage = Cast<Aluggage>(CurTarget))
106 {
107 Luggage->SetAllCollision(false);
108 PRINTLOG(TEXT("AHolder::OnRep_CurTarget - Disabled collision for Luggage on client"));
109 }
110 }
111}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
상호작용 가능한 수하물 액터
Definition luggage.h:15

다음을 참조함 : CurTarget, PRINTLOG.

◆ OnRep_IsActivated()

void ALuggageHolder::OnRep_IsActivated ( )
private

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

95{
96 // bIsActivated가 복제될 때 머티리얼 업데이트
98}

다음을 참조함 : bIsActivated, UpdateActivateState().

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

◆ SetCompassMarkerInto()

void ALuggageHolder::SetCompassMarkerInto ( ECompassMarkerType  InMarkerType)
overrideprotectedvirtual

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

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

264{
265 MarkerType = InMarkerType;
266}

다음을 참조함 : ICompassTargetInterface::MarkerType.

◆ SetShowOnCompass()

virtual void ICompassTargetInterface::SetShowOnCompass ( bool  bShow)
inlinevirtualinherited

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

◆ ShouldShowOnCompass()

virtual bool ICompassTargetInterface::ShouldShowOnCompass ( ) const
inlinevirtualinherited

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

32{return bShowOnCompass;}

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

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

◆ Tick()

void ALuggageHolder::Tick ( float  DeltaTime)
overrideprotectedvirtual

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

72{
73 Super::Tick(DeltaTime);
74
75 // CurrentLuggage가 유효하고 활성화된 상태라면 회전
77 {
78 FRotator CurrentRotation = CurTarget->GetActorRotation();
79 CurrentRotation.Yaw += RotationSpeed * DeltaTime;
80 CurTarget->SetActorRotation(CurrentRotation);
81 }
82
84}
void BillboardInteractWidget()
상호작용 위젯 빌보드화 (카메라를 향하도록)

다음을 참조함 : BillboardInteractWidget(), bIsActivated, CurTarget, RotationSpeed.

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

◆ UpdateActivateState()

void ALuggageHolder::UpdateActivateState ( bool  State)
private

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

227{
228 // 머티리얼 파라미터 설정 (비활성화)
229 if (MeshComponent && MeshComponent->GetNumMaterials() > 0)
230 {
231 UMaterialInstanceDynamic* DynamicMaterial = Cast<UMaterialInstanceDynamic>(MeshComponent->GetMaterial(0));
232 if (!DynamicMaterial)
233 DynamicMaterial = MeshComponent->CreateDynamicMaterialInstance(0);
234
235 if (DynamicMaterial)
236 DynamicMaterial->SetScalarParameterValue(FName("Activate"), State ? 1.0f : 0.0f);
237 }
238}

다음을 참조함 : MeshComponent.

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

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

멤버 데이터 문서화

◆ ActivatedHeightOffset

float ALuggageHolder::ActivatedHeightOffset = 50.0f
protected

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

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

◆ bIsActivated

bool ALuggageHolder::bIsActivated = false
protected

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

다음에 의해서 참조됨 : CheckLuggage(), GetLifetimeReplicatedProps(), OnBoxOverlapBegin(), OnRep_IsActivated(), Tick().

◆ BoxCollision

TObjectPtr<class UBoxComponent> ALuggageHolder::BoxCollision

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

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

◆ bShowOnCompass

bool ICompassTargetInterface::bShowOnCompass = true
inherited

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

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

◆ CurTarget

TObjectPtr<class AActor> ALuggageHolder::CurTarget
protected

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

다음에 의해서 참조됨 : CheckLuggage(), GetLifetimeReplicatedProps(), OnRep_CurTarget(), Tick().

◆ DestroyTimerHandle

FTimerHandle ALuggageHolder::DestroyTimerHandle
private

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

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

◆ HoldPos

TObjectPtr<class USceneComponent> ALuggageHolder::HoldPos

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

다음에 의해서 참조됨 : ALuggageHolder(), CheckLuggage().

◆ MarkerType

◆ MeshComponent

TObjectPtr<class USkeletalMeshComponent> ALuggageHolder::MeshComponent

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

다음에 의해서 참조됨 : ALuggageHolder(), UpdateActivateState().

◆ RotationSpeed

float ALuggageHolder::RotationSpeed = 90.0f
protected

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

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

◆ WidgetGuideComp

TObjectPtr<class UWidgetComponent> ALuggageHolder::WidgetGuideComp

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

다음에 의해서 참조됨 : ALuggageHolder(), BillboardInteractWidget().


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