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

#include <AHolder.h>

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

Public 멤버 함수

 AHolder ()
 
void OnActivate (bool bSuccess)
 
void SetAnswerData (const int32 InAnswerColorIdx, const int32 InAnswerPatternIdx)
 

Public 속성

TObjectPtr< class UBoxComponent > BoxCollision
 
TObjectPtr< class USceneComponent > HoldPos
 
TObjectPtr< class USkeletalMeshComponent > MeshComponent
 

Protected 멤버 함수

virtual void BeginPlay () override
 
virtual void GetLifetimeReplicatedProps (TArray< class FLifetimeProperty > &OutLifetimeProps) const override
 
virtual void Tick (float DeltaTime) override
 
void UpdateActivateState (bool State)
 

Protected 속성

float ActivatedHeightOffset = 50.0f
 
int32 AnswerColorIdx = -1
 
int32 AnswerPatternIdx = -1
 
bool bIsActivated = false
 
TObjectPtr< class AActor > CurTarget
 
float RotationSpeed = 90.0f
 

Private 멤버 함수

bool CheckLuggage (class Aluggage *TargetLuggage)
 
void OnBoxOverlapBegin (UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
 
void OnRep_CurTarget ()
 
void OnRep_IsActivated ()
 

상세한 설명

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

생성자 & 소멸자 문서화

◆ AHolder()

AHolder::AHolder ( )

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

15{
16 PrimaryActorTick.bCanEverTick = true;
17
18 // Replication
19 bReplicates = true;
20
21 // Root component
22 USceneComponent* Root = CreateDefaultSubobject<USceneComponent>(TEXT("DefaultSceneRoot"));
23 RootComponent = Root;
24
25 // Mesh component
26 MeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("MeshComponent"));
27 MeshComponent->SetupAttachment(RootComponent);
28
29 // Box collision component
30 BoxCollision = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxCollision"));
31 BoxCollision->SetupAttachment(MeshComponent);
32 BoxCollision->SetGenerateOverlapEvents(true);
33 BoxCollision->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
34 BoxCollision->SetCollisionResponseToAllChannels(ECR_Overlap);
35
36 // HoldPos component
37 HoldPos = CreateDefaultSubobject<USceneComponent>(TEXT("HoldPos"));
38 HoldPos->SetupAttachment(MeshComponent);
39}
TObjectPtr< class UBoxComponent > BoxCollision
Definition AHolder.h:53
TObjectPtr< class USkeletalMeshComponent > MeshComponent
Definition AHolder.h:56
TObjectPtr< class USceneComponent > HoldPos
Definition AHolder.h:59

다음을 참조함 : BoxCollision, HoldPos, MeshComponent.

멤버 함수 문서화

◆ BeginPlay()

void AHolder::BeginPlay ( )
overrideprotectedvirtual

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

42{
43 Super::BeginPlay();
44
45 BoxCollision->OnComponentBeginOverlap.AddDynamic(this, &AHolder::OnBoxOverlapBegin);
46
47 // 머티리얼 파라미터 초기화 (비활성화 상태)
49}
void OnBoxOverlapBegin(UPrimitiveComponent *OverlappedComponent, AActor *OtherActor, UPrimitiveComponent *OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult)
Definition AHolder.cpp:97
void UpdateActivateState(bool State)
Definition AHolder.cpp:183

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

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

◆ CheckLuggage()

bool AHolder::CheckLuggage ( class Aluggage TargetLuggage)
private

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

135{
136 if (!TargetLuggage)
137 return false;
138
139 // ColorIdx와 PatternIdx 비교
140 bool bColorMatch = (AnswerColorIdx == -1) || (TargetLuggage->ColorIdx == AnswerColorIdx);
141 bool bPatternMatch = (AnswerPatternIdx == -1) || (TargetLuggage->PatternIdx == AnswerPatternIdx);
142 bool bSuccess = bColorMatch && bPatternMatch;
143
144 PRINTLOG(TEXT("ColorIdx: %d (Answer: %d), PatternIdx: %d (Answer: %d), Result: %s"),
145 TargetLuggage->ColorIdx, AnswerColorIdx,
146 TargetLuggage->PatternIdx, AnswerPatternIdx,
147 bSuccess ? TEXT("Success") : TEXT("Fail"));
148
149 if (bSuccess)
150 {
151 // Success: Luggage를 HoldPos 위치보다 살짝 위에 배치
152 if (HoldPos)
153 {
154 FVector ActivatedLocation = HoldPos->GetComponentLocation();
155 ActivatedLocation.Z += ActivatedHeightOffset;
156 TargetLuggage->SetActorLocation(ActivatedLocation);
157 TargetLuggage->SetActorRotation(HoldPos->GetComponentRotation());
158 }
159
160 // Luggage의 모든 충돌 비활성화 (pickup, hook 등 모든 상호작용 차단)
161 TargetLuggage->SetAllCollision(false);
162
163 // Activate 상태로 전환
164 bIsActivated = true;
165 CurTarget = TargetLuggage;
166
167 // 서버에서도 머티리얼 업데이트 (클라이언트는 OnRep_IsActivated에서 호출됨)
169 }
170 else
171 {
172 // Fail: Luggage 제거
173 bIsActivated = false;
174 TargetLuggage->Destroy();
175
176 // 서버에서 머티리얼 업데이트 (오답)
177 UpdateActivateState(false);
178 }
179
180 return bSuccess;
181}
#define PRINTLOG(fmt,...)
Definition GameLogging.h:30
int32 AnswerPatternIdx
Definition AHolder.h:79
int32 AnswerColorIdx
Definition AHolder.h:78
float ActivatedHeightOffset
Definition AHolder.h:72
TObjectPtr< class AActor > CurTarget
Definition AHolder.h:64
bool bIsActivated
Definition AHolder.h:68

다음을 참조함 : ActivatedHeightOffset, AnswerColorIdx, AnswerPatternIdx, bIsActivated, Aluggage::ColorIdx, CurTarget, HoldPos, Aluggage::PatternIdx, PRINTLOG, Aluggage::SetAllCollision(), UpdateActivateState().

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

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

◆ GetLifetimeReplicatedProps()

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

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

65{
66 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
67
68 DOREPLIFETIME(AHolder, bIsActivated);
69 DOREPLIFETIME(AHolder, CurTarget);
70}

다음을 참조함 : bIsActivated, CurTarget.

◆ OnActivate()

void AHolder::OnActivate ( bool  bSuccess)

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

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

◆ OnBoxOverlapBegin()

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

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

104{
105 if (!OtherActor)
106 return;
107
108 // 서버에서만 실행
109 if (!HasAuthority())
110 return;
111
112 if ( bIsActivated )
113 {
114 // 이미 Activate 되었으면 작동 안 함
115 return;
116 }
117
118 // Luggage인지 확인
119 if (auto Luggage = Cast<Aluggage>(OtherActor))
120 {
121 bool bSuccess = CheckLuggage(Luggage);
122
123 // 블루프린트 이벤트 호출
124 OnActivate(bSuccess);
125
126 // NetworkBroadcastActor를 통해 모든 클라이언트에 메시지 브로드캐스트
127 if (auto DM = ANetworkBroadcastActor::Get(this))
128 {
129 DM->SendTutorMessage(FText::FromString(bSuccess ? GameMessage::Holder_Success : GameMessage::Holder_Fail ), this);
130 }
131 }
132}
bool CheckLuggage(class Aluggage *TargetLuggage)
Definition AHolder.cpp:134
void OnActivate(bool bSuccess)
static ANetworkBroadcastActor * Get(const UObject *WorldContextObject)
싱글톤 인스턴스 가져오기
static const FString Holder_Success
Definition Onepiece.h:129

다음을 참조함 : bIsActivated, CheckLuggage(), ANetworkBroadcastActor::Get(), GameMessage::Holder_Fail, GameMessage::Holder_Success, OnActivate().

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

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

◆ OnRep_CurTarget()

void AHolder::OnRep_CurTarget ( )
private

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

79{
80 // CurTarget이 복제될 때 클라이언트에서도 충돌 비활성화
81 if (CurTarget)
82 {
83 if (Aluggage* Luggage = Cast<Aluggage>(CurTarget))
84 {
85 Luggage->SetAllCollision(false);
86 PRINTLOG(TEXT("AHolder::OnRep_CurTarget - Disabled collision for Luggage on client"));
87 }
88 }
89}
상호작용 가능한 수하물 액터
Definition luggage.h:15

다음을 참조함 : CurTarget, PRINTLOG.

◆ OnRep_IsActivated()

void AHolder::OnRep_IsActivated ( )
private

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

73{
74 // bIsActivated가 복제될 때 머티리얼 업데이트
76}

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

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

◆ SetAnswerData()

void AHolder::SetAnswerData ( const int32  InAnswerColorIdx,
const int32  InAnswerPatternIdx 
)

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

92{
93 this->AnswerColorIdx = InAnswerColorIdx;
94 this->AnswerPatternIdx = InAnswerPatternIdx;
95}

다음을 참조함 : AnswerColorIdx, AnswerPatternIdx.

◆ Tick()

void AHolder::Tick ( float  DeltaTime)
overrideprotectedvirtual

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

52{
53 Super::Tick(DeltaTime);
54
55 // CurrentLuggage가 유효하고 활성화된 상태라면 회전
57 {
58 FRotator CurrentRotation = CurTarget->GetActorRotation();
59 CurrentRotation.Yaw += RotationSpeed * DeltaTime;
60 CurTarget->SetActorRotation(CurrentRotation);
61 }
62}
float RotationSpeed
Definition AHolder.h:75

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

◆ UpdateActivateState()

void AHolder::UpdateActivateState ( bool  State)
protected

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

184{
185 // 머티리얼 파라미터 설정 (비활성화)
186 if (MeshComponent && MeshComponent->GetNumMaterials() > 0)
187 {
188 UMaterialInstanceDynamic* DynamicMaterial = Cast<UMaterialInstanceDynamic>(MeshComponent->GetMaterial(0));
189 if (!DynamicMaterial)
190 DynamicMaterial = MeshComponent->CreateDynamicMaterialInstance(0);
191
192 if (DynamicMaterial)
193 DynamicMaterial->SetScalarParameterValue(FName("Activate"), State ? 1.0f : 0.0f);
194 }
195}

다음을 참조함 : MeshComponent.

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

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

멤버 데이터 문서화

◆ ActivatedHeightOffset

float AHolder::ActivatedHeightOffset = 50.0f
protected

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

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

◆ AnswerColorIdx

int32 AHolder::AnswerColorIdx = -1
protected

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

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

◆ AnswerPatternIdx

int32 AHolder::AnswerPatternIdx = -1
protected

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

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

◆ bIsActivated

bool AHolder::bIsActivated = false
protected

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

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

◆ BoxCollision

TObjectPtr<class UBoxComponent> AHolder::BoxCollision

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

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

◆ CurTarget

TObjectPtr<class AActor> AHolder::CurTarget
protected

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

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

◆ HoldPos

TObjectPtr<class USceneComponent> AHolder::HoldPos

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

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

◆ MeshComponent

TObjectPtr<class USkeletalMeshComponent> AHolder::MeshComponent

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

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

◆ RotationSpeed

float AHolder::RotationSpeed = 90.0f
protected

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

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


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