// Copyright (c) 2026 Reignance Studios. MIT License, see LICENSE. #include "GKLEffects.h" #include "GKLAttributeSet.h" #include "GKLGameplayTags.h" static FGameplayModifierInfo GKLSetByCallerModifier(const FGameplayAttribute& Attribute, const FGameplayTag& DataTag) { FSetByCallerFloat SetByCaller; SetByCaller.DataTag = DataTag; FGameplayModifierInfo Info; Info.Attribute = Attribute; Info.ModifierOp = EGameplayModOp::Additive; Info.ModifierMagnitude = FGameplayEffectModifierMagnitude(SetByCaller); return Info; } static FGameplayModifierInfo GKLConstantModifier(const FGameplayAttribute& Attribute, float Value) { FGameplayModifierInfo Info; Info.Attribute = Attribute; Info.ModifierOp = EGameplayModOp::Additive; Info.ModifierMagnitude = FGameplayEffectModifierMagnitude(FScalableFloat(Value)); return Info; } UGKLCostEffect::UGKLCostEffect() { DurationPolicy = EGameplayEffectDurationType::Instant; Modifiers.Add(GKLSetByCallerModifier(UGKLAttributeSet::GetStaminaAttribute(), GKLTags::Data_Cost_Stamina)); Modifiers.Add(GKLSetByCallerModifier(UGKLAttributeSet::GetManaAttribute(), GKLTags::Data_Cost_Mana)); } UGKLCooldownEffect::UGKLCooldownEffect() { FSetByCallerFloat SetByCaller; SetByCaller.DataTag = GKLTags::Data_Cooldown; DurationPolicy = EGameplayEffectDurationType::HasDuration; DurationMagnitude = FGameplayEffectModifierMagnitude(SetByCaller); } UGKLDamageEffect::UGKLDamageEffect() { DurationPolicy = EGameplayEffectDurationType::Instant; Modifiers.Add(GKLSetByCallerModifier(UGKLAttributeSet::GetDamageAttribute(), GKLTags::Data_Damage)); } UGKLHealEffect::UGKLHealEffect() { DurationPolicy = EGameplayEffectDurationType::Instant; Modifiers.Add(GKLSetByCallerModifier(UGKLAttributeSet::GetHealthAttribute(), GKLTags::Data_Healing)); } UGKLRegenEffect::UGKLRegenEffect() { DurationPolicy = EGameplayEffectDurationType::Infinite; Period = 1.f; Modifiers.Add(GKLConstantModifier(UGKLAttributeSet::GetStaminaAttribute(), 10.f)); Modifiers.Add(GKLConstantModifier(UGKLAttributeSet::GetManaAttribute(), 2.f)); }