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

#include <GA_Skill_Strike.h>

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

Public 멤버 함수

virtual bool CanActivateAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayTagContainer *SourceTags=nullptr, const FGameplayTagContainer *TargetTags=nullptr, OUT FGameplayTagContainer *OptionalRelevantTags=nullptr) const override
 
virtual void ActivateAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData *TriggerEventData) override
 
- UGA_Skill_StrikeBase(으)로부터 상속된 Public 멤버 함수
virtual void EndAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override
 
- UGA_SkillBase(으)로부터 상속된 Public 멤버 함수
virtual void ApplyCooldown (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) const override
 
const FGameplayTagContainer * GetCooldownTags () const
 
- UGA_CombatBase(으)로부터 상속된 Public 멤버 함수
virtual void OnGiveAbility (const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilitySpec &Spec) override
 
- UGA_Base(으)로부터 상속된 Public 멤버 함수
 UGA_Base ()
 

Protected 멤버 함수

virtual const FSkillStrikeBaseDataFindStrikeData () const override
 
virtual bool ComputeStrikeMoveTarget (AMainPlayerCharacter *Player, FVector &OutMoveTarget) override
 
virtual bool UpdateStrikeWarpTarget () override
 
virtual bool OnStrikeArrived (AMainPlayerCharacter *Player) override
 
virtual void OnStrikeMontageStarted () override
 
virtual void SetupStrikeEventListeners () override
 
virtual void OnStrikeCleanup (ACharacter *Character, bool bWasCancelled) override
 
virtual TArray< FName > GetRequiredMontageSections () const override
 
void ReleaseTargetingIfCurrentTargetIsWarpTarget (const AMainPlayerCharacter *Player) const
 
void OnStrikeMoveTimeout ()
 
void OnProjectileSpawned (FGameplayEventData Payload)
 
- UGA_Skill_StrikeBase(으)로부터 상속된 Protected 멤버 함수
virtual void ApplyCombatData () override
 
bool StartStrikePhaseChain (AMainPlayerCharacter *Player, const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo)
 
virtual void OnPreparingCompleted ()
 
virtual void OnHoldingCompleted ()
 
virtual void OnStrikeMoveCompleted ()
 
virtual void OnStrikeMotionWarpDelayCompleted ()
 
virtual void OnStrikeMontageCompleted ()
 
float GetEffectiveHoldingDuration () const
 
bool PlayHoldingSection (float DesiredHoldingDuration) const
 
void SetCurrentWeaponHidden (bool bHidden) const
 
FORCEINLINE float GetStrikeMoveNormalizationFactor (const float Duration, const float Distance) const
 
FORCEINLINE void RestorePlayerAndWeaponForStrike ()
 
- UGA_SkillBase(으)로부터 상속된 Protected 멤버 함수
virtual bool CheckCost (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, FGameplayTagContainer *OptionalRelevantTags) const override
 
virtual void ApplyCost (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo) const override
 
float GetSkillMontageSectionLength (const UAnimMontage *Montage, FName SectionName, bool bApplyPlayRate=false, float PlayRate=1.0f) const
 
bool HasClearStrikePath (const AMainPlayerCharacter *Player, const AActor *TargetActor) const
 
void SetAvatarPawnCollisionResponse (ECollisionResponse Response) const
 
float GetPlayerCurrentWeaponAttackRange () const
 
void SetAvatarMeshHidden (bool bHidden) const
 
void ResetSkillMontagePlayRate () const
 
AActor * GetTargetActor () const
 
UAnimMontage * GetSkillMontage (FGameplayTag PlayMontageTag=FGameplayTag::EmptyTag) const
 
bool ContainsAllMontageSections (const UAnimMontage *Montage, TArray< FName > SectionNames) const
 
template<typename T >
const T * GetExtendedData () const
 
template<typename T >
bool HasExtendedData () 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 ()
 

Private 속성

TObjectPtr< AActor > CachedWarpTarget
 
bool bWarpedToTarget = false
 

추가로 상속된 멤버들

- UGA_Skill_StrikeBase(으)로부터 상속된 Protected 속성
virtual bool ComputeStrikeMoveTarget (AMainPlayerCharacter *Player, FVector &OutMoveTarget) PURE_VIRTUAL(UGA_Skill_StrikeBase
 
virtual bool UpdateStrikeWarpTarget () PURE_VIRTUAL(UGA_Skill_StrikeBase
 
FName PreparingSectionName
 
FName HoldingSectionName
 
FName StrikeSectionName
 
bool bIgnorePawnCollisionDuringWarp = true
 
TObjectPtr< UCurveFloat > StrikeMoveProgressCurve
 
float StrikeMoveDuration = 0.25f
 
float HoldingDuration = 0.1f
 
float StrikeMotionWarpDelay = 0.0f
 
TObjectPtr< UAnimMontage > SkillActionMontage
 
TObjectPtr< UAbilityTask_PlayMontageAndWait > ActivePreparingTask
 
TObjectPtr< UAbilityTask_WaitDelay > ActiveHoldingTask
 
TObjectPtr< UAT_MoveToLocationCurveActiveMoveTask
 
TObjectPtr< UAbilityTask_WaitDelay > ActiveStrikeMotionWarpDelayTask
 
FRotator CachedStrikeFacingRotation = FRotator::ZeroRotator
 
bool bStrikeStarted = false
 
bool bCurrentWeaponHiddenBySkill = false
 
float TotalMoveCurveIntegral = 0.0f
 
- UGA_SkillBase(으)로부터 상속된 Protected 속성
FGameplayTag CooldownTag
 
float CostValue
 
float CooldownDuration
 
- 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
 

상세한 설명

Warp Strike 스킬

  • 락온 대상에게 Preparing 애니 → 커브 이동 → Strike 애니 순서로 진행
  • 페이즈 체인은 UGA_Skill_StrikeBase가 담당하고, 이 클래스는 타겟 워프 고유 로직만 구현

멤버 함수 문서화

◆ ActivateAbility()

void UGA_Skill_Strike::ActivateAbility ( const FGameplayAbilitySpecHandle  Handle,
const FGameplayAbilityActorInfo *  ActorInfo,
const FGameplayAbilityActivationInfo  ActivationInfo,
const FGameplayEventData *  TriggerEventData 
)
overridevirtual

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

63{
64 // Super(UGA_SkillBase) 미호출 의도: 워프 스트라이크는 표적이 필수이며, Preparing 이후 이동 태스크를 직접 실행해야 하므로 표준 SkillBase 흐름과 호환되지 않음.
65
66 AMainPlayerCharacter* Player = Cast<AMainPlayerCharacter>(ActorInfo ? ActorInfo->AvatarActor.Get() : nullptr);
67
68 if (Player == nullptr)
69 {
70 EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
71 return;
72 }
73
74 SkillActionMontage = GetSkillMontage(Player->GetWeaponLoadoutComponent()->GetCurrentWeaponTag());
75
76 AActor* TargetActor = GetTargetActor();
77
78 if (TargetActor == nullptr)
79 {
80 // CanActivateAbility 통과 후 직전에 락온이 풀린 경우 방어 코드
81 EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
82 return;
83 }
84
85 bWarpedToTarget = false;
86 CachedWarpTarget = TargetActor;
87
88 FVector ToEnemy = (TargetActor->GetActorLocation() - Player->GetActorLocation());
89 ToEnemy.Z = 0.0f;
90 Player->SetActorRotation(ToEnemy.GetSafeNormal().Rotation());
91
92 StartStrikePhaseChain(Player, Handle, ActorInfo, ActivationInfo);
93}
Definition MainPlayerCharacter.h:39
UAnimMontage * GetSkillMontage(FGameplayTag PlayMontageTag=FGameplayTag::EmptyTag) const
Definition GA_SkillBase.cpp:284
AActor * GetTargetActor() const
Definition GA_SkillBase.cpp:255
virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override
Definition GA_Skill_StrikeBase.cpp:139
bool StartStrikePhaseChain(AMainPlayerCharacter *Player, const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo)
Definition GA_Skill_StrikeBase.cpp:52
TObjectPtr< UAnimMontage > SkillActionMontage
Definition GA_Skill_StrikeBase.h:135
bool bWarpedToTarget
Definition GA_Skill_Strike.h:50
TObjectPtr< AActor > CachedWarpTarget
Definition GA_Skill_Strike.h:47
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ CanActivateAbility()

bool UGA_Skill_Strike::CanActivateAbility ( const FGameplayAbilitySpecHandle  Handle,
const FGameplayAbilityActorInfo *  ActorInfo,
const FGameplayTagContainer *  SourceTags = nullptr,
const FGameplayTagContainer *  TargetTags = nullptr,
OUT FGameplayTagContainer *  OptionalRelevantTags = nullptr 
) const
overridevirtual
20{
21 if (Super::CanActivateAbility(Handle, ActorInfo, SourceTags, TargetTags, OptionalRelevantTags) == false)
22 {
23 return false;
24 }
25
26 if (ActorInfo == nullptr)
27 {
28 return false;
29 }
30
31 UAbilitySystemComponent* ASC = GetAbilitySystemComponentFromActorInfo();
32
33 if (ASC == nullptr)
34 {
35 return false;
36 }
37
38 AMainPlayerCharacter* Player = Cast<AMainPlayerCharacter>(ActorInfo->AvatarActor.Get());
39
40 if (!Player)
41 {
42 LOG_ERROR(LogCK, "플레이어가 존재하지 않습니다. ");
43 return false;
44 }
45
47 {
48 return false;
49 }
50
51 if (const UCameraTargetingComponent* TargetingComponent = Player->GetPlayerTargetingComponent())
52 {
53 return TargetingComponent && TargetingComponent->HasTarget();
54 }
55 else
56 {
57 return false;
58 }
59}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
bool HasClearStrikePath(const AMainPlayerCharacter *Player, const AActor *TargetActor) const
Definition GA_SkillBase.cpp:358
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ComputeStrikeMoveTarget()

bool UGA_Skill_Strike::ComputeStrikeMoveTarget ( AMainPlayerCharacter Player,
FVector &  OutMoveTarget 
)
overrideprotectedvirtual
110{
111 if (CachedWarpTarget == nullptr)
112 {
113 return false;
114 }
115
117 {
118 return false;
119 }
120
121 const FVector PlayerLocation = Player->GetActorLocation();
122
123 FVector ToTargetFlat = CachedWarpTarget->GetActorLocation() - PlayerLocation;
124 ToTargetFlat.Z = 0.0f;
125
126 const float DistanceToTarget = ToTargetFlat.Size();
127 const float MoveDistance = FMath::Max(DistanceToTarget - GetPlayerCurrentWeaponAttackRange(), 0.0f);
128 const FVector ToTargetFlatDir = ToTargetFlat.IsNearlyZero() ? Player->GetActorForwardVector() : ToTargetFlat.GetSafeNormal();
129
130 OutMoveTarget = PlayerLocation + ToTargetFlatDir * MoveDistance;
131 return true;
132}
float GetPlayerCurrentWeaponAttackRange() const
Definition GA_SkillBase.cpp:417
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ FindStrikeData()

const FSkillStrikeBaseData * UGA_Skill_Strike::FindStrikeData ( ) const
overrideprotectedvirtual

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

97{
98 return CombatData ? CombatData->FindExtendedData<FSkillStrikeData>() : nullptr;
99}
TObjectPtr< UCombatDataBase > CombatData
Definition GA_CombatBase.h:75
Definition ExtendedDatas.h:263

◆ GetRequiredMontageSections()

TArray< FName > UGA_Skill_Strike::GetRequiredMontageSections ( ) const
overrideprotectedvirtual

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

103{
104 // Strike 섹션은 TargetableWeapon 타겟일 때 생략되므로 이동 완료 시점에 검사한다.
106}
FName PreparingSectionName
Definition GA_Skill_StrikeBase.h:105
FName HoldingSectionName
Definition GA_Skill_StrikeBase.h:109

◆ OnProjectileSpawned()

void UGA_Skill_Strike::OnProjectileSpawned ( FGameplayEventData  Payload)
protected
198{
201}
void SetCurrentWeaponHidden(bool bHidden) const
Definition GA_Skill_StrikeBase.cpp:489
bool bCurrentWeaponHiddenBySkill
Definition GA_Skill_StrikeBase.h:153
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnStrikeArrived()

bool UGA_Skill_Strike::OnStrikeArrived ( AMainPlayerCharacter Player)
overrideprotectedvirtual

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

136{
138
139 // 워프 타겟이 회수 가능한 무기라면 Strike 몽타주 없이 즉시 상호작용 후 종료
140 if (Cast<ATargetableWeapon>(CachedWarpTarget))
141 {
142 bWarpedToTarget = true;
143 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, false);
144 return false;
145 }
146
147 return true;
148}
void ReleaseTargetingIfCurrentTargetIsWarpTarget(const AMainPlayerCharacter *Player) const
Definition GA_Skill_Strike.cpp:204
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnStrikeCleanup()

void UGA_Skill_Strike::OnStrikeCleanup ( ACharacter *  Character,
bool  bWasCancelled 
)
overrideprotectedvirtual

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

173{
174 ATargetableWeapon* TargetableWeapon = Cast<ATargetableWeapon>(CachedWarpTarget);
175
176 if (bWarpedToTarget && TargetableWeapon)
177 {
178 TargetableWeapon->Interact(Character);
179 }
180
181 CachedWarpTarget = nullptr;
182}
virtual UInteractionChannel * Interact(AActor *Caller) override
Definition InteractableActor.cpp:43
Definition TargetableWeapon.h:20
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnStrikeMontageStarted()

void UGA_Skill_Strike::OnStrikeMontageStarted ( )
overrideprotectedvirtual

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

152{
153 //Cancellable 때문에 MontageCompleted 호출되지 않아, 이렇게 Flag를 통해 적당한 타이밍을 노릴 수 밖에 없음.
154 bWarpedToTarget = true;
155}

◆ OnStrikeMoveTimeout()

void UGA_Skill_Strike::OnStrikeMoveTimeout ( )
protected
186{
187 if (ActiveMoveTask)
188 {
189 ActiveMoveTask->EndTask();
190 ActiveMoveTask = nullptr;
191 }
192
194}
virtual void OnStrikeMoveCompleted()
Definition GA_Skill_StrikeBase.cpp:322
TObjectPtr< UAT_MoveToLocationCurve > ActiveMoveTask
Definition GA_Skill_StrikeBase.h:145
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ReleaseTargetingIfCurrentTargetIsWarpTarget()

void UGA_Skill_Strike::ReleaseTargetingIfCurrentTargetIsWarpTarget ( const AMainPlayerCharacter Player) const
protected
205{
206 if (Player == nullptr || CachedWarpTarget == nullptr)
207 {
208 return;
209 }
210
211 UCameraTargetingComponent* TargetingComponent = Player->GetPlayerTargetingComponent();
212
213 if (TargetingComponent == nullptr)
214 {
215 return;
216 }
217
218 ITargetableInterface* CurrentTarget = TargetingComponent->GetTargetable();
219 AActor* CurrentTargetActor = ITargetableInterface::AsActor(CurrentTarget);
220
221 if (CurrentTargetActor != CachedWarpTarget)
222 {
223 return;
224 }
225
226 TargetingComponent->ReleaseTargeting();
227}
Definition TargetableInterface.h:20
static AActor * AsActor(ITargetableInterface *Interface)
Definition TargetableInterface.cpp:24
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupStrikeEventListeners()

void UGA_Skill_Strike::SetupStrikeEventListeners ( )
overrideprotectedvirtual

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

231{
232 UAbilityTask_WaitGameplayEvent* WaitProjectileSpawn = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent
233 (
234 this,
235 TAG_EVENT_PROJECTILE_SPAWN,
236 nullptr,
237 false,
238 false
239 );
240
241 if (WaitProjectileSpawn)
242 {
243 WaitProjectileSpawn->EventReceived.AddDynamic(this, &ThisClass::OnProjectileSpawned);
244 WaitProjectileSpawn->ReadyForActivation();
245 }
246}

◆ UpdateStrikeWarpTarget()

bool UGA_Skill_Strike::UpdateStrikeWarpTarget ( )
overrideprotectedvirtual
159{
160 AMainPlayerCharacter* Player = Cast<AMainPlayerCharacter>(GetAvatarActorFromActorInfo());
161
162 if (Player == nullptr || CachedWarpTarget == nullptr)
163 {
164 return false;
165 }
166
167 UpdateAttackWarpTargetForRange("Target", Cast<ITargetableInterface>(CachedWarpTarget));
168 return true;
169}
void UpdateAttackWarpTargetForRange(FName WarpTargetName=FName("Target"))
Definition GA_CombatBase.cpp:456
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ bWarpedToTarget

bool UGA_Skill_Strike::bWarpedToTarget = false
private

◆ CachedWarpTarget

TObjectPtr<AActor> UGA_Skill_Strike::CachedWarpTarget
private

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