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

#include <GA_EnemyRangedAttack.h>

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

Public 멤버 함수

virtual void EndAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override
 
- UGA_EnemyAttack(으)로부터 상속된 Public 멤버 함수
 UGA_EnemyAttack ()
 
virtual void ActivateAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData *TriggerEventData) override final
 
virtual const FGameplayTagContainer * GetCooldownTags () const override
 
virtual void ApplyCooldown (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) const override
 
- UGA_CombatBase(으)로부터 상속된 Public 멤버 함수
virtual void OnGiveAbility (const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilitySpec &Spec) override
 
- UGA_Base(으)로부터 상속된 Public 멤버 함수
 UGA_Base ()
 

Protected 멤버 함수

virtual void ApplyCombatData () override
 
virtual bool PrepareAttack () override
 
virtual bool ShouldSetupHitCheck () const override
 
void OnProjectileShow (FGameplayEventData Payload)
 
void OnProjectileLaunch (FGameplayEventData Payload)
 
bool SetupProjectileEventTasks ()
 
TOptional< FVector > GetGroundTargetLocation (const ACharacter *TargetCharacter) const
 
void SetProjectileVisible (bool bVisible) const
 
- UGA_EnemyAttack(으)로부터 상속된 Protected 멤버 함수
bool BeginAttackRotationLock ()
 
void EndAttackRotationLock ()
 
void SendStateTreeTag (const FGameplayTag &EventTag) const
 
- UGA_CombatBase(으)로부터 상속된 Protected 멤버 함수
void SetupHitCheckListener ()
 
void OnHitCheckStart (FGameplayEventData Payload)
 
void OnHitCheckEnd (FGameplayEventData Payload)
 
void OnTraceResultCallback (const FGameplayAbilityTargetDataHandle &TargetDataHandle, float CombatDataLevel, int32 CombatHitDataIndex)
 
void OnFinisherResultCallback (const FGameplayAbilityTargetDataHandle &TargetDataHandle, float CombatDataLevel, int32 CombatHitDataIndex)
 
virtual TOptional< FTransform > GetTraceTransformForHitCheck () const
 
void ApplyEffectsToSelf (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo)
 
FCombatHitPayload BuildCombatHitPayload (const FCombatHitData &HitData, float DamageMultiplier, bool bRequestKnockback)
 
TArray< FGameplayEffectSpecHandle > BuildCombatEffectSpecs (const FCombatHitData &HitData, float DamageMultiplier)
 
FGameplayEffectSpecHandle BuildEffectSpec (const FCombatEffectData &EffectData, float CombatDataLevel)
 
void PlayCombatHitAudio (const FVector &HitLocation)
 
void CacheAudioTagComponents ()
 
const FKnockbackDataFindKnockbackData (const FCombatHitData &HitData) const
 
void NotifyCameraHitConfirmed () const
 
float GetAttackSpeedRate () const
 
void UpdateAttackWarpTargetForRange (FName WarpTargetName=FName("Target"))
 
void UpdateAttackWarpTargetForRange (FName WarpTargetName, ITargetableInterface *Target)
 
- UGA_Base(으)로부터 상속된 Protected 멤버 함수
UCharacterMotionWarpingComponentBase * GetMotionWarpingComponent () const
 
void SetupCancelableListener ()
 
void OnCancelableInputDetected (FGameplayEventData Payload)
 
virtual void HandleCancelable (FGameplayEventData Payload)
 
virtual void OnAbilityMontageCompleted ()
 
virtual void OnAbilityMontageInterrupted ()
 
virtual void OnAbilityMontageCancellable ()
 

Protected 속성

FEnemyRangedAttackData RangedAttackData
 
TWeakObjectPtr< UProjectileLauncherComponent > CachedProjectileLauncherComp
 
TWeakObjectPtr< USkeletalMeshComponent > CachedCharacterMeshComp
 
TWeakObjectPtr< UStaticMeshComponent > CachedProjectileMeshComp
 
- UGA_EnemyAttack(으)로부터 상속된 Protected 속성
TObjectPtr< UAnimMontage > AttackMontage
 
FGameplayTag CooldownTag
 
float CooldownDuration = 0.0f
 
FGameplayTagContainer TempCooldownTags
 
TObjectPtr< UCharacterMovementComponentBase > AttackRotationComponent
 
bool bAttackStarted = false
 
bool bAttackRotationLocked = false
 
- UGA_CombatBase(으)로부터 상속된 Protected 속성
TObjectPtr< UCombatDataBaseCombatData
 
float AttackRange = 450.0f
 
float AttackRangeCorrectionDistance = 250.0f
 
float AttackRangeCorrectionInnerOffset = 30.0f
 
TObjectPtr< UAT_TraceActiveTraceTask
 
TArray< TSubclassOf< UGameplayEffect > > SelfEffectClasses
 
FGameplayTag WeaponHitCueTag
 
TArray< TObjectPtr< UAudioEmitterComponent > > CachedAudioTagComponents
 

멤버 함수 문서화

◆ ApplyCombatData()

void UGA_EnemyRangedAttack::ApplyCombatData ( )
overrideprotectedvirtual

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

31{
32 Super::ApplyCombatData();
33
34 if (IsValid(CombatData) == false)
35 {
36 return;
37 }
38
39 if (const FEnemyRangedAttackData* RangedData = CombatData->FindExtendedData<FEnemyRangedAttackData>())
40 {
41 RangedAttackData = *RangedData;
42 }
43}
TObjectPtr< UCombatDataBase > CombatData
Definition GA_CombatBase.h:75
FEnemyRangedAttackData RangedAttackData
Definition GA_EnemyRangedAttack.h:40
Definition ExtendedDatas.h:145

◆ EndAbility()

void UGA_EnemyRangedAttack::EndAbility ( const FGameplayAbilitySpecHandle  Handle,
const FGameplayAbilityActorInfo *  ActorInfo,
const FGameplayAbilityActivationInfo  ActivationInfo,
bool  bReplicateEndAbility,
bool  bWasCancelled 
)
overridevirtual

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

20{
22
26
27 Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
28}
void SetProjectileVisible(bool bVisible) const
Definition GA_EnemyRangedAttack.cpp:197
TWeakObjectPtr< UStaticMeshComponent > CachedProjectileMeshComp
Definition GA_EnemyRangedAttack.h:49
TWeakObjectPtr< UProjectileLauncherComponent > CachedProjectileLauncherComp
Definition GA_EnemyRangedAttack.h:43
TWeakObjectPtr< USkeletalMeshComponent > CachedCharacterMeshComp
Definition GA_EnemyRangedAttack.h:46
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetGroundTargetLocation()

TOptional< FVector > UGA_EnemyRangedAttack::GetGroundTargetLocation ( const ACharacter *  TargetCharacter) const
protected
158{
159 if (IsValid(TargetCharacter) == false)
160 {
161 return TOptional<FVector>();
162 }
163
164 const UWorld* World = TargetCharacter->GetWorld();
165 if (IsValid(World) == false)
166 {
167 return TOptional<FVector>();
168 }
169
170 const FVector TraceStart = TargetCharacter->GetActorLocation();
171 constexpr float GroundTraceDistance = 10000.0f;
172 const FVector TraceEnd = TraceStart - FVector::UpVector * GroundTraceDistance;
173
174 FCollisionObjectQueryParams ObjectQueryParams;
175 ObjectQueryParams.AddObjectTypesToQuery(ECC_WorldStatic);
176 ObjectQueryParams.AddObjectTypesToQuery(ECC_WorldDynamic);
177
178 FCollisionQueryParams QueryParams(SCENE_QUERY_STAT(RangedProjectileGroundTrace), false, TargetCharacter);
179 QueryParams.AddIgnoredActor(GetAvatarActorFromActorInfo());
180
181 FHitResult HitResult;
182 if (World->LineTraceSingleByObjectType(HitResult, TraceStart, TraceEnd, ObjectQueryParams, QueryParams))
183 {
184 return HitResult.ImpactPoint;
185 }
186
187 // 예외 처리 (지면 탐지 실패 시 플레이어 캡슐 하단을 목표 위치로 사용 )
188 const UCapsuleComponent* TargetCapsule = TargetCharacter->GetCapsuleComponent();
189 if (IsValid(TargetCapsule) == false)
190 {
191 return TOptional<FVector>();
192 }
193
194 return TargetCapsule->GetComponentLocation() - FVector::UpVector * TargetCapsule->GetScaledCapsuleHalfHeight();
195}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnProjectileLaunch()

void UGA_EnemyRangedAttack::OnProjectileLaunch ( FGameplayEventData  Payload)
protected
111{
112 (void)Payload;
113
114 ACharacter* TargetCharacter = UGameplayStatics::GetPlayerCharacter(this, 0);
115 if (CachedProjectileLauncherComp.IsValid() == false || CachedCharacterMeshComp.IsValid() == false || IsValid(TargetCharacter) == false)
116 {
117 LOG_ERROR(LogCKAbility, "Projectile 발사에 필요한 Launcher, Mesh 또는 Target이 유효하지 않습니다.");
118 return;
119 }
120
121 // 투사체 한 발은 단타 판정만 사용한다.
122 const FCombatHitData* HitData = IsValid(CombatData) ? CombatData->FindCombatHitData(RangedAttackData.CombatHitDataIndex) : nullptr;
123 if (HitData == nullptr || HitData->GetHitType() != ECombatHitType::Single)
124 {
125 return;
126 }
127
128 FCombatHitPayload CombatHitPayload = BuildCombatHitPayload(*HitData, HitData->GetSingleHitData().GetDamageMultiplier(), true);
129 if (CombatHitPayload.IsValid() == false)
130 {
131 LOG_ERROR(LogCKAbility, "Projectile CombatHitPayload 생성 실패. CombatData = %s Index = %d", *GetNameSafe(CombatData), RangedAttackData.CombatHitDataIndex);
132 return;
133 }
134
135 const FVector SpawnLocation = CachedCharacterMeshComp->GetSocketLocation(RangedAttackData.ProjectileSpawnSocketName);
136 const FRotator SpawnMeshRotation = CachedProjectileMeshComp->GetComponentRotation();
137 const TOptional<FVector> TargetLocation = GetGroundTargetLocation(TargetCharacter);
138 if (TargetLocation.IsSet() == false)
139 {
140 LOG_ERROR(LogCKAbility, "Projectile 바닥 목표 위치 계산 실패");
141 return;
142 }
143
144 // GA는 투사체에게 Payload만 전달
145 ADamagedProjectile* DamagedProjectile = Cast<ADamagedProjectile>(CachedProjectileLauncherComp->LaunchTo(RangedAttackData.ProjectileClass, SpawnLocation, TargetLocation.GetValue()));
146 if (IsValid(DamagedProjectile) == false)
147 {
148 LOG_ERROR(LogCKAbility, "Projectile 발사 실패");
149 return;
150 }
151
152 DamagedProjectile->SetMeshWorldRotation(SpawnMeshRotation);
153 DamagedProjectile->InitializeCombatHitPayload(MoveTemp(CombatHitPayload));
155}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
Definition DamagedProjectile.h:12
void InitializeCombatHitPayload(FCombatHitPayload &&InCombatHitPayload)
Definition DamagedProjectile.cpp:10
void SetMeshWorldRotation(const FRotator &WorldRotation)
Definition ProjectileBase.cpp:94
FCombatHitPayload BuildCombatHitPayload(const FCombatHitData &HitData, float DamageMultiplier, bool bRequestKnockback)
Definition GA_CombatBase.cpp:283
TOptional< FVector > GetGroundTargetLocation(const ACharacter *TargetCharacter) const
Definition GA_EnemyRangedAttack.cpp:157
Definition CombatDataBase.h:64
FORCEINLINE const FSingleHitData & GetSingleHitData() const
Definition CombatDataBase.h:71
FORCEINLINE ECombatHitType GetHitType() const
Definition CombatDataBase.h:70
Definition CombatHitPayload.h:15
bool IsValid() const
Definition CombatHitPayload.h:27
int32 CombatHitDataIndex
Definition ExtendedDatas.h:150
TSubclassOf< ADamagedProjectile > ProjectileClass
Definition ExtendedDatas.h:153
FName ProjectileSpawnSocketName
Definition ExtendedDatas.h:159
FORCEINLINE float GetDamageMultiplier() const
Definition CombatDataBase.h:32
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnProjectileShow()

void UGA_EnemyRangedAttack::OnProjectileShow ( FGameplayEventData  Payload)
protected
105{
106 (void)Payload;
108}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PrepareAttack()

bool UGA_EnemyRangedAttack::PrepareAttack ( )
overrideprotectedvirtual

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

46{
48 {
49 LOG_ERROR(LogCKAbility, "원거리 공격 데이터가 유효하지 않습니다. CombatData = %s", *GetNameSafe(CombatData));
50 return false;
51 }
52
53 AActor* AvatarActor = GetAvatarActorFromActorInfo();
54 if (IsValid(AvatarActor) == false)
55 {
56 return false;
57 }
58
59 CachedProjectileLauncherComp = AvatarActor->FindComponentByClass<UProjectileLauncherComponent>();
60 CachedProjectileMeshComp = AvatarActor->FindComponentByTag<UStaticMeshComponent>(RangedAttackData.ProjectileComponentTag);
61 if (CachedProjectileLauncherComp.IsValid() == false || CachedProjectileMeshComp.IsValid() == false)
62 {
63 LOG_ERROR(LogCKAbility, "ProjectileLauncher 또는 손 폭탄 Mesh를 찾지 못했습니다.");
64 return false;
65 }
66
67 ACharacter* AvatarCharacter = Cast<ACharacter>(AvatarActor);
68 USkeletalMeshComponent* CharacterMesh = IsValid(AvatarCharacter) ? AvatarCharacter->GetMesh() : nullptr;
69 if (IsValid(CharacterMesh) == false || CharacterMesh->DoesSocketExist(RangedAttackData.ProjectileSpawnSocketName) == false)
70 {
71 LOG_ERROR(LogCKAbility, "Projectile 발사 Socket을 찾지 못했습니다. Character = %s Socket Name = %s", *GetNameSafe(AvatarActor), *RangedAttackData.ProjectileSpawnSocketName.ToString());
72 return false;
73 }
74
78}
bool SetupProjectileEventTasks()
Definition GA_EnemyRangedAttack.cpp:85
FName ProjectileComponentTag
Definition ExtendedDatas.h:156
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SetProjectileVisible()

void UGA_EnemyRangedAttack::SetProjectileVisible ( bool  bVisible) const
protected
198{
199 if (CachedProjectileMeshComp.IsValid() == false)
200 {
201 return;
202 }
203
204 CachedProjectileMeshComp->SetVisibility(bVisible, true);
205 CachedProjectileMeshComp->SetHiddenInGame(bVisible == false, true);
206}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupProjectileEventTasks()

bool UGA_EnemyRangedAttack::SetupProjectileEventTasks ( )
protected
86{
87 UAbilityTask_WaitGameplayEvent* ShowEventTask = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, TAG_EVENT_PROJECTILE_SHOW, nullptr, true, true);
88 UAbilityTask_WaitGameplayEvent* LaunchEventTask = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, TAG_EVENT_PROJECTILE_LAUNCH, nullptr, true, true);
89
90 if (IsValid(ShowEventTask) == false || IsValid(LaunchEventTask) == false)
91 {
92 LOG_ERROR(LogCKAbility, "GA_EnemyRangedAttack Task 생성 실패");
93 return false;
94 }
95
96 ShowEventTask->EventReceived.AddDynamic(this, &ThisClass::OnProjectileShow);
97 ShowEventTask->ReadyForActivation();
98
99 LaunchEventTask->EventReceived.AddDynamic(this, &ThisClass::OnProjectileLaunch);
100 LaunchEventTask->ReadyForActivation();
101 return true;
102}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShouldSetupHitCheck()

bool UGA_EnemyRangedAttack::ShouldSetupHitCheck ( ) const
overrideprotectedvirtual

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

81{
82 return false;
83}

멤버 데이터 문서화

◆ CachedCharacterMeshComp

TWeakObjectPtr<USkeletalMeshComponent> UGA_EnemyRangedAttack::CachedCharacterMeshComp
protected

◆ CachedProjectileLauncherComp

TWeakObjectPtr<UProjectileLauncherComponent> UGA_EnemyRangedAttack::CachedProjectileLauncherComp
protected

◆ CachedProjectileMeshComp

TWeakObjectPtr<UStaticMeshComponent> UGA_EnemyRangedAttack::CachedProjectileMeshComp
protected

◆ RangedAttackData

FEnemyRangedAttackData UGA_EnemyRangedAttack::RangedAttackData
protected

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