void UGAAttributeComponent::InternalRemoveEffect(FGAGameEffectHandle& HandleIn) { FTimerManager& timer = GetWorld()->GetTimerManager(); timer.ClearTimer(HandleIn.GetEffectRef().PeriodTimerHandle); timer.ClearTimer(HandleIn.GetEffectRef().DurationTimerHandle); UE_LOG(GameAttributesEffects, Log, TEXT("UGAAttributeComponent:: Reset Timers and Remove Effect")); FGAGameEffect& Effect = HandleIn.GetEffectRef(); TArray<FGAEffectMod> Mods = Effect.GetOnAppliedMods(); for (FGAEffectMod& mod : Mods) { FGAAttributeBase* attr = DefaultAttributes->GetAttribute(mod.Attribute); if (attr) { UE_LOG(GameAttributes, Log, TEXT("Value Before bonus of attribute = %f"), attr->GetFinalValue()); attr->RemoveBonus(HandleIn); UE_LOG(GameAttributes, Log, TEXT("Value After bonus of attribute = %f"), attr->GetFinalValue()); } } GameEffectContainer.RemoveEffect(HandleIn); }
float UGAAttributesBase::GetFinalAttributeValue(const FGAAttribute& Name) { FGAAttributeBase* attrPtr = GetAttribute(Name); if (attrPtr) { return attrPtr->GetFinalValue(); } return 0; }
void UGAAttributeComponent::ApplyEffectForDuration(FGAGameEffectHandle& HandleIn) { FGAGameEffect& Effect = HandleIn.GetEffectRef(); TArray<FGAEffectMod> Mods = Effect.GetOnAppliedMods(); for (FGAEffectMod& mod : Mods) { FGAAttributeBase* attr = DefaultAttributes->GetAttribute(mod.Attribute); if (attr) { FGAModifier Modifier(mod.AttributeMod, mod.Value); float val = attr->GetFinalValue(); UE_LOG(GameAttributes, Log, TEXT("Value Before bonus of attribute = %f"), val); attr->AddBonus(Modifier, HandleIn, EGAEffectStacking::Override); val = attr->GetFinalValue(); UE_LOG(GameAttributes, Log, TEXT("Value After bonus of attribute = %f"), val); } } }