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

#include <GA_EnemyDashAttack.h>

UGA_EnemyDashAttack에 대한 상속 다이어그램 :
Inheritance graph
UGA_EnemyDashAttack에 대한 협력 다이어그램:
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 OnDashReady (FGameplayEventData Payload)
 
void OnDashAimingFinished ()
 
void OnDashAimingFailed ()
 
void OnWarningFinished ()
 
void OnDashTargetHit (const FHitResult &HitResult)
 
void OnDashFinished ()
 
void UpdateDashPathPreview ()
 
void StartDashMove (const FVector &DashDirection)
 
void ApplyDashHit (const FHitResult &HitResult)
 
TOptional< FPatternLineWarningDecalSettingsResolveDashWarningDecalSettings (const ACharacter &AvatarCharacter) 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 속성

FEnemyDashAttackData DashAttackData
 
TObjectPtr< UPatternWarningDecalComponent > WarningDecalComponent
 
TObjectPtr< UAbilityTask_WaitGameplayEvent > ReadyEventTask
 
TObjectPtr< UAT_RotateToTargetForDurationRotationTask
 
TObjectPtr< UAbilityTask_WaitDelay > WarningDelayTask
 
TObjectPtr< UAT_EnemyDashMoveDashMoveTask
 
TObjectPtr< UBoxComponent > DashHitBoxComponent
 
- 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_EnemyDashAttack::ApplyCombatData ( )
overrideprotectedvirtual

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

58{
59 Super::ApplyCombatData();
60
61 if (IsValid(CombatData) == false)
62 {
63 return;
64 }
65
66 if (const FEnemyDashAttackData* EnemyDashAttackData = CombatData->FindExtendedData<FEnemyDashAttackData>())
67 {
68 DashAttackData = *EnemyDashAttackData;
69 }
70}
TObjectPtr< UCombatDataBase > CombatData
Definition GA_CombatBase.h:75
FEnemyDashAttackData DashAttackData
Definition GA_EnemyDashAttack.h:54
Definition ExtendedDatas.h:111

◆ ApplyDashHit()

void UGA_EnemyDashAttack::ApplyDashHit ( const FHitResult &  HitResult)
protected
317{
318 if (IsValid(CombatData) == false)
319 {
320 return;
321 }
322
323 const int32 CombatHitDataIndex = DashAttackData.CombatHitDataIndex;
324 const FCombatHitData* HitData = CombatData->FindCombatHitData(CombatHitDataIndex);
325 if (HitData == nullptr)
326 {
327 LOG_ERROR(LogCKAbility, "CombatHitData가 없습니다. CombatData=%s Index=%d", *GetNameSafe(CombatData), CombatHitDataIndex);
328 return;
329 }
330
331 FGameplayAbilityTargetDataHandle TargetDataHandle;
332 FGameplayAbilityTargetData_SingleTargetHit* TargetData = new FGameplayAbilityTargetData_SingleTargetHit(HitResult);
333 TargetDataHandle.Add(TargetData);
334
335 OnTraceResultCallback(TargetDataHandle, HitData->GetCombatDataLevel(), CombatHitDataIndex);
336}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
void OnTraceResultCallback(const FGameplayAbilityTargetDataHandle &TargetDataHandle, float CombatDataLevel, int32 CombatHitDataIndex)
Definition GA_CombatBase.cpp:159
Definition CombatDataBase.h:64
FORCEINLINE float GetCombatDataLevel() const
Definition CombatDataBase.h:68
int32 CombatHitDataIndex
Definition ExtendedDatas.h:116
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ EndAbility()

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

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

24{
25 if (IsValid(RotationTask))
26 {
27 RotationTask->EndTask();
28 }
29
30 if (IsValid(DashMoveTask))
31 {
32 DashMoveTask->EndTask();
33 }
34
35 if (IsValid(WarningDecalComponent))
36 {
37 if (bWasCancelled)
38 {
39 WarningDecalComponent->CancelWarning();
40 }
41 else
42 {
43 WarningDecalComponent->StopWarning();
44 }
45 }
46
47 ReadyEventTask = nullptr;
48 RotationTask = nullptr;
49 WarningDelayTask = nullptr;
50 DashMoveTask = nullptr;
51 DashHitBoxComponent = nullptr;
52 WarningDecalComponent = nullptr;
53
54 Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
55}
TObjectPtr< UAbilityTask_WaitGameplayEvent > ReadyEventTask
Definition GA_EnemyDashAttack.h:60
TObjectPtr< UAT_RotateToTargetForDuration > RotationTask
Definition GA_EnemyDashAttack.h:63
TObjectPtr< UAbilityTask_WaitDelay > WarningDelayTask
Definition GA_EnemyDashAttack.h:66
TObjectPtr< UAT_EnemyDashMove > DashMoveTask
Definition GA_EnemyDashAttack.h:69
TObjectPtr< UBoxComponent > DashHitBoxComponent
Definition GA_EnemyDashAttack.h:72
TObjectPtr< UPatternWarningDecalComponent > WarningDecalComponent
Definition GA_EnemyDashAttack.h:57
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnDashAimingFailed()

void UGA_EnemyDashAttack::OnDashAimingFailed ( )
protected
190{
191 RotationTask = nullptr;
192 LOG_ERROR(LogCKAbility, "Dash 조준 중 대상 또는 회전 컴포넌트가 유효하지 않게 되었습니다.");
193 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
194}
virtual void EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override
Definition GA_EnemyDashAttack.cpp:22
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnDashAimingFinished()

void UGA_EnemyDashAttack::OnDashAimingFinished ( )
protected
157{
158 RotationTask = nullptr;
159
160 ACharacter* AvatarCharacter = Cast<ACharacter>(GetAvatarActorFromActorInfo());
161 if (IsValid(AvatarCharacter) == false || IsValid(WarningDecalComponent) == false)
162 {
163 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
164 return;
165 }
166
167 const TOptional<FPatternLineWarningDecalSettings> WarningSettings = ResolveDashWarningDecalSettings(*AvatarCharacter);
168 if (WarningSettings.IsSet() == false)
169 {
170 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
171 return;
172 }
173
174 WarningDecalComponent->StartLineWarningAttached(WarningSettings.GetValue()); // 데칼 생성 후
175 UpdateDashPathPreview(); // 경로에 장애물 확인 후 스케일 조절
176
177 WarningDelayTask = UAbilityTask_WaitDelay::WaitDelay(this, DashAttackData.WarningDuration);
178 if (IsValid(WarningDelayTask) == false)
179 {
180 LOG_ERROR(LogCKAbility, "Dash Warning Delay Task 생성에 실패했습니다.");
181 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
182 return;
183 }
184
185 WarningDelayTask->OnFinish.AddDynamic(this, &ThisClass::OnWarningFinished);
186 WarningDelayTask->ReadyForActivation();
187}
TOptional< FPatternLineWarningDecalSettings > ResolveDashWarningDecalSettings(const ACharacter &AvatarCharacter) const
Definition GA_EnemyDashAttack.cpp:338
void UpdateDashPathPreview()
Definition GA_EnemyDashAttack.cpp:232
float WarningDuration
Definition ExtendedDatas.h:137
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnDashFinished()

void UGA_EnemyDashAttack::OnDashFinished ( )
protected
228{
229 MontageJumpToSection(DashAttackData.EndSectionName);
230}
FName EndSectionName
Definition ExtendedDatas.h:122

◆ OnDashReady()

void UGA_EnemyDashAttack::OnDashReady ( FGameplayEventData  Payload)
protected
125{
126 (void)Payload;
127
128 AActor* TargetActor = UGameplayStatics::GetPlayerPawn(this, 0);
129 if (IsValid(TargetActor) == false)
130 {
131 LOG_ERROR(LogCKAbility, "Dash 조준 대상이 유효하지 않습니다.");
132 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
133 return;
134 }
135
136 if (BeginAttackRotationLock() == false)
137 {
138 LOG_ERROR(LogCKAbility, "Dash 조준에 사용할 회전 컴포넌트가 유효하지 않습니다.");
139 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
140 return;
141 }
142
144 if (IsValid(RotationTask) == false)
145 {
146 LOG_ERROR(LogCKAbility, "Dash 조준 AbilityTask 생성에 실패했습니다.");
147 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
148 return;
149 }
150
151 RotationTask->OnFinished.AddUObject(this, &ThisClass::OnDashAimingFinished);
152 RotationTask->OnFailed.AddUObject(this, &ThisClass::OnDashAimingFailed);
153 RotationTask->ReadyForActivation();
154}
static UAT_RotateToTargetForDuration * RotateToTargetForDuration(UGameplayAbility *OwningAbility, AActor *TargetActor, const FTargetRotationSettings &Settings)
Definition AT_RotateToTargetForDuration.cpp:14
bool BeginAttackRotationLock()
Definition GA_EnemyAttack.cpp:144
FTargetRotationSettings RotationSettings
Definition ExtendedDatas.h:134
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnDashTargetHit()

void UGA_EnemyDashAttack::OnDashTargetHit ( const FHitResult &  HitResult)
protected
222{
223 ApplyDashHit(HitResult);
224 MontageJumpToSection(DashAttackData.EndSectionName);
225}
void ApplyDashHit(const FHitResult &HitResult)
Definition GA_EnemyDashAttack.cpp:316
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnWarningFinished()

void UGA_EnemyDashAttack::OnWarningFinished ( )
protected
197{
198 AActor* AvatarActor = GetAvatarActorFromActorInfo();
199 if (IsValid(AvatarActor) == false)
200 {
201 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
202 return;
203 }
204
205 FVector DashDirection = AvatarActor->GetActorForwardVector();
206 DashDirection.Z = 0.0f;
207 if (DashDirection.Normalize() == false)
208 {
209 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
210 return;
211 }
212
213 if (IsValid(WarningDecalComponent))
214 {
215 WarningDecalComponent->StopWarning();
216 }
217
218 StartDashMove(DashDirection);
219}
void StartDashMove(const FVector &DashDirection)
Definition GA_EnemyDashAttack.cpp:292
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PrepareAttack()

bool UGA_EnemyDashAttack::PrepareAttack ( )
overrideprotectedvirtual

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

73{
74 ACharacter* AvatarCharacter = Cast<ACharacter>(GetAvatarActorFromActorInfo());
75 if (IsValid(AvatarCharacter) == false)
76 {
77 return false;
78 }
79
80 static const FName DashAttackCollisionTag(TEXT("Collision.DashAttack"));
81 DashHitBoxComponent = AvatarCharacter->FindComponentByTag<UBoxComponent>(DashAttackCollisionTag);
82 if (IsValid(DashHitBoxComponent) == false)
83 {
84 LOG_ERROR(LogCKAbility, "Dash 공격에 사용할 Collision.DashAttack BoxComponent가 없습니다. Avatar = %s", *GetNameSafe(AvatarCharacter));
85 return false;
86 }
87
88 WarningDecalComponent = AvatarCharacter->FindComponentByClass<UPatternWarningDecalComponent>();
89 if (IsValid(WarningDecalComponent) == false)
90 {
91 LOG_ERROR(LogCKAbility, "Dash 경고 데칼 컴포넌트가 없습니다. Avatar = %s", *GetNameSafe(AvatarCharacter));
92 return false;
93 }
94
95 if (ResolveDashWarningDecalSettings(*AvatarCharacter).IsSet() == false)
96 {
97 LOG_ERROR(LogCKAbility, "Dash 경고 데칼에 사용할 충돌 범위가 유효하지 않습니다. Avatar = %s", *GetNameSafe(AvatarCharacter));
98 return false;
99 }
100
101 if (DashAttackData.ReadyEventTag.IsValid() == false)
102 {
103 LOG_ERROR(LogCKAbility, "Dash Ready EventTag가 유효하지 않습니다. CombatData = %s", *GetNameSafe(CombatData));
104 return false;
105 }
106
107 ReadyEventTask = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, DashAttackData.ReadyEventTag, nullptr, true, true);
108 if (IsValid(ReadyEventTask) == false)
109 {
110 LOG_ERROR(LogCKAbility, "Dash Ready Event Task 생성에 실패했습니다.");
111 return false;
112 }
113
114 ReadyEventTask->EventReceived.AddDynamic(this, &ThisClass::OnDashReady);
115 ReadyEventTask->ReadyForActivation();
116 return true;
117}
FGameplayTag ReadyEventTag
Definition ExtendedDatas.h:125
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ResolveDashWarningDecalSettings()

TOptional< FPatternLineWarningDecalSettings > UGA_EnemyDashAttack::ResolveDashWarningDecalSettings ( const ACharacter &  AvatarCharacter) const
protected
339{
340 if (IsValid(DashHitBoxComponent) == false || DashAttackData.MaxDashDistance < KINDA_SMALL_NUMBER)
341 {
342 return TOptional<FPatternLineWarningDecalSettings>();
343 }
344
345 const USceneComponent* AttachParent = AvatarCharacter.GetRootComponent();
346 if (IsValid(AttachParent) == false)
347 {
348 return TOptional<FPatternLineWarningDecalSettings>();
349 }
350
351 const FVector BoxExtent = DashHitBoxComponent->GetScaledBoxExtent();
352 if (BoxExtent.X < KINDA_SMALL_NUMBER || BoxExtent.Y < KINDA_SMALL_NUMBER)
353 {
354 return TOptional<FPatternLineWarningDecalSettings>();
355 }
356
357 const FTransform AttachTransform = AttachParent->GetComponentTransform();
358 const FVector LocalCenterLocation = AttachTransform.InverseTransformPositionNoScale(DashHitBoxComponent->GetComponentLocation());
359 const FVector LocalStartLocation = LocalCenterLocation - FVector::ForwardVector * BoxExtent.X;
360 const float WarningLength = DashAttackData.MaxDashDistance + BoxExtent.X * 2.0f;
361 const float WarningWidth = BoxExtent.Y * 2.0f;
362
364 WarningSettings.SetLineDecalSettings(LocalStartLocation, WarningLength, WarningWidth);
365 return WarningSettings;
366}
FPatternLineWarningDecalSettings WarningDecalSettings
Definition ExtendedDatas.h:140
float MaxDashDistance
Definition ExtendedDatas.h:131
Definition PatternWarningDecalData.h:43
void SetLineDecalSettings(const FVector &InLocalStartLocation, const float InLength, const float InWidth)
Definition PatternWarningDecalData.h:47
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ShouldSetupHitCheck()

bool UGA_EnemyDashAttack::ShouldSetupHitCheck ( ) const
overrideprotectedvirtual

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

120{
121 return false;
122}

◆ StartDashMove()

void UGA_EnemyDashAttack::StartDashMove ( const FVector &  DashDirection)
protected
293{
294 if (IsValid(CombatData) == false || IsValid(DashHitBoxComponent) == false)
295 {
296 LOG_ERROR(LogCKAbility, "Dash 이동에 필요한 CombatData 또는 HitBoxComponent가 유효하지 않습니다.");
297 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
298 return;
299 }
300
301 MontageJumpToSection(DashAttackData.DashSectionName);
302
303 const ECollisionChannel HitTraceChannel = CombatData->TraceChannel;
305 if (IsValid(DashMoveTask) == false)
306 {
307 EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, true);
308 return;
309 }
310
311 DashMoveTask->OnTargetHit.AddUObject(this, &ThisClass::OnDashTargetHit);
312 DashMoveTask->OnFinished.AddUObject(this, &ThisClass::OnDashFinished);
313 DashMoveTask->ReadyForActivation();
314}
static UAT_EnemyDashMove * EnemyDashMove(UGameplayAbility *OwningAbility, UBoxComponent *InDashHitBoxComponent, const FVector &InDashDirection, float InDashSpeed, float InMaxDistance, ECollisionChannel InHitTraceChannel)
Definition AT_EnemyDashMove.cpp:18
float DashSpeed
Definition ExtendedDatas.h:128
FName DashSectionName
Definition ExtendedDatas.h:119
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateDashPathPreview()

void UGA_EnemyDashAttack::UpdateDashPathPreview ( )
protected
233{
234 if (IsValid(WarningDecalComponent) == false || IsValid(DashHitBoxComponent) == false ||
235 DashAttackData.MaxDashDistance < KINDA_SMALL_NUMBER)
236 {
237 return;
238 }
239
240 ACharacter* AvatarCharacter = Cast<ACharacter>(GetAvatarActorFromActorInfo());
241 if (IsValid(AvatarCharacter) == false)
242 {
243 return;
244 }
245
246 const TOptional<FPatternLineWarningDecalSettings> WarningSettings = ResolveDashWarningDecalSettings(*AvatarCharacter);
247 if (WarningSettings.IsSet() == false)
248 {
249 return;
250 }
251
252 UCapsuleComponent* CapsuleComponent = AvatarCharacter->GetCapsuleComponent();
253 UWorld* World = GetWorld();
254 if (IsValid(CapsuleComponent) == false || IsValid(World) == false)
255 {
256 return;
257 }
258
259 FVector ForwardDirection = AvatarCharacter->GetActorForwardVector();
260 ForwardDirection.Z = 0.0f;
261 if (ForwardDirection.Normalize() == false)
262 {
263 return;
264 }
265
266 const FVector StartLocation = CapsuleComponent->GetComponentLocation();
267 const FVector EndLocation = StartLocation + (ForwardDirection * DashAttackData.MaxDashDistance);
268 const FCollisionShape SweepShape = FCollisionShape::MakeSphere(CapsuleComponent->GetScaledCapsuleRadius());
269
270 FCollisionObjectQueryParams ObjectQueryParams;
271 ObjectQueryParams.AddObjectTypesToQuery(ECC_WorldStatic);
272 ObjectQueryParams.AddObjectTypesToQuery(ECC_WorldDynamic);
273
274 FCollisionQueryParams QueryParams(SCENE_QUERY_STAT(EnemyDashPathPreview), false, AvatarCharacter);
275 FHitResult HitResult;
276 const bool bBlockingHit = World->SweepSingleByObjectType(HitResult, StartLocation, EndLocation, FQuat::Identity, ObjectQueryParams, SweepShape, QueryParams);
277
278 constexpr float WallSafetyDistance = 2.0f;
279 float PathLengthRatio = 1.0f;
280 if (bBlockingHit)
281 {
282 const FPatternLineWarningDecalSettings& PatternLineWarningDecalSettings = WarningSettings.GetValue();
283 const FTransform AttachTransform = AvatarCharacter->GetRootComponent()->GetComponentTransform();
284 const FVector WarningStartLocation = AttachTransform.TransformPositionNoScale(PatternLineWarningDecalSettings.GetLocalStartLocation()); // Root 기준 로컬 시작점을 현재 월드 좌표로 변환
285 const float VisibleLength = FVector::DotProduct(HitResult.ImpactPoint - WarningStartLocation, ForwardDirection) - WallSafetyDistance;
286 PathLengthRatio = FMath::Clamp(VisibleLength / PatternLineWarningDecalSettings.GetLength(), 0.0f, 1.0f);
287 }
288
289 WarningDecalComponent->SetLineLengthRatio(PathLengthRatio);
290}
FORCEINLINE float GetLength() const
Definition PatternWarningDecalData.h:55
FORCEINLINE const FVector & GetLocalStartLocation() const
Definition PatternWarningDecalData.h:54
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ DashAttackData

FEnemyDashAttackData UGA_EnemyDashAttack::DashAttackData
protected

◆ DashHitBoxComponent

TObjectPtr<UBoxComponent> UGA_EnemyDashAttack::DashHitBoxComponent
protected

◆ DashMoveTask

TObjectPtr<UAT_EnemyDashMove> UGA_EnemyDashAttack::DashMoveTask
protected

◆ ReadyEventTask

TObjectPtr<UAbilityTask_WaitGameplayEvent> UGA_EnemyDashAttack::ReadyEventTask
protected

◆ RotationTask

TObjectPtr<UAT_RotateToTargetForDuration> UGA_EnemyDashAttack::RotationTask
protected

◆ WarningDecalComponent

TObjectPtr<UPatternWarningDecalComponent> UGA_EnemyDashAttack::WarningDecalComponent
protected

◆ WarningDelayTask

TObjectPtr<UAbilityTask_WaitDelay> UGA_EnemyDashAttack::WarningDelayTask
protected

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