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

#include <EnemyCharacterBase.h>

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

Public 멤버 함수

 AEnemyCharacterBase (const FObjectInitializer &ObjectInitializer=FObjectInitializer::Get())
 
virtual void ForceReturnToPool (bool bIsSpawnedEnemy=false)
 
virtual void ShowLockOnMarker () override
 
virtual void HideLockOnMarker () override
 
virtual void ShowTargetingMarker (float MarkerAlpha) override
 
virtual void HideTargetingMarker () override
 
virtual bool IsTargetable () const override
 
virtual UConstellationBaseCreateConstellation () override
 
FORCEINLINE UEnemyAttributeSetGetEnemyAttributeSet () const
 
FORCEINLINE FName GetConstellationID () const
 
FORCEINLINE UTargetingMarkerComponent * GetTargetingMarkerComponent () const
 
FORCEINLINE UTargetingMarkerComponent * GetLockOnMarkerComponent () const
 
FORCEINLINE UEnemyMotionWarpingComponent * GetMotionWarpingComponent () const
 
FORCEINLINE UCharacterControlDataGetCharacterControlData () const
 
- ACharacterBase(으)로부터 상속된 Public 멤버 함수
 ACharacterBase (const FObjectInitializer &ObjectInitializer=FObjectInitializer::Get())
 
virtual void SetDead ()
 
virtual bool IsDead () const
 
bool IsStaggerImmune () const
 
virtual class UAbilitySystemComponent * GetAbilitySystemComponent () const override
 
FORCEINLINE FOnAbilitySystemReady & GetOnAbilitySystemReady ()
 
FORCEINLINE UKnockbackComponent * GetKnockbackComponent () const
 
- IObjectPoolingInterface(으)로부터 상속된 Public 멤버 함수
void OnSpawnFromPool ()
 
void OnReturnToPool ()
 
- ITargetableInterface(으)로부터 상속된 Public 멤버 함수
virtual bool IsTargeted ()
 
virtual void SetPrevent (bool bPrevent)
 
virtual bool IsPrevented () const
 
virtual FVector GetTargetedActorLocation ()
 
virtual FRotator GetTargetedActionRotation ()
 
virtual bool IsTargetValid () const
 

Public 속성

FOnSpawnEnemyDead OnSpawnEnemyDead
 
FTimerHandle DeadTimerHandle
 

Protected 멤버 함수

virtual void PostInitializeComponents () override
 
virtual void BeginPlay () override
 
virtual void PossessedBy (AController *NewController) override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
virtual void InitializeAttributes () override
 
virtual void GiveDefaultAbilities ()
 
virtual void RebindHpBarWidget ()
 
virtual void BindCharacterDelegates ()
 
virtual void UnbindCharacterDelegates ()
 
virtual void OnBeforeStateTreeStart ()
 
void StartAILogic ()
 
void StopAILogic (const FString &Reason)
 
virtual void OnSpawnFromPool_Implementation () override
 
virtual void OnReturnToPool_Implementation () override
 
void ActivateEnemyState ()
 
void DeactivateEnemyState ()
 
virtual void ResetEnemyBehaviorComponents ()
 
virtual void OnDamageTaken (const FDamageResultData &DamageResult) override
 
virtual void OnDeath ()
 
virtual void PlayDeadAnimation () override
 
- ACharacterBase(으)로부터 상속된 Protected 멤버 함수
virtual void virtual InitializeAttributes() PURE_VIRTUAL(ACK_CharacterBase void OnMoveSpeedChanged (const struct FOnAttributeChangeData &Data)
 
bool CanPlayHitReaction (const FDamageResultData &DamageResult) const
 
void PlayHitReaction (AActor *Attacker)
 
virtual UAnimMontage * GetHitReactMontage () const
 
virtual void RotateHitSource (const FVector &HitFromLocation)
 
virtual void OnHitReactMontageEnded (UAnimMontage *Montage, bool bInterrupted)
 

Protected 속성

TObjectPtr< UEnemyAttributeSetAttributeSet
 
TObjectPtr< UCharacterControlDataCharacterControlData
 
TObjectPtr< UEnemySpawnDefinitionEnemySpawnDefinition
 
TObjectPtr< UEnemyDespawnDefinitionEnemyDespawnDefinition
 
TObjectPtr< UTargetingMarkerComponent > LockOnMarker
 
TObjectPtr< UTargetingMarkerComponent > TargetingMarker
 
TObjectPtr< UEnemyMotionWarpingComponent > MotionWarpingComponent
 
TObjectPtr< AAIController > CachedAIController
 
TObjectPtr< UStateTreeAIComponent > CachedStateTreeComp
 
const FEnemyExtendedDataEnemyExtendedData = nullptr
 
FTransform InitialMeshRelativeTransform
 
FName ConstellationID
 
float EnemyExp = 0.0f
 
- ACharacterBase(으)로부터 상속된 Protected 속성
FOnAbilitySystemReady OnAbilitySystemReady
 
TObjectPtr< UAbilitySystemComponent > ASC
 
TObjectPtr< UKnockbackComponent > KnockbackComponent
 
TObjectPtr< UAudioEmitterComponent > AudioTagComponent
 

Private 멤버 함수

void RequestReturnToPool (float DeadEventDelayTime=2.0f)
 
void OnGroggyStateChanged (EEnemyGroggyState NewState)
 
void PlayMeshPulse (const FGameplayTag &DamageTypeTag)
 
void StopMeshPulse ()
 
void GrantExpToPlayer () const
 

Private 속성

TWeakObjectPtr< UEnemyGroggyComponent > CachedGroggyComponent
 
TSharedPtr< TypeTween::ITweenControl > MeshPulseTween
 
FDelegateHandle MoveSpeedDelegateHandle
 
FDelegateHandle GroggyStateDelegateHandle
 

추가로 상속된 멤버들

- ITargetableInterface(으)로부터 상속된 정적 Public 멤버 함수
template<typename T >
static ITargetableInterfaceFrom (TObjectPtr< T > Object)
 
static ITargetableInterfaceFrom (UObject *Object)
 
static UObject * AsObject (ITargetableInterface *Interface)
 
static AActor * AsActor (ITargetableInterface *Interface)
 

상세한 설명

Enemy 공통 베이스.

생성자 & 소멸자 문서화

◆ AEnemyCharacterBase()

AEnemyCharacterBase::AEnemyCharacterBase ( const FObjectInitializer &  ObjectInitializer = FObjectInitializer::Get())
36 : Super(ObjectInitializer.SetDefaultSubobjectClass<UCharacterMovementComponentBase>(CharacterMovementComponentName))
37{
38 ASC = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("ASC"));
39
40 LockOnMarker = CreateDefaultSubobject<UTargetingMarkerComponent>(TEXT("LockOnMarker"));
41 LockOnMarker->SetupAttachment(GetRootComponent());
42
43 TargetingMarker = CreateDefaultSubobject<UTargetingMarkerComponent>(TEXT("TargetingMarker"));
44 TargetingMarker->SetupAttachment(GetRootComponent());
45
46 MotionWarpingComponent = CreateDefaultSubobject<UEnemyMotionWarpingComponent>(TEXT("MotionWarpingComponent"));
47
48 GetCharacterMovement()->bOrientRotationToMovement = false;
49 GetCharacterMovement()->bUseControllerDesiredRotation = true;
50
51 GetCapsuleComponent()->SetCollisionProfileName(CPROFILE_CKENEMYCAPSULE);
52 AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
53}
#define CPROFILE_CKENEMYCAPSULE
Definition CK_Collision.h:14
TObjectPtr< UAbilitySystemComponent > ASC
Definition CharacterBase.h:80
TObjectPtr< UTargetingMarkerComponent > LockOnMarker
Definition EnemyCharacterBase.h:176
TObjectPtr< UTargetingMarkerComponent > TargetingMarker
Definition EnemyCharacterBase.h:179
TObjectPtr< UEnemyMotionWarpingComponent > MotionWarpingComponent
Definition EnemyCharacterBase.h:182

멤버 함수 문서화

◆ ActivateEnemyState()

void AEnemyCharacterBase::ActivateEnemyState ( )
protected
402{
403 if (UCapsuleComponent* CapsuleComp = GetCapsuleComponent())
404 {
405 CapsuleComp->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
406 CapsuleComp->SetCollisionProfileName(CPROFILE_CKENEMYCAPSULE);
407 }
408
409 if (USkeletalMeshComponent* MeshComp = GetMesh())
410 {
411 MeshComp->SetSimulatePhysics(false);
412 MeshComp->SetCollisionProfileName(TEXT("NoCollision"));
413 MeshComp->AttachToComponent(GetCapsuleComponent(), FAttachmentTransformRules::SnapToTargetNotIncludingScale);
414 MeshComp->SetRelativeTransform(InitialMeshRelativeTransform);
415
416 MeshComp->bPauseAnims = false;
417 MeshComp->SetComponentTickEnabled(true);
418 }
419
420 if (UCharacterMovementComponent* MoveComp = GetCharacterMovement())
421 {
422 MoveComp->SetComponentTickEnabled(true);
423 MoveComp->SetMovementMode(MOVE_Walking);
424 }
425
427
428 if (ASC)
429 {
430 ASC->RemoveAllGameplayCues();
431 ASC->SetLooseGameplayTagCount(TAG_CHARACTER_STATE_ISDEAD, 0);
432
434 }
435
437
438 StartAILogic();
439}
void StartAILogic()
Definition EnemyCharacterBase.cpp:354
virtual void ResetEnemyBehaviorComponents()
Definition EnemyCharacterBase.cpp:478
virtual void OnBeforeStateTreeStart()
Definition EnemyCharacterBase.h:116
virtual void InitializeAttributes() override
Definition EnemyCharacterBase.cpp:184
FTransform InitialMeshRelativeTransform
Definition EnemyCharacterBase.h:193
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ BeginPlay()

void AEnemyCharacterBase::BeginPlay ( )
overrideprotectedvirtual
72{
73 Super::BeginPlay();
74
75 if (!ASC)
76 {
77 return;
78 }
79
80 if (USkeletalMeshComponent* MeshComp = GetMesh())
81 {
82 InitialMeshRelativeTransform = MeshComp->GetRelativeTransform();
83 }
84
85 ASC->InitAbilityActorInfo(this, this);
86
91
93
94 OnAbilitySystemReady.Broadcast(ASC);
95
97}
FOnAbilitySystemReady OnAbilitySystemReady
Definition CharacterBase.h:77
virtual void BindCharacterDelegates()
Definition EnemyCharacterBase.cpp:268
virtual void GiveDefaultAbilities()
Definition EnemyCharacterBase.cpp:239
virtual void RebindHpBarWidget()
Definition EnemyCharacterBase.cpp:256
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ BindCharacterDelegates()

void AEnemyCharacterBase::BindCharacterDelegates ( )
protectedvirtual

AEnemyCharacter에서 재구현되었습니다.

269{
270 if (AttributeSet)
271 {
272 AttributeSet->OnDeathDelegate.AddDynamic(this, &ThisClass::OnDeath);
273 AttributeSet->OnDamageDelegate.AddUObject(this, &ThisClass::OnDamageTaken);
274 }
275 else
276 {
277 LOG_ERROR(LogCKAttribute, "Enemy AttributeSet 없음");
278 }
279
280 if (ASC)
281 {
282 MoveSpeedDelegateHandle = ASC->GetGameplayAttributeValueChangeDelegate(UBaseAttributeSet::GetMoveSpeedAttribute()).AddUObject(this, &ThisClass::OnMoveSpeedChanged);
283 }
284
285 if (UEnemyGroggyComponent* GroggyComponent = CachedGroggyComponent.Get())
286 {
287 if (GroggyStateDelegateHandle.IsValid() == false)
288 {
289 GroggyStateDelegateHandle = GroggyComponent->OnGroggyStateChanged.AddUObject(this, &ThisClass::OnGroggyStateChanged);
290 }
291 }
292}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
FDelegateHandle MoveSpeedDelegateHandle
Definition EnemyCharacterBase.h:205
TObjectPtr< UEnemyAttributeSet > AttributeSet
Definition EnemyCharacterBase.h:164
TWeakObjectPtr< UEnemyGroggyComponent > CachedGroggyComponent
Definition EnemyCharacterBase.h:200
FDelegateHandle GroggyStateDelegateHandle
Definition EnemyCharacterBase.h:206
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ CreateConstellation()

UConstellationBase * AEnemyCharacterBase::CreateConstellation ( )
overridevirtual

IConstellationInterface를 구현.

170{
171 //TODO: 성좌도 풀링 대상으로 전환. 현재는 서브시스템이 소유권을 갖는다.
172 UStreamingSubsystem* ConstellationSubsystem = GetWorld()->GetSubsystem<UStreamingSubsystem>();
173 if (ConstellationSubsystem == nullptr)
174 {
175 return nullptr;
176 }
177
178 return ConstellationFactory::CreateConstellation(ConstellationSubsystem, this);
179}
static UConstellationBase * CreateConstellation(UObject *Outer, const AEnemyCharacterBase *const Enemy)
Definition ConstellationFactory.cpp:12
Definition StreamingSubsystem.h:73
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DeactivateEnemyState()

void AEnemyCharacterBase::DeactivateEnemyState ( )
protected
442{
444
446
447 if (ASC)
448 {
449 ASC->CancelAllAbilities();
450
451 FGameplayEffectQuery RemoveAllQuery;
452 ASC->RemoveActiveEffects(RemoveAllQuery);
453
454 ASC->SetLooseGameplayTagCount(TAG_CHARACTER_STATE_COMBAT_ATTACKING, 0);
455 ASC->SetLooseGameplayTagCount(TAG_CHARACTER_STATE_ISSUPERARMOR, 0);
456 }
457
458 if (USkeletalMeshComponent* MeshComp = GetMesh())
459 {
460 if (UAnimInstance* Anim = MeshComp->GetAnimInstance())
461 {
462 Anim->StopAllMontages(0.0f);
463 }
464 MeshComp->bPauseAnims = true;
465 MeshComp->SetComponentTickEnabled(false);
466 }
467
468 if (UCharacterMovementComponent* MoveComp = GetCharacterMovement())
469 {
470 MoveComp->StopMovementImmediately(); // 속도/가속도 0
471 MoveComp->DisableMovement();
472 MoveComp->SetComponentTickEnabled(false);
473 }
474
475 StopAILogic(TEXT("ReturnedToPool"));
476}
void StopMeshPulse()
Definition EnemyCharacterBase.cpp:527
void StopAILogic(const FString &Reason)
Definition EnemyCharacterBase.cpp:362
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ EndPlay()

void AEnemyCharacterBase::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprotectedvirtual

AEnemyCharacter에서 재구현되었습니다.

111{
113
115
116 Super::EndPlay(EndPlayReason);
117}
virtual void UnbindCharacterDelegates()
Definition EnemyCharacterBase.cpp:294
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ForceReturnToPool()

void AEnemyCharacterBase::ForceReturnToPool ( bool  bIsSpawnedEnemy = false)
virtual

AEnemyCharacter에서 재구현되었습니다.

121{
123
124 if (bIsSpawnedEnemy && OnSpawnEnemyDead.IsBound())
125 {
126 OnSpawnEnemyDead.Broadcast(this);
127 OnSpawnEnemyDead.Clear();
128 }
129
130 StopAILogic("ForceReturnToPool");
131
132 if (UPoolWorldSubsystem* PoolSubsystem = GetWorld()->GetSubsystem<UPoolWorldSubsystem>())
133 {
134 PoolSubsystem->ReturnActorToPool(this);
135 }
136}
FOnSpawnEnemyDead OnSpawnEnemyDead
Definition EnemyCharacterBase.h:159
Definition PoolWorldSubsystem.h:28
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetCharacterControlData()

FORCEINLINE UCharacterControlData * AEnemyCharacterBase::GetCharacterControlData ( ) const
inline
103 {
104 return CharacterControlData.Get();
105 }
TObjectPtr< UCharacterControlData > CharacterControlData
Definition EnemyCharacterBase.h:167

◆ GetConstellationID()

FORCEINLINE FName AEnemyCharacterBase::GetConstellationID ( ) const
inline
83 {
84 return ConstellationID;
85 }
FName ConstellationID
Definition EnemyCharacterBase.h:195
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetEnemyAttributeSet()

FORCEINLINE UEnemyAttributeSet * AEnemyCharacterBase::GetEnemyAttributeSet ( ) const
inline
77 {
78 return AttributeSet;
79 }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetLockOnMarkerComponent()

FORCEINLINE UTargetingMarkerComponent * AEnemyCharacterBase::GetLockOnMarkerComponent ( ) const
inline
93 {
94 return LockOnMarker;
95 }

◆ GetMotionWarpingComponent()

FORCEINLINE UEnemyMotionWarpingComponent * AEnemyCharacterBase::GetMotionWarpingComponent ( ) const
inline
98 {
100 }

◆ GetTargetingMarkerComponent()

FORCEINLINE UTargetingMarkerComponent * AEnemyCharacterBase::GetTargetingMarkerComponent ( ) const
inline
88 {
89 return TargetingMarker;
90 }

◆ GiveDefaultAbilities()

void AEnemyCharacterBase::GiveDefaultAbilities ( )
protectedvirtual
240{
241 if (CharacterControlData == nullptr || ASC == nullptr)
242 {
243 return;
244 }
245
246 for (const auto& StartAbility : CharacterControlData->StartAbilities)
247 {
248 if (StartAbility)
249 {
250 FGameplayAbilitySpec StartSpec(StartAbility, 1, INDEX_NONE, this);
251 ASC->GiveAbility(StartSpec);
252 }
253 }
254}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GrantExpToPlayer()

void AEnemyCharacterBase::GrantExpToPlayer ( ) const
private
682{
683 if (EnemyExp <= 0.0f)
684 {
685 return;
686 }
687
688 const APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this, 0);
689
690 if (PlayerController == nullptr)
691 {
692 return;
693 }
694
695 if (AMainPlayerState* MainPlayerState = PlayerController->GetPlayerState<AMainPlayerState>())
696 {
697 MainPlayerState->AddExp(EnemyExp);
698 }
699}
float EnemyExp
Definition EnemyCharacterBase.h:197
Definition MainPlayerState.h:23
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HideLockOnMarker()

void AEnemyCharacterBase::HideLockOnMarker ( )
overridevirtual

ITargetableInterface를 구현.

147{
148 LockOnMarker->HideMarker();
149}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ HideTargetingMarker()

void AEnemyCharacterBase::HideTargetingMarker ( )
overridevirtual

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

157{
158 TargetingMarker->HideMarker();
159}

◆ InitializeAttributes()

void AEnemyCharacterBase::InitializeAttributes ( )
overrideprotectedvirtual

AEnemyCharacter에서 재구현되었습니다.

185{
186 if (!ASC || !CharacterControlData || !CharacterControlData->StatTable || !AttributeSet)
187 {
188 return;
189 }
190
191 FEnemyStatTableRow* StatRow = CharacterControlData->StatTable->FindRow<FEnemyStatTableRow>(CharacterControlData->StatRowName, TEXT("MonsterStatContext"));
192
193 if (!StatRow)
194 {
195 LOG_WARNING(LogCKAttribute, "Enemy stat row 없음");
196 return;
197 }
198
200 {
201 TArray<UEnemyBehaviorComponent*> BehaviorComps;
202 GetComponents<UEnemyBehaviorComponent>(BehaviorComps);
203
204 for (UEnemyBehaviorComponent* Comp : BehaviorComps)
205 {
206 if (Comp)
207 {
208 Comp->InitializeBehavior(*EnemyExtendedData, CharacterControlData->StatRowName);
209 }
210 }
211 }
212
213 // 처치 시 어떤 성좌가 되는지, 경험치를 얼마나 주는지는 스탯 행이 들고 있다.
215 EnemyExp = StatRow->Enemy_Experience;
216
217 // Base 공통 스탯 초기화
218 AttributeSet->InitBaseStats
219 (
220 StatRow->Enemy_Hp,
221 StatRow->Enemy_Move_Speed,
222 StatRow->Enemy_Attack,
223 StatRow->Enemy_Attack_Speed,
224 StatRow->Knockback_Resistance
225 );
226
227
228 // Enemy 전용 스탯 초기화
229 // Enemy_Master 에 드랍 코인 컬럼이 없어져 0 으로 둔다. 필요해지면 컬럼부터 되살려야 한다.
230 AttributeSet->InitEnemyStats
231 (
232 StatRow->Enemy_Attack_Range,
233 0.0f
234 );
235
236 GetCharacterMovement()->MaxWalkSpeed = AttributeSet->GetMoveSpeed();
237}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:39
const FEnemyExtendedData * EnemyExtendedData
Definition EnemyCharacterBase.h:191
Definition EnemyBehaviorComponent.h:13
Definition StatTable.h:47
float Enemy_Attack_Range
Definition StatTable.h:77
float Enemy_Move_Speed
Definition StatTable.h:80
FName Constellation_ID
Definition StatTable.h:91
float Enemy_Experience
Definition StatTable.h:87
float Enemy_Attack_Speed
Definition StatTable.h:74
float Knockback_Resistance
Definition StatTable.h:83
float Enemy_Hp
Definition StatTable.h:68
float Enemy_Attack
Definition StatTable.h:71
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsTargetable()

bool AEnemyCharacterBase::IsTargetable ( ) const
overridevirtual

ITargetableInterface를 구현.

162{
163 return IsDead() == false;
164}
virtual bool IsDead() const
Definition CharacterBase.cpp:65
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnBeforeStateTreeStart()

virtual void AEnemyCharacterBase::OnBeforeStateTreeStart ( )
inlineprotectedvirtual

ABossCharacter에서 재구현되었습니다.

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

◆ OnDamageTaken()

void AEnemyCharacterBase::OnDamageTaken ( const FDamageResultData DamageResult)
overrideprotectedvirtual

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

546{
547 // 데미지 텍스트와 히트 이펙트는 경직 면역이어도 보여야 하므로 가드 없이 진행
548 Super::OnDamageTaken(DamageResult);
549
550 if (DamageResult.TargetActor != this || ASC == nullptr)
551 {
552 return;
553 }
554
555 PlayMeshPulse(DamageResult.DamageTypeTag);
556
557 // 데미지 텍스트 Cue
558 FGameplayCueParameters Parameters;
559 Parameters.RawMagnitude = DamageResult.DamageAmount;
560 Parameters.NormalizedMagnitude = DamageResult.bIsCritical ? 1.0f : 0.0f;
561 Parameters.Location = GetActorLocation();
562 Parameters.Instigator = DamageResult.SourceActor;
563 Parameters.EffectContext = DamageResult.EffectContextHandle;
564
565 LOG_INFO(LogCK, "%s", *DamageResult.HitLocation.ToString())
566
567 ASC->ExecuteGameplayCue(TAG_CUE_DAMAGE, Parameters); // 데미지 텍스트 태그
568 ASC->ExecuteGameplayCue(TAG_CUE_COMBAT_HITEFFECT_COLOR); // 모든 적 피격에 공통으로 적용되는 메시 색상 연출 Cue
569
570 // 공격별 히트 이펙트 Cue
571 if (DamageResult.HitEffectTag.IsValid() == false)
572 {
573 return;
574 }
575
576 FGameplayCueParameters HitEffectParams;
577 HitEffectParams.Location = DamageResult.HitLocation;
578 HitEffectParams.Normal = DamageResult.HitNormal;
579 HitEffectParams.Instigator = DamageResult.SourceActor;
580
581 ASC->ExecuteGameplayCue(DamageResult.HitEffectTag, HitEffectParams);
582}
#define LOG_INFO(Category, Format,...)
Definition CK_UE.h:38
void PlayMeshPulse(const FGameplayTag &DamageTypeTag)
Definition EnemyCharacterBase.cpp:495
float DamageAmount
Definition BaseAttributeSet.h:31
FGameplayTag DamageTypeTag
Definition BaseAttributeSet.h:40
TObjectPtr< AActor > TargetActor
Definition BaseAttributeSet.h:19
FGameplayTag HitEffectTag
Definition BaseAttributeSet.h:37
bool bIsCritical
Definition BaseAttributeSet.h:34
FVector HitLocation
Definition BaseAttributeSet.h:25
TObjectPtr< AActor > SourceActor
Definition BaseAttributeSet.h:22
FGameplayEffectContextHandle EffectContextHandle
Definition BaseAttributeSet.h:43
FVector HitNormal
Definition BaseAttributeSet.h:28
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnDeath()

void AEnemyCharacterBase::OnDeath ( )
protectedvirtual

ABossCharacter, AEnemyCharacter에서 재구현되었습니다.

585{
587
588 SetDead();
590 StopAILogic("Dead");
591
592 // 처치된 적은 성좌(시청자)가 되어 채팅창에 합류한다.
593 if (UStreamingSubsystem* ConstellationSubsystem = GetWorld()->GetSubsystem<UStreamingSubsystem>())
594 {
595 ConstellationSubsystem->RegisterConstellation(CreateConstellation());
596 }
597
599
600 if (OnSpawnEnemyDead.IsBound())
601 {
602 OnSpawnEnemyDead.Broadcast(this);
603 OnSpawnEnemyDead.Clear();
604 }
605
606 if (EnemyDespawnDefinition == nullptr)
607 {
609 return;
610 }
611
612 TWeakObjectPtr WeakThis = this;
613
614 auto Lambda = [WeakThis]()
615 {
616 if (WeakThis.IsValid() == false)
617 {
618 return;
619 }
620
621 WeakThis->RequestReturnToPool(0.0f);
622 };
623
624 EnemyDespawnDefinition->StartEnemyDespawnFlow(this, Lambda);
625}
virtual void SetDead()
Definition CharacterBase.cpp:53
TObjectPtr< UEnemyDespawnDefinition > EnemyDespawnDefinition
Definition EnemyCharacterBase.h:173
virtual void HideLockOnMarker() override
Definition EnemyCharacterBase.cpp:146
void RequestReturnToPool(float DeadEventDelayTime=2.0f)
Definition EnemyCharacterBase.cpp:656
void GrantExpToPlayer() const
Definition EnemyCharacterBase.cpp:681
virtual UConstellationBase * CreateConstellation() override
Definition EnemyCharacterBase.cpp:169
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnGroggyStateChanged()

void AEnemyCharacterBase::OnGroggyStateChanged ( EEnemyGroggyState  NewState)
private
323{
324 if (IsDead())
325 {
326 return;
327 }
328
329 if (CachedStateTreeComp == nullptr)
330 {
331 return;
332 }
333
334 FStateTreeEvent Event;
335 if (NewState == EEnemyGroggyState::Groggy)
336 {
337 Event.Tag = TAG_CHARACTER_STATE_ISGROGGY_START;
338 }
339 else if (NewState == EEnemyGroggyState::Recovering)
340 {
341 Event.Tag = TAG_CHARACTER_STATE_ISGROGGY_END;
342 }
343 else
344 {
345 return;
346 }
347
348 CachedStateTreeComp->SendStateTreeEvent(Event);
349}
TObjectPtr< UStateTreeAIComponent > CachedStateTreeComp
Definition EnemyCharacterBase.h:188
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnReturnToPool_Implementation()

void AEnemyCharacterBase::OnReturnToPool_Implementation ( )
overrideprotectedvirtual

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

ABossCharacter, AEnemyCharacter에서 재구현되었습니다.

397{
399}
void DeactivateEnemyState()
Definition EnemyCharacterBase.cpp:441
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnSpawnFromPool_Implementation()

void AEnemyCharacterBase::OnSpawnFromPool_Implementation ( )
overrideprotectedvirtual

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

ABossCharacter에서 재구현되었습니다.

374{
377
378 if (IsHidden())
379 {
380 return;
381 }
382
383 if (EnemySpawnDefinition == nullptr)
384 {
385 return;
386 }
387
388 if (EnemySpawnDefinition->IsRunning())
389 {
390 EnemySpawnDefinition->ResetFlow();
391 }
392
393 EnemySpawnDefinition->StartEnemySpawnFlow(this);
394}
void ActivateEnemyState()
Definition EnemyCharacterBase.cpp:401
TObjectPtr< UEnemySpawnDefinition > EnemySpawnDefinition
Definition EnemyCharacterBase.h:170
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PlayDeadAnimation()

void AEnemyCharacterBase::PlayDeadAnimation ( )
overrideprotectedvirtual

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

628{
629 Super::PlayDeadAnimation();
630
631 USkeletalMeshComponent* MeshComp = GetMesh();
632 if (MeshComp == nullptr)
633 {
634 return;
635 }
636
637 UAnimInstance* Anim = MeshComp->GetAnimInstance();
638 if (Anim == nullptr)
639 {
640 return;
641 }
642
643 if (EnemyExtendedData == nullptr || EnemyExtendedData->DeadMontage == nullptr)
644 {
645 LOG_WARNING(LogCKCharacter, "DeadMontage Slot 비어 있음.");
646 return;
647 }
648
649 Anim->StopAllMontages(0.1f);
650 Anim->Montage_Play(EnemyExtendedData->DeadMontage, 1.0f);
651}
TObjectPtr< UAnimMontage > DeadMontage
Definition CharacterControlData.h:159

◆ PlayMeshPulse()

void AEnemyCharacterBase::PlayMeshPulse ( const FGameplayTag &  DamageTypeTag)
private
496{
497 if (EnemyExtendedData == nullptr)
498 {
499 return;
500 }
501
502 USkeletalMeshComponent* MeshComponent = GetMesh();
503 if (IsValid(MeshComponent) == false)
504 {
505 return;
506 }
507
508 const FHitMeshPulseData* FoundPulseData = EnemyExtendedData->HitMeshPulseByDamageType.Find(DamageTypeTag);
509 if (FoundPulseData == nullptr || FHitMeshPulseTween::IsPlayable(*FoundPulseData) == false)
510 {
511 return;
512 }
513
514 // 연속 피격 시 이전 연출이 남아 값을 덮어쓰지 않도록 먼저 정리한다.
515 if (MeshPulseTween.IsValid())
516 {
517 MeshPulseTween->Kill();
518 }
519
520 TypeTween::ITween<FVector>& PulseTween = TypeTween::Tween<FVector>(this);
521 FHitMeshPulseTween::Execute(PulseTween, *FoundPulseData, MeshComponent, InitialMeshRelativeTransform.GetScale3D());
522
523 MeshPulseTween = PulseTween.ToHandle().GetPtr();
524}
TSharedPtr< TypeTween::ITweenControl > MeshPulseTween
Definition EnemyCharacterBase.h:203
TMap< FGameplayTag, FHitMeshPulseData > HitMeshPulseByDamageType
Definition CharacterControlData.h:171
Definition CharacterControlData.h:43
static void Execute(TypeTween::ITween< FVector > &Tween, const FHitMeshPulseData &PulseData, USkeletalMeshComponent *MeshComponent, const FVector &OriginalScale)
Definition HitMeshPulseTween.h:17
static FORCEINLINE bool IsPlayable(const FHitMeshPulseData &PulseData)
Definition HitMeshPulseTween.h:12
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ PossessedBy()

void AEnemyCharacterBase::PossessedBy ( AController *  NewController)
overrideprotectedvirtual
100{
101 Super::PossessedBy(NewController);
102
103 CachedAIController = Cast<AAIController>(NewController);
105 {
106 CachedStateTreeComp = CachedAIController->FindComponentByClass<UStateTreeAIComponent>();
107 }
108}
TObjectPtr< AAIController > CachedAIController
Definition EnemyCharacterBase.h:185

◆ PostInitializeComponents()

void AEnemyCharacterBase::PostInitializeComponents ( )
overrideprotectedvirtual

ABossCharacter에서 재구현되었습니다.

58{
59 Super::PostInitializeComponents();
60
61 CachedGroggyComponent = FindComponentByClass<UEnemyGroggyComponent>();
62
64 {
65 return;
66 }
67
69}
Definition CharacterControlData.h:142

◆ RebindHpBarWidget()

void AEnemyCharacterBase::RebindHpBarWidget ( )
protectedvirtual
257{
258 if (IAbilityBasedWidgetInterface* WidgetInterface = GetAbilityBasedWidgetInterface())
259 {
260 WidgetInterface->InitWidget();
261 }
262 else
263 {
264 LOG_ERROR(LogCK, "%s를 찾지 못했습니다. ", NAMEOF(IAbilityBasedWidgetInterface));
265 }
266}
#define NAMEOF(Type)
Definition CK_UE.h:30
Definition AbilityBasedWidgetInterface.h:20
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RequestReturnToPool()

void AEnemyCharacterBase::RequestReturnToPool ( float  DeadEventDelayTime = 2.0f)
privatevirtual
657{
658 // 사망 연출 후 풀 반환
659 TWeakObjectPtr WeakThis = this;
660
661 const auto Lambda = FTimerDelegate::CreateLambda([WeakThis]()
662 {
663 if (UPoolWorldSubsystem* PoolSubsystem = WeakThis.IsValid() ? WeakThis->GetWorld()->GetSubsystem<UPoolWorldSubsystem>() : nullptr)
664 {
665 PoolSubsystem->ReturnActorToPool(WeakThis.Get());
666 }
667 });
668
669 FTimerManager& TimerManager = GetWorld()->GetTimerManager();
670
671 if (DeadEventDelayTime < KINDA_SMALL_NUMBER)
672 {
673 Lambda.ExecuteIfBound();
674 }
675 else
676 {
677 TimerManager.SetTimer(DeadTimerHandle, Lambda, DeadEventDelayTime, false);
678 }
679}
FTimerHandle DeadTimerHandle
Definition EnemyCharacterBase.h:160
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ResetEnemyBehaviorComponents()

void AEnemyCharacterBase::ResetEnemyBehaviorComponents ( )
protectedvirtual
479{
480 TArray<UEnemyBehaviorComponent*> BehaviorComps;
481 GetComponents<UEnemyBehaviorComponent>(BehaviorComps);
482
483 for (UEnemyBehaviorComponent* Comp : BehaviorComps)
484 {
485 if (IsValid(Comp))
486 {
487 Comp->ResetState();
488 }
489 }
490}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShowLockOnMarker()

void AEnemyCharacterBase::ShowLockOnMarker ( )
overridevirtual

ITargetableInterface를 구현.

142{
143 LockOnMarker->ShowMarker();
144}

◆ ShowTargetingMarker()

void AEnemyCharacterBase::ShowTargetingMarker ( float  MarkerAlpha)
overridevirtual

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

152{
153 TargetingMarker->ShowMarker(MarkerAlpha);
154}

◆ StartAILogic()

void AEnemyCharacterBase::StartAILogic ( )
protected
355{
357 {
358 CachedStateTreeComp->StartLogic();
359 }
360}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopAILogic()

void AEnemyCharacterBase::StopAILogic ( const FString &  Reason)
protected
363{
365 {
366 CachedStateTreeComp->StopLogic(Reason);
367 }
368}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopMeshPulse()

void AEnemyCharacterBase::StopMeshPulse ( )
private
528{
529 if (MeshPulseTween.IsValid())
530 {
531 // TypeTween은 소유자 수명을 추적하지 않으므로 직접 중단해야 한다.
532 MeshPulseTween->Kill();
533 MeshPulseTween.Reset();
534 }
535
536 if (USkeletalMeshComponent* MeshComp = GetMesh())
537 {
538 MeshComp->SetRelativeScale3D(InitialMeshRelativeTransform.GetScale3D());
539 }
540}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UnbindCharacterDelegates()

void AEnemyCharacterBase::UnbindCharacterDelegates ( )
protectedvirtual

AEnemyCharacter에서 재구현되었습니다.

295{
296 if (GroggyStateDelegateHandle.IsValid())
297 {
298 if (UEnemyGroggyComponent* GroggyComponent = CachedGroggyComponent.Get())
299 {
300 GroggyComponent->OnGroggyStateChanged.Remove(GroggyStateDelegateHandle);
301 }
302
304 }
305
306 if (ASC)
307 {
308 if (MoveSpeedDelegateHandle.IsValid())
309 {
310 ASC->GetGameplayAttributeValueChangeDelegate(UBaseAttributeSet::GetMoveSpeedAttribute()).Remove(MoveSpeedDelegateHandle);
312 }
313 }
314
315 if (AttributeSet)
316 {
317 AttributeSet->OnDeathDelegate.RemoveDynamic(this, &ThisClass::OnDeath);
318 AttributeSet->OnDamageDelegate.RemoveAll(this);
319 }
320}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ AttributeSet

TObjectPtr<UEnemyAttributeSet> AEnemyCharacterBase::AttributeSet
protected

◆ CachedAIController

TObjectPtr<AAIController> AEnemyCharacterBase::CachedAIController
protected

◆ CachedGroggyComponent

TWeakObjectPtr<UEnemyGroggyComponent> AEnemyCharacterBase::CachedGroggyComponent
private

◆ CachedStateTreeComp

TObjectPtr<UStateTreeAIComponent> AEnemyCharacterBase::CachedStateTreeComp
protected

◆ CharacterControlData

TObjectPtr<UCharacterControlData> AEnemyCharacterBase::CharacterControlData
protected

◆ ConstellationID

FName AEnemyCharacterBase::ConstellationID
protected

◆ DeadTimerHandle

FTimerHandle AEnemyCharacterBase::DeadTimerHandle

◆ EnemyDespawnDefinition

TObjectPtr<UEnemyDespawnDefinition> AEnemyCharacterBase::EnemyDespawnDefinition
protected

◆ EnemyExp

float AEnemyCharacterBase::EnemyExp = 0.0f
protected

◆ EnemyExtendedData

const FEnemyExtendedData* AEnemyCharacterBase::EnemyExtendedData = nullptr
protected

◆ EnemySpawnDefinition

TObjectPtr<UEnemySpawnDefinition> AEnemyCharacterBase::EnemySpawnDefinition
protected

◆ GroggyStateDelegateHandle

FDelegateHandle AEnemyCharacterBase::GroggyStateDelegateHandle
private

◆ InitialMeshRelativeTransform

FTransform AEnemyCharacterBase::InitialMeshRelativeTransform
protected

◆ LockOnMarker

TObjectPtr<UTargetingMarkerComponent> AEnemyCharacterBase::LockOnMarker
protected

◆ MeshPulseTween

TSharedPtr<TypeTween::ITweenControl> AEnemyCharacterBase::MeshPulseTween
private

◆ MotionWarpingComponent

TObjectPtr<UEnemyMotionWarpingComponent> AEnemyCharacterBase::MotionWarpingComponent
protected

◆ MoveSpeedDelegateHandle

FDelegateHandle AEnemyCharacterBase::MoveSpeedDelegateHandle
private

◆ OnSpawnEnemyDead

FOnSpawnEnemyDead AEnemyCharacterBase::OnSpawnEnemyDead

◆ TargetingMarker

TObjectPtr<UTargetingMarkerComponent> AEnemyCharacterBase::TargetingMarker
protected

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