Files
Aura/Source/Aura/Private/AbilitySystem/EffectCalculation/ExecCalc_AttributeBased.cpp
2024-03-20 16:21:19 +01:00

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)