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

#include <GA_CombatBase.h>

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

Public 멤버 함수

 UGA_CombatBase ()
 
virtual void OnGiveAbility (const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilitySpec &Spec) override
 
virtual void EndAbility (const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo *ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled) override
 
FORCEINLINE bool GetHitStopEnable () const
 
- UGA_Base(으)로부터 상속된 Public 멤버 함수
 UGA_Base ()
 

Public 속성

TObjectPtr< UCombatDataBaseCombatData
 

Protected 멤버 함수

virtual void ApplyCombatData ()
 
void SetupHitCheckListeners ()
 
void SetupSingleHitCheckListener ()
 
void OnHitCheckStart (FGameplayEventData Payload)
 
void OnHitCheckEnd (FGameplayEventData Payload)
 
void OnSingleHitCheck (FGameplayEventData Payload)
 
void OnTraceResultCallback (const FGameplayAbilityTargetDataHandle &TargetDataHandle, float CurrentLevel)
 
void GetValidTargets (const FGameplayAbilityTargetDataHandle &TargetDataHandle, TArray< AActor * > &OutValidActors) const
 
void ApplyEffectsToTargets (const TArray< AActor * > &TargetActors, float CurrentLevel)
 
void ApplyKnockbackToTargets (const TArray< AActor * > &TargetActors, AActor *Attacker)
 
void ApplyGlobalHitStop ()
 
FORCEINLINE void SetHitStopEnabled (bool bEnable)
 
- UGA_Base(으)로부터 상속된 Protected 멤버 함수
bool GetCursorData (FVector &TargetPos, FRotator &TargetRot) const
 
void MotionWarpTargetToCursor (FName WarpTargetName=FName("Target"))
 
void RotateCharacterToCursor ()
 

Protected 속성

TObjectPtr< UAT_TraceActiveTraceTask
 
TSubclassOf< ATA_TraceHitTraceClass
 
TArray< TSubclassOf< UGameplayEffect > > TargetEffectClasses
 
FGameplayTag HitCheckStartTag
 
FGameplayTag HitCheckEndTag
 
TEnumAsByte< ECollisionChannel > TraceChannel
 
uint8 bApplyKnockback: 1 = false
 
float KnockbackStrength = 700.0f
 
float KnockbackZComponent = 0.2f
 
uint8 bApplyHitStop: 1 = false
 
float HitStopDuration = 0.05f
 
float HitStopTimeDilation = 0.1f
 

Private 멤버 함수

void RestoreTimeDilation ()
 

Private 속성

FTimerHandle HitStopTimerHandle
 

생성자 & 소멸자 문서화

◆ UGA_CombatBase()

UGA_CombatBase::UGA_CombatBase ( )
15{
16}

멤버 함수 문서화

◆ ApplyCombatData()

void UGA_CombatBase::ApplyCombatData ( )
protectedvirtual

UGA_EnemyAttack, UGA_Attack, UGA_Skill_Q, UGA_SkillBase에서 재구현되었습니다.

25{
26 if (!CombatData)
27 {
28 return;
29 }
30
31 HitTraceClass = CombatData->HitTraceClass;
32 TargetEffectClasses = CombatData->TargetEffectClasses;
33 HitCheckStartTag = CombatData->HitCheckStartTag;
34 HitCheckEndTag = CombatData->HitCheckEndTag;
35 TraceChannel = CombatData->TraceChannel;
36 bApplyKnockback = CombatData->bApplyKnockback;
37 KnockbackStrength = CombatData->KnockbackStrength;
38 KnockbackZComponent = CombatData->KnockbackZComponent;
39 bApplyHitStop = CombatData->bApplyHitStop;
40 HitStopDuration = CombatData->HitStopDuration;
41 HitStopTimeDilation = CombatData->HitStopTimeDilation;
42}
uint8 bApplyKnockback
Definition GA_CombatBase.h:91
uint8 bApplyHitStop
Definition GA_CombatBase.h:100
TSubclassOf< ATA_Trace > HitTraceClass
Definition GA_CombatBase.h:75
float KnockbackZComponent
Definition GA_CombatBase.h:97
TEnumAsByte< ECollisionChannel > TraceChannel
Definition GA_CombatBase.h:87
TObjectPtr< UCombatDataBase > CombatData
Definition GA_CombatBase.h:68
float HitStopTimeDilation
Definition GA_CombatBase.h:106
float HitStopDuration
Definition GA_CombatBase.h:103
float KnockbackStrength
Definition GA_CombatBase.h:94
FGameplayTag HitCheckStartTag
Definition GA_CombatBase.h:81
TArray< TSubclassOf< UGameplayEffect > > TargetEffectClasses
Definition GA_CombatBase.h:78
FGameplayTag HitCheckEndTag
Definition GA_CombatBase.h:84
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyEffectsToTargets()

void UGA_CombatBase::ApplyEffectsToTargets ( const TArray< AActor * > &  TargetActors,
float  CurrentLevel 
)
protected
193{
194 if (!CurrentActorInfo || TargetEffectClasses.IsEmpty())
195 {
196 return;
197 }
198
199 FGameplayAbilityTargetData_ActorArray* NewData = new FGameplayAbilityTargetData_ActorArray();
200 NewData->TargetActorArray.Append(TargetActors);
201 FGameplayAbilityTargetDataHandle FilteredHandle(NewData);
202
203 for (const TSubclassOf<UGameplayEffect>& EffectClass : TargetEffectClasses)
204 {
205 if (!EffectClass)
206 {
207 continue;
208 }
209
210 FGameplayEffectSpecHandle EffectSpecHandle = MakeOutgoingGameplayEffectSpec(EffectClass, CurrentLevel);
211 if (EffectSpecHandle.IsValid())
212 {
213 (void)ApplyGameplayEffectSpecToTarget(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, EffectSpecHandle, FilteredHandle);
214 }
215 }
216}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyGlobalHitStop()

void UGA_CombatBase::ApplyGlobalHitStop ( )
protected
233{
234 if (UWorld* World = GetWorld())
235 {
236 UGameplayStatics::SetGlobalTimeDilation(World, HitStopTimeDilation);
237 World->GetTimerManager().SetTimer(
239 this,
240 &ThisClass::RestoreTimeDilation,
242 false);
243 }
244}
FTimerHandle HitStopTimerHandle
Definition GA_CombatBase.h:110
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ApplyKnockbackToTargets()

void UGA_CombatBase::ApplyKnockbackToTargets ( const TArray< AActor * > &  TargetActors,
AActor *  Attacker 
)
protected
219{
220 for (AActor* Target : TargetActors)
221 {
222 if (ACharacter* TargetCharacter = Cast<ACharacter>(Target))
223 {
224 FVector KnockbackDir = (TargetCharacter->GetActorLocation() - Attacker->GetActorLocation()).GetSafeNormal();
225 KnockbackDir.Z = KnockbackZComponent;
226
227 TargetCharacter->LaunchCharacter(KnockbackDir * KnockbackStrength, true, true);
228 }
229 }
230}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ EndAbility()

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

UGA_EnemyAttack, UGA_Attack에서 재구현되었습니다.

45{
47 {
48 ActiveTraceTask->EndTask();
49 ActiveTraceTask = nullptr;
50 }
51
52 if (UWorld* World = GetWorld())
53 {
54 if (World->GetTimerManager().IsTimerActive(HitStopTimerHandle))
55 {
56 World->GetTimerManager().ClearTimer(HitStopTimerHandle);
58 }
59 }
60
61 Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
62}
TObjectPtr< UAT_Trace > ActiveTraceTask
Definition GA_CombatBase.h:72
void RestoreTimeDilation()
Definition GA_CombatBase.cpp:246
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetHitStopEnable()

FORCEINLINE bool UGA_CombatBase::GetHitStopEnable ( ) const
inline
27{ return bApplyHitStop; }

◆ GetValidTargets()

void UGA_CombatBase::GetValidTargets ( const FGameplayAbilityTargetDataHandle &  TargetDataHandle,
TArray< AActor * > &  OutValidActors 
) const
protected
165{
166 for (const TSharedPtr<FGameplayAbilityTargetData>& Data : TargetDataHandle.Data)
167 {
168 if (!Data.IsValid())
169 {
170 continue;
171 }
172
173 for (const TWeakObjectPtr<AActor>& TargetPtr : Data->GetActors())
174 {
175 AActor* Target = TargetPtr.Get();
176 if (!Target)
177 {
178 continue;
179 }
180
181 UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(Target);
182 if (!TargetASC || TargetASC->HasMatchingGameplayTag(TAG_CHARACTER_STATE_ISDEAD))
183 {
184 continue;
185 }
186
187 OutValidActors.AddUnique(Target);
188 }
189 }
190}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ OnGiveAbility()

void UGA_CombatBase::OnGiveAbility ( const FGameplayAbilityActorInfo *  ActorInfo,
const FGameplayAbilitySpec &  Spec 
)
overridevirtual
19{
20 Super::OnGiveAbility(ActorInfo, Spec);
22}
virtual void ApplyCombatData()
Definition GA_CombatBase.cpp:24
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnHitCheckEnd()

void UGA_CombatBase::OnHitCheckEnd ( FGameplayEventData  Payload)
protected
106{
107 if (ActiveTraceTask)
108 {
109 ActiveTraceTask->EndTask();
110 ActiveTraceTask = nullptr;
111 }
112}

◆ OnHitCheckStart()

void UGA_CombatBase::OnHitCheckStart ( FGameplayEventData  Payload)
protected
90{
91 if (ActiveTraceTask) // 예외처리: 혹시나 생성된 Task가 있으면 안 되기에
92 {
93 ActiveTraceTask->EndTask();
94 ActiveTraceTask = nullptr;
95 }
96
97 ActiveTraceTask = UAT_Trace::CreateTask(this, HitTraceClass, Payload.EventMagnitude, TraceChannel, false);
99 {
100 ActiveTraceTask->OnCompleteDelegate.AddDynamic(this, &ThisClass::OnTraceResultCallback);
101 ActiveTraceTask->ReadyForActivation();
102 }
103}
static UAT_Trace * CreateTask(UGameplayAbility *OwningAbility, TSubclassOf< ATA_Trace > TargetActorClass, float InCurrentLevel, ECollisionChannel InTraceChannel=ECC_GameTraceChannel1, bool bInSingleTrace=false)
Definition AT_Trace.cpp:13
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnSingleHitCheck()

void UGA_CombatBase::OnSingleHitCheck ( FGameplayEventData  Payload)
protected
115{
116 if (ActiveTraceTask) // 예외처리: 혹시나 생성된 Task가 있으면 안 되기에
117 {
118 ActiveTraceTask->EndTask();
119 ActiveTraceTask = nullptr;
120 }
121
122 ActiveTraceTask = UAT_Trace::CreateTask(this, HitTraceClass, Payload.EventMagnitude, TraceChannel, true);
123 if (ActiveTraceTask)
124 {
125 ActiveTraceTask->OnCompleteDelegate.AddDynamic(this, &ThisClass::OnTraceResultCallback);
126 ActiveTraceTask->ReadyForActivation();
127 }
128}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnTraceResultCallback()

void UGA_CombatBase::OnTraceResultCallback ( const FGameplayAbilityTargetDataHandle &  TargetDataHandle,
float  CurrentLevel 
)
protected
131{
132 if (TargetDataHandle.Data.IsEmpty())
133 {
134 return;
135 }
136
137 AActor* Attacker = GetAvatarActorFromActorInfo();
138 TArray<AActor*> ValidLivingActors;
139
140 // 유효한 타겟들을 추려내는 함수
141 GetValidTargets(TargetDataHandle, ValidLivingActors);
142
143 if (ValidLivingActors.IsEmpty())
144 {
145 return;
146 }
147
148 // GE 적용
149 ApplyEffectsToTargets(ValidLivingActors, CurrentLevel);
150
151 // 넉백 적용
152 if (bApplyKnockback && Attacker)
153 {
154 ApplyKnockbackToTargets(ValidLivingActors, Attacker);
155 }
156
157 // 글로벌 히트 스탑
158 if (bApplyHitStop)
159 {
161 }
162}
void ApplyKnockbackToTargets(const TArray< AActor * > &TargetActors, AActor *Attacker)
Definition GA_CombatBase.cpp:218
void ApplyEffectsToTargets(const TArray< AActor * > &TargetActors, float CurrentLevel)
Definition GA_CombatBase.cpp:192
void ApplyGlobalHitStop()
Definition GA_CombatBase.cpp:232
void GetValidTargets(const FGameplayAbilityTargetDataHandle &TargetDataHandle, TArray< AActor * > &OutValidActors) const
Definition GA_CombatBase.cpp:164
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RestoreTimeDilation()

void UGA_CombatBase::RestoreTimeDilation ( )
private
247{
248 if (UWorld* World = GetWorld())
249 {
250 UGameplayStatics::SetGlobalTimeDilation(World, 1.0f);
251 }
252}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetHitStopEnabled()

FORCEINLINE void UGA_CombatBase::SetHitStopEnabled ( bool  bEnable)
inlineprotected
60{ bApplyHitStop = bEnable; }
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupHitCheckListeners()

void UGA_CombatBase::SetupHitCheckListeners ( )
protected
65{
66 // 태그 대기
67 if (UAbilityTask_WaitGameplayEvent* WaitStart = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, HitCheckStartTag, nullptr, false, false))
68 {
69 WaitStart->EventReceived.AddDynamic(this, &ThisClass::OnHitCheckStart);
70 WaitStart->ReadyForActivation();
71 }
72
73 if (UAbilityTask_WaitGameplayEvent* WaitEnd = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, HitCheckEndTag, nullptr, false, false))
74 {
75 WaitEnd->EventReceived.AddDynamic(this, &ThisClass::OnHitCheckEnd);
76 WaitEnd->ReadyForActivation();
77 }
78}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetupSingleHitCheckListener()

void UGA_CombatBase::SetupSingleHitCheckListener ( )
protected
81{
82 if (UAbilityTask_WaitGameplayEvent* WaitStart = UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(this, HitCheckStartTag, nullptr, false, false))
83 {
84 WaitStart->EventReceived.AddDynamic(this, &ThisClass::OnSingleHitCheck);
85 WaitStart->ReadyForActivation();
86 }
87}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ ActiveTraceTask

TObjectPtr<UAT_Trace> UGA_CombatBase::ActiveTraceTask
protected

◆ bApplyHitStop

uint8 UGA_CombatBase::bApplyHitStop
protected

◆ bApplyKnockback

uint8 UGA_CombatBase::bApplyKnockback
protected

◆ CombatData

TObjectPtr<UCombatDataBase> UGA_CombatBase::CombatData

◆ HitCheckEndTag

FGameplayTag UGA_CombatBase::HitCheckEndTag
protected

◆ HitCheckStartTag

FGameplayTag UGA_CombatBase::HitCheckStartTag
protected

◆ HitStopDuration

float UGA_CombatBase::HitStopDuration = 0.05f
protected

◆ HitStopTimeDilation

float UGA_CombatBase::HitStopTimeDilation = 0.1f
protected

◆ HitStopTimerHandle

FTimerHandle UGA_CombatBase::HitStopTimerHandle
private

◆ HitTraceClass

TSubclassOf<ATA_Trace> UGA_CombatBase::HitTraceClass
protected

◆ KnockbackStrength

float UGA_CombatBase::KnockbackStrength = 700.0f
protected

◆ KnockbackZComponent

float UGA_CombatBase::KnockbackZComponent = 0.2f
protected

◆ TargetEffectClasses

TArray<TSubclassOf<UGameplayEffect> > UGA_CombatBase::TargetEffectClasses
protected

◆ TraceChannel

TEnumAsByte<ECollisionChannel> UGA_CombatBase::TraceChannel
protected

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