62 lines
2.8 KiB
C++
62 lines
2.8 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
|
|
#include "AbilitySystem/EffectCalculation/ExecCalc_AttributeBased.h"
|
|
#include "AbilitySystemComponent.h"
|
|
#include "AbilitySystem/AuraAttributeSet.h"
|
|
|
|
void UExecCalc_AttributeBased::GetCapturedAttributesMagnitudes(const FGameplayEffectCustomExecutionParameters& ExecutionParams, TArray<float>& Attributes) const
|
|
{
|
|
const FGameplayEffectSpec& EffectSpec = ExecutionParams.GetOwningSpec();
|
|
|
|
const FGameplayTagContainer* SourceTag = EffectSpec.CapturedSourceTags.GetAggregatedTags();
|
|
const FGameplayTagContainer* TargetTag = EffectSpec.CapturedTargetTags.GetAggregatedTags();
|
|
|
|
FAggregatorEvaluateParameters EvaluationParameters;
|
|
EvaluationParameters.SourceTags = SourceTag;
|
|
EvaluationParameters.TargetTags = TargetTag;
|
|
|
|
for (FGameplayEffectAttributeCaptureDefinition AttributeCaptureDefinition : RelevantAttributesToCapture)
|
|
{
|
|
float AttributeValue = 0.0f;
|
|
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(AttributeCaptureDefinition, EvaluationParameters, AttributeValue);
|
|
Attributes.Add(AttributeValue);
|
|
}
|
|
}
|
|
|
|
void UExecCalc_AttributeBased::AddExecutionOutputs(const TArray<FGameplayModifierEvaluatedData>& EvaluatedDatas, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const
|
|
{
|
|
for (const FGameplayModifierEvaluatedData& EvaluatedData : EvaluatedDatas)
|
|
{
|
|
OutExecutionOutput.AddOutputModifier(EvaluatedData);
|
|
}
|
|
}
|
|
|
|
void UExecCalc_AttributeBased::GetContext(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectContextHandle& Context) const
|
|
{
|
|
Context = ExecutionParams.GetOwningSpec().GetContext();
|
|
}
|
|
|
|
float UExecCalc_AttributeBased::GetSetByCallerTagMagnitude(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayTag DataTag, bool WarnIfNotFound, float Default) const
|
|
{
|
|
return ExecutionParams.GetOwningSpec().GetSetByCallerMagnitude(DataTag, WarnIfNotFound, Default);
|
|
}
|
|
|
|
const TMap<FGameplayTag, float>& UExecCalc_AttributeBased::GetSetByCallerTagMagnitudes(const FGameplayEffectCustomExecutionParameters& ExecutionParams) const
|
|
{
|
|
return ExecutionParams.GetOwningSpec().SetByCallerTagMagnitudes;
|
|
}
|
|
|
|
FGameplayModifierEvaluatedData UExecCalc_AttributeBased::MakeModifierEvaluatedData_IncomingDamage(EGameplayModOp::Type Operation, float Value) const
|
|
{
|
|
return FGameplayModifierEvaluatedData(UAuraAttributeSet::GetIncomingDamageAttribute(), Operation, Value);
|
|
}
|
|
|
|
// #define MakeModifierImpl(AttributeName, CategoryName) \
|
|
// FGameplayModifierEvaluatedData UExecCalc_AttributeBased::MakeModifierEvaluatedData_##AttributeName(EGameplayModOp::Type Operation, float Value) const \
|
|
// { \
|
|
// return FGameplayModifierEvaluatedData(UAuraAttributeSet::Get##AttributeName##Attribute(), Operation, Value); \
|
|
// } \
|
|
|
|
// FOREACH_ATTRIBUTE_All(MakeModifierImpl)
|