void FGAGameEffectContainer::InternalApplyDuration(const FGAGameEffectHandle& HandleIn) { FTimerDelegate delDuration = FTimerDelegate::CreateUObject(HandleIn.GetContext().TargetComp.Get(), &UGAAttributeComponent::ExpireEffect, HandleIn); FTimerManager& timerDuration = HandleIn.GetEffectRef().Context.TargetComp->GetWorld()->GetTimerManager(); timerDuration.SetTimer(HandleIn.GetEffectRef().DurationTimerHandle, delDuration, HandleIn.GetEffectSpec()->Duration, false, HandleIn.GetEffectSpec()->Duration); TArray<FGAEffectMod> Modifiers = HandleIn.GetEffectRef().GetAttributeModifiers(); EGAEffectStacking Stacking = HandleIn.GetEffectSpec()->EffectStacking; InternalApplyEffectTags(HandleIn); for (FGAEffectMod& Modifier : Modifiers) { if (Modifier.Attribute.IsValid()) { UGAAttributesBase* attr = HandleIn.GetContextRef().GetTargetAttributes(); FGAAttributeBase* Attribute = attr->GetAttribute(Modifier.Attribute); if (Attribute) { Attribute->AddBonus(FGAModifier(Modifier.AttributeMod, Modifier.Value), HandleIn, Stacking); } } } }
void FGAGameEffectContainer::InternalApplyModifiers(const FGAGameEffectHandle& HandleIn) { TArray<FGAGameEffectModifier>& Modifiers = HandleIn.GetEffectSpec()->Modifiers; EGAEffectStacking Stacking = HandleIn.GetEffectSpec()->EffectStacking; for (FGAGameEffectModifier& Modifier : Modifiers) { if (Modifier.Attribute.IsValid()) { UGAAttributesBase* attr = HandleIn.GetContextRef().GetTargetAttributes(); FGAAttributeBase* Attribute = attr->GetAttribute(Modifier.Attribute); if (Attribute) { Attribute->AddBonus(FGAModifier(Modifier.ModType, Modifier.Value), HandleIn, Stacking); } } } }
void FGAGameEffectContainer::ApplyModifier(const FGAGameEffectModifier& ModifierIn, const FGAGameEffect& EffectIn) { //if there is valid attribute specified, we go different path and ignore any tags modifiers. if (ModifierIn.Attribute.IsValid()) { FGAGameEffect& effect = const_cast<FGAGameEffect&>(EffectIn); UGAAttributesBase* attr = effect.Context.GetTargetAttributes(); //it shouldn't ever be null if (attr) { FGAAttributeBase* baseAttribute = attr->GetAttribute(ModifierIn.Attribute); } } else { int32 Index = static_cast<int32>(ModifierIn.Direction); Modifiers[Index].Add(ModifierIn); } }