void Test_ManaBuff() { const float BuffValue = 30.f; const float StartingMana = DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Mana; FActiveGameplayEffectHandle BuffHandle; // apply the buff { ABILITY_LOG_SCOPE(TEXT("Apply Buff")); CONSTRUCT_CLASS(UGameplayEffect, DamageBuffEffect); AddModifier(DamageBuffEffect, GET_FIELD_CHECKED(UAbilitySystemTestAttributeSet, Mana), EGameplayModOp::Additive, FScalableFloat(BuffValue)); DamageBuffEffect->DurationPolicy = EGameplayEffectDurationType::Infinite; BuffHandle = SourceComponent->ApplyGameplayEffectToTarget(DamageBuffEffect, DestComponent, 1.f); } // check that the value changed TestEqual(SKILL_TEST_TEXT("Mana Buffed"), DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Mana, StartingMana + BuffValue); // remove the effect { ABILITY_LOG_SCOPE(TEXT("Remove Buff")); DestComponent->RemoveActiveGameplayEffect(BuffHandle); } // check that the value changed back TestEqual(SKILL_TEST_TEXT("Mana Restored"), DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Mana, StartingMana); }
void FActiveGameplayEffectsContainer::PrintAllGameplayEffects() const { ABILITY_LOG_SCOPE(TEXT("ActiveGameplayEffects. Num: %d"), GameplayEffects.Num()); for (const FActiveGameplayEffect& Effect : GameplayEffects) { Effect.PrintAll(); } }
void FGameplayEffectSpec::PrintAll() const { ABILITY_LOG_SCOPE(TEXT("GameplayEffectSpec")); ABILITY_LOG(Log, TEXT("Def: %s"), *Def->GetName()); ABILITY_LOG(Log, TEXT("Duration: %.2f"), GetDuration()); ABILITY_LOG(Log, TEXT("Period: %.2f"), GetPeriod()); ABILITY_LOG(Log, TEXT("Modifiers:")); }
void Test_InstantDamage() { const float DamageValue = 5.f; const float StartingHealth = DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Health; // just try and reduce the health attribute { ABILITY_LOG_SCOPE(TEXT("Apply InstantDamage")); CONSTRUCT_CLASS(UGameplayEffect, BaseDmgEffect); AddModifier(BaseDmgEffect, GET_FIELD_CHECKED(UAbilitySystemTestAttributeSet, Health), EGameplayModOp::Additive, FScalableFloat(-DamageValue)); BaseDmgEffect->DurationPolicy = EGameplayEffectDurationType::Instant; SourceComponent->ApplyGameplayEffectToTarget(BaseDmgEffect, DestComponent, 1.f); } // make sure health was reduced TestEqual(SKILL_TEST_TEXT("Health Reduced"), DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Health, StartingHealth - DamageValue); }
void Test_InstantDamageRemap() { const float DamageValue = 5.f; const float StartingHealth = DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Health; // This is the same as GameplayEffectsTest_InstantDamage but modifies the Damage attribute and confirms it is remapped to -Health by UAbilitySystemTestAttributeSet::PostAttributeModify { ABILITY_LOG_SCOPE(TEXT("Apply InstantDamage")); CONSTRUCT_CLASS(UGameplayEffect, BaseDmgEffect); AddModifier(BaseDmgEffect, GET_FIELD_CHECKED(UAbilitySystemTestAttributeSet, Damage), EGameplayModOp::Additive, FScalableFloat(DamageValue)); BaseDmgEffect->DurationPolicy = EGameplayEffectDurationType::Instant; SourceComponent->ApplyGameplayEffectToTarget(BaseDmgEffect, DestComponent, 1.f); } // Now we should have lost some health TestEqual(SKILL_TEST_TEXT("Health Reduced"), DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Health, StartingHealth - DamageValue); // Confirm the damage attribute itself was reset to 0 when it was applied to health TestEqual(SKILL_TEST_TEXT("Damage Applied"), DestComponent->GetSet<UAbilitySystemTestAttributeSet>()->Damage, 0.f); }