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

#include <ExecCalc_Damage.h>

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

Public 멤버 함수

 UExecCalc_Damage ()
 
virtual void Execute_Implementation (const FGameplayEffectCustomExecutionParameters &ExecutionParams, FGameplayEffectCustomExecutionOutput &OutExecutionOutput) const override
 

생성자 & 소멸자 문서화

◆ UExecCalc_Damage()

UExecCalc_Damage::UExecCalc_Damage ( )
34{
35 RelevantAttributesToCapture.Add(DamageStatics().AttackDef);
36 RelevantAttributesToCapture.Add(DamageStatics().CriticalDef);
37 RelevantAttributesToCapture.Add(DamageStatics().Critical_DmgDef);
38}
static const FDamageStatics & DamageStatics()
Definition ExecCalc_Damage.cpp:26
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ Execute_Implementation()

void UExecCalc_Damage::Execute_Implementation ( const FGameplayEffectCustomExecutionParameters &  ExecutionParams,
FGameplayEffectCustomExecutionOutput &  OutExecutionOutput 
) const
overridevirtual
42{
43 Super::Execute_Implementation(ExecutionParams, OutExecutionOutput);
44 // 이펙트를 발동시키는 정보는 ExecutionParams에 들어오고, 우리가 바꿀 Attribute값에 대해선 OutExecutionOutput이라는 곳에 최종 데이터를 추가해주면 된다.
45
46 UAbilitySystemComponent* SourceASC = ExecutionParams.GetSourceAbilitySystemComponent();
47 UAbilitySystemComponent* TargetASC = ExecutionParams.GetTargetAbilitySystemComponent();
48
49 if (!SourceASC || !TargetASC)
50 {
51 return;
52 }
53
54 const FGameplayEffectSpec& Spec = ExecutionParams.GetOwningSpec();
55 FAggregatorEvaluateParameters EvaluationParameters;
56
57 const FGameplayTagContainer* TargetTags = Spec.CapturedTargetTags.GetAggregatedTags();
58 const FGameplayTagContainer* SourceTags = Spec.CapturedSourceTags.GetAggregatedTags();
59
60 EvaluationParameters.TargetTags = TargetTags;
61 EvaluationParameters.SourceTags = SourceTags;
62
63 // 무적 태그가 있을 경우 Pass~
64 if (TargetTags && TargetTags->HasTag(TAG_CHARACTER_STATE_ISINVINCIBLE))
65 {
66 return;
67 }
68
69 // 기본 데미지 가져오기
70 // Attribute 공격력을 가져오기 전에 블루프린트에서 계산이 끝난 값이 들어온다.
71 float BaseDamage = 0.0f;
72 ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().AttackDef, EvaluationParameters, BaseDamage);
73 BaseDamage = FMath::Max<float>(BaseDamage, 0.0f);
74
75 float FinalDamage = BaseDamage;
76
77 // 크리티컬
78 float CriticalChance = 0.0f;
79 ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().CriticalDef, EvaluationParameters, CriticalChance);
80 CriticalChance = FMath::Max<float>(CriticalChance, 0.0f);
81
82
83 bool bIsCriticalHit = false;
84
85 float CriticalMultiplier = 0.0f;
86 ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(DamageStatics().Critical_DmgDef, EvaluationParameters, CriticalMultiplier);
87 CriticalMultiplier = FMath::Max<float>(CriticalMultiplier, 1.0f);
88
89
90 if (CriticalChance > 0.0f)
91 {
92 float Random = FMath::RandRange(0.0f, 100.0f);
93 if (Random < CriticalChance)
94 {
95 bIsCriticalHit = true;
96 FinalDamage *= CriticalMultiplier;
97 }
98 }
99
100
101 if (FinalDamage > 0.0f)
102 {
103 float CritFlag = bIsCriticalHit ? 1.0f : 0.0f;
104 OutExecutionOutput.AddOutputModifier(FGameplayModifierEvaluatedData(UBaseAttributeSet::GetDamageIsCriticalAttribute(), EGameplayModOp::Additive, CritFlag));
105
106 OutExecutionOutput.AddOutputModifier(FGameplayModifierEvaluatedData(UBaseAttributeSet::GetDamageAttribute(), EGameplayModOp::Additive, FinalDamage));
107 }
108
109}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

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