RealtimeStyleTransferRuntime/Source/LyraGame/AbilitySystem/Executions/LyraHealExecution.cpp

54 lines
1.7 KiB
C++
Raw Normal View History

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)
{
OutExecutionOutput.AddOutputModifier(FGameplayModifierEvaluatedData(ULyraHealthSet::GetHealthAttribute(), EGameplayModOp::Additive, HealingDone));
}
#endif // #if WITH_SERVER_CODE
}