2022-05-23 18:41:30 +00:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
#include "LyraHealExecution.h"
|
|
|
|
#include "GameplayEffectTypes.h"
|
|
|
|
#include "AbilitySystem/Attributes/LyraHealthSet.h"
|
|
|
|
#include "AbilitySystem/Attributes/LyraCombatSet.h"
|
|
|
|
|
|
|
|
|
|
|
|
struct FHealStatics
|
|
|
|
{
|
|
|
|
FGameplayEffectAttributeCaptureDefinition BaseHealDef;
|
|
|
|
|
|
|
|
FHealStatics()
|
|
|
|
{
|
|
|
|
BaseHealDef = FGameplayEffectAttributeCaptureDefinition(ULyraCombatSet::GetBaseHealAttribute(), EGameplayEffectAttributeCaptureSource::Source, true);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
static FHealStatics& HealStatics()
|
|
|
|
{
|
|
|
|
static FHealStatics Statics;
|
|
|
|
return Statics;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ULyraHealExecution::ULyraHealExecution()
|
|
|
|
{
|
|
|
|
RelevantAttributesToCapture.Add(HealStatics().BaseHealDef);
|
|
|
|
}
|
|
|
|
|
|
|
|
void ULyraHealExecution::Execute_Implementation(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const
|
|
|
|
{
|
|
|
|
#if WITH_SERVER_CODE
|
|
|
|
const FGameplayEffectSpec& Spec = ExecutionParams.GetOwningSpec();
|
|
|
|
|
|
|
|
const FGameplayTagContainer* SourceTags = Spec.CapturedSourceTags.GetAggregatedTags();
|
|
|
|
const FGameplayTagContainer* TargetTags = Spec.CapturedTargetTags.GetAggregatedTags();
|
|
|
|
|
|
|
|
FAggregatorEvaluateParameters EvaluateParameters;
|
|
|
|
EvaluateParameters.SourceTags = SourceTags;
|
|
|
|
EvaluateParameters.TargetTags = TargetTags;
|
|
|
|
|
|
|
|
float BaseHeal = 0.0f;
|
|
|
|
ExecutionParams.AttemptCalculateCapturedAttributeMagnitude(HealStatics().BaseHealDef, EvaluateParameters, BaseHeal);
|
|
|
|
|
|
|
|
const float HealingDone = FMath::Max(0.0f, BaseHeal);
|
|
|
|
|
|
|
|
if (HealingDone > 0.0f)
|
|
|
|
{
|
2022-09-13 07:18:28 +00:00
|
|
|
// Apply a healing modifier, this gets turned into + health on the target
|
|
|
|
OutExecutionOutput.AddOutputModifier(FGameplayModifierEvaluatedData(ULyraHealthSet::GetHealingAttribute(), EGameplayModOp::Additive, HealingDone));
|
2022-05-23 18:41:30 +00:00
|
|
|
}
|
|
|
|
#endif // #if WITH_SERVER_CODE
|
|
|
|
}
|