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

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