Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
ACK_CharacterEnemy 클래스 참조

#include <CK_CharacterEnemy.h>

ACK_CharacterEnemy에 대한 상속 다이어그램 :
Inheritance graph
ACK_CharacterEnemy에 대한 협력 다이어그램:
Collaboration graph

Public 멤버 함수

 ACK_CharacterEnemy ()
 
virtual void PostInitializeComponents () override
 
virtual void BeginPlay () override
 
virtual void OnSpawnFromPool_Implementation () override
 
virtual void OnReturnToPool_Implementation () override
 
virtual void OnDeath ()
 
void OnDamageTaken (AActor *TargetActor, float DamageAmount, bool bIsCritical)
 
virtual void InitializeAttributes () override
 
FORCEINLINE UEnemyAttributeSetGetEnemyAttributeSet () const
 
void OnStunTagChanged (const FGameplayTag CallbackTag, int32 NewCount) const
 
- ACK_CharacterBase(으)로부터 상속된 Public 멤버 함수
 ACK_CharacterBase ()
 
virtual class UAbilitySystemComponent * GetAbilitySystemComponent () const override
 
virtual void SetDead ()
 
void PlayDeadAnimation ()
 
- IObjectPoolingInterface(으)로부터 상속된 Public 멤버 함수
void OnSpawnFromPool ()
 
void OnReturnToPool ()
 

Protected 멤버 함수

virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
virtual void GiveDefaultAbilities ()
 

Protected 속성

TObjectPtr< UEnemyAttributeSetAttributeSet
 
TObjectPtr< UCharacterControlDataCharacterControlData
 
TObjectPtr< UGASWidgetComponentHpBar
 
float DeadEventDelayTime = 5.0f
 
const FEnemyExtendedDataEnemyExtendedData = nullptr
 
- ACK_CharacterBase(으)로부터 상속된 Protected 속성
TObjectPtr< class UAbilitySystemComponent > ASC
 

Private 속성

FDelegateHandle StunTagDelegateHandle
 

생성자 & 소멸자 문서화

◆ ACK_CharacterEnemy()

ACK_CharacterEnemy::ACK_CharacterEnemy ( )
23{
24 ASC = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("ASC"));
25 AttributeSet = CreateDefaultSubobject<UEnemyAttributeSet>(TEXT("EnemyAttributeSet"));
26
27 HpBar = CreateDefaultSubobject<UGASWidgetComponent>(TEXT("WidgetHpBar"));
28 HpBar->SetupAttachment(GetRootComponent());
29 HpBar->SetRelativeLocation(FVector(0.0f, 0.0f, 180.0f));
30 HpBar->SetDrawSize(FVector2D(150.0f, 15.0f));
31 HpBar->SetWidgetSpace(EWidgetSpace::Screen);
32 HpBar->SetCollisionEnabled(ECollisionEnabled::NoCollision);
33
34 GetCharacterMovement()->bUseRVOAvoidance = false;
35
36 GetCapsuleComponent()->SetCollisionProfileName(CPROFILE_CKENEMYCAPSULE);
37 AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
38}
#define CPROFILE_CKENEMYCAPSULE
Definition CK_Collision.h:13
TObjectPtr< class UAbilitySystemComponent > ASC
Definition CK_CharacterBase.h:24
TObjectPtr< UGASWidgetComponent > HpBar
Definition CK_CharacterEnemy.h:59
TObjectPtr< UEnemyAttributeSet > AttributeSet
Definition CK_CharacterEnemy.h:53

멤버 함수 문서화

◆ BeginPlay()

void ACK_CharacterEnemy::BeginPlay ( )
overridevirtual
51{
52 Super::BeginPlay();
53 if (ASC)
54 {
55 ASC->InitAbilityActorInfo(this,this);
58 if (HpBar)
59 {
60 if (UHpBarUserWidget* HpWidget = Cast<UHpBarUserWidget>(HpBar->GetWidget()))
61 {
62 HpWidget->SetAbilitySystemComponent(this);
63 }
64 }
65
66 if (AttributeSet)
67 {
68 AttributeSet->OnDeathDelegate.AddDynamic(this, &ThisClass::OnDeath);
69 AttributeSet->OnDamageDelegate.AddDynamic(this, &ACK_CharacterEnemy::OnDamageTaken);
70 }
71 else
72 {
73 LOG_ERROR(LogCKAttribute, "Enemy AttributeSet 없음");
74 }
75
76 StunTagDelegateHandle = ASC->RegisterGameplayTagEvent( TAG_CHARACTER_STATE_ISSTUN, EGameplayTagEventType::NewOrRemoved).AddUObject(this, &ACK_CharacterEnemy::OnStunTagChanged);
77 }
78}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:32
void OnDamageTaken(AActor *TargetActor, float DamageAmount, bool bIsCritical)
Definition CK_CharacterEnemy.cpp:232
virtual void GiveDefaultAbilities()
Definition CK_CharacterEnemy.cpp:183
virtual void InitializeAttributes() override
Definition CK_CharacterEnemy.cpp:131
FDelegateHandle StunTagDelegateHandle
Definition CK_CharacterEnemy.h:67
void OnStunTagChanged(const FGameplayTag CallbackTag, int32 NewCount) const
Definition CK_CharacterEnemy.cpp:163
Definition HpBarUserWidget.h:15
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ EndPlay()

void ACK_CharacterEnemy::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprotectedvirtual
196{
197 if (ASC && StunTagDelegateHandle.IsValid())
198 {
199 ASC->UnregisterGameplayTagEvent(StunTagDelegateHandle, TAG_CHARACTER_STATE_ISSTUN, EGameplayTagEventType::NewOrRemoved);
200 }
201
202 Super::EndPlay(EndPlayReason);
203}

◆ GetEnemyAttributeSet()

FORCEINLINE UEnemyAttributeSet * ACK_CharacterEnemy::GetEnemyAttributeSet ( ) const
inline
42{ return AttributeSet; }

◆ GiveDefaultAbilities()

void ACK_CharacterEnemy::GiveDefaultAbilities ( )
protectedvirtual
184{
185 for (const auto& StartAbility : CharacterControlData->StartAbilities)
186 {
187 if (StartAbility)
188 {
189 FGameplayAbilitySpec StartSpec(StartAbility,1,INDEX_NONE, this);
190 ASC->GiveAbility(StartSpec);
191 }
192 }
193}
TObjectPtr< UCharacterControlData > CharacterControlData
Definition CK_CharacterEnemy.h:56
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ InitializeAttributes()

void ACK_CharacterEnemy::InitializeAttributes ( )
overridevirtual
132{
133 if (!ASC || !CharacterControlData || !CharacterControlData->StatTable || !AttributeSet)
134 {
135 return;
136 }
137
138 FEnemyStatTableRow* StatRow = CharacterControlData->StatTable->FindRow<FEnemyStatTableRow>(CharacterControlData->StatRowName, TEXT("MonsterStatContext"));
139 if (!StatRow)
140 {
141 LOG_WARNING(LogCKAttribute, "Enemy stat row 없음");
142 return;
143 }
144
145 // Base 공통 스탯 초기화
146 AttributeSet->InitBaseStats(
147 StatRow->Monster_Hp,
148 StatRow->Monster_Move_Speed,
149 StatRow->Monster_Attack,
150 StatRow->Monster_Attack_Speed,
151 StatRow->Monster_Stun
152 );
153
154
155 // Enemy 전용 스탯 초기화
156 AttributeSet->InitEnemyStats(
157 StatRow->Monster_Attack_Range,
158 StatRow->Monster_Vision_Range,
159 StatRow->Monster_Drop_Soul
160 );
161}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:31
Definition StatTable.h:32
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnDamageTaken()

void ACK_CharacterEnemy::OnDamageTaken ( AActor *  TargetActor,
float  DamageAmount,
bool  bIsCritical 
)
233{
234 if (TargetActor == this && ASC)
235 {
236 FGameplayCueParameters Parameters;
237 Parameters.RawMagnitude = DamageAmount;
238 Parameters.NormalizedMagnitude = bIsCritical ? 1.0f : 0.0f;
239 Parameters.Location = GetActorLocation();
240
241 ASC->ExecuteGameplayCue(TAG_CUE_DAMAGE, Parameters);
242 }
243}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnDeath()

void ACK_CharacterEnemy::OnDeath ( )
virtual
206{
207 SetDead();
208
209 if (AAIController* AIController = Cast<AAIController>(GetController()))
210 {
211 if (UStateTreeAIComponent* STComp = AIController->FindComponentByClass<UStateTreeAIComponent>())
212 {
213 STComp->StopLogic("Dead");
214 }
215 }
216
217 TWeakObjectPtr WeakThis = this;
218 FTimerHandle DeadTimerHandle;
219 GetWorld()->GetTimerManager().SetTimer(DeadTimerHandle, FTimerDelegate::CreateLambda(
220 [WeakThis]()
221 {
222 if (WeakThis.IsValid())
223 {
224 if (UPoolWorldSubsystem* PoolSubsystem = WeakThis->GetWorld()->GetSubsystem<UPoolWorldSubsystem>())
225 {
226 PoolSubsystem->ReturnActorToPool(WeakThis.Get());
227 }
228 }
229 }), DeadEventDelayTime, false);
230}
virtual void SetDead()
Definition CK_CharacterBase.cpp:41
float DeadEventDelayTime
Definition CK_CharacterEnemy.h:62
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnReturnToPool_Implementation()

void ACK_CharacterEnemy::OnReturnToPool_Implementation ( )
overridevirtual
116{
117 if (ASC)
118 {
119 ASC->CancelAllAbilities();
120 }
121
122 if (AAIController* AICon = Cast<AAIController>(GetController()))
123 {
124 if (UStateTreeAIComponent* STComp = AICon->FindComponentByClass<UStateTreeAIComponent>())
125 {
126 STComp->StopLogic("ReturnedToPool");
127 }
128 }
129}

◆ OnSpawnFromPool_Implementation()

void ACK_CharacterEnemy::OnSpawnFromPool_Implementation ( )
overridevirtual
81{
82 if (UCapsuleComponent* CapsuleComp = GetCapsuleComponent())
83 {
84 CapsuleComp->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
85 CapsuleComp->SetCollisionProfileName(CPROFILE_CKENEMYCAPSULE);
86 }
87
88 if (USkeletalMeshComponent* MeshComp = GetMesh())
89 {
90 MeshComp->SetSimulatePhysics(false);
91 MeshComp->SetCollisionProfileName(TEXT("NoCollision"));
92 MeshComp->AttachToComponent(GetCapsuleComponent(), FAttachmentTransformRules::SnapToTargetNotIncludingScale);
93 MeshComp->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -100.0f), FRotator(0.0f, -90.0f, 0.0f));
94 }
95 GetCharacterMovement()->SetMovementMode(MOVE_Walking);
96
97 if (ASC)
98 {
99 ASC->RemoveAllGameplayCues();
100
101 ASC->SetLooseGameplayTagCount(TAG_CHARACTER_STATE_ISDEAD, 0);
102
104 }
105
106 if (AAIController* AICon = Cast<AAIController>(GetController()))
107 {
108 if (UStateTreeAIComponent* STComp = AICon->FindComponentByClass<UStateTreeAIComponent>())
109 {
110 STComp->StartLogic();
111 }
112 }
113}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnStunTagChanged()

void ACK_CharacterEnemy::OnStunTagChanged ( const FGameplayTag  CallbackTag,
int32  NewCount 
) const
164{
165 bool bIsStunned = (NewCount > 0);
166
167 if (AAIController* AICon = Cast<AAIController>(GetController()))
168 {
169 if (bIsStunned)
170 {
171 AICon->StopMovement();
172 }
173
174 if (UStateTreeAIComponent* STComp = AICon->FindComponentByClass<UStateTreeAIComponent>())
175 {
176 FStateTreeEvent Event;
177 Event.Tag = bIsStunned ? TAG_CHARACTER_STATE_ISSTUN_START : TAG_CHARACTER_STATE_ISSTUN_End;
178 STComp->SendStateTreeEvent(Event);
179 }
180 }
181}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ PostInitializeComponents()

void ACK_CharacterEnemy::PostInitializeComponents ( )
overridevirtual
41{
42 Super::PostInitializeComponents();
43
45 {
47 }
48}
const FEnemyExtendedData * EnemyExtendedData
Definition CK_CharacterEnemy.h:64
Definition CharacterControlData.h:61

멤버 데이터 문서화

◆ AttributeSet

TObjectPtr<UEnemyAttributeSet> ACK_CharacterEnemy::AttributeSet
protected

◆ CharacterControlData

TObjectPtr<UCharacterControlData> ACK_CharacterEnemy::CharacterControlData
protected

◆ DeadEventDelayTime

float ACK_CharacterEnemy::DeadEventDelayTime = 5.0f
protected

◆ EnemyExtendedData

const FEnemyExtendedData* ACK_CharacterEnemy::EnemyExtendedData = nullptr
protected

◆ HpBar

TObjectPtr<UGASWidgetComponent> ACK_CharacterEnemy::HpBar
protected

◆ StunTagDelegateHandle

FDelegateHandle ACK_CharacterEnemy::StunTagDelegateHandle
private

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