FGAEffectHandle FGAActiveEffectContainer::ApplyEffect(const FGAEffectSpec& SpecIn, const FGAEffectContext& Ctx) { switch (SpecIn.Policy.Type) { case EGAEffectType::Instant: { FGAEffectSpec& nonConst = const_cast<FGAEffectSpec&>(SpecIn); FGAEffectInstant instntEffect(nonConst, Ctx); return HandleInstantEffect(instntEffect, Ctx); } case EGAEffectType::Periodic: { FGAEffectSpec& nonConst = const_cast<FGAEffectSpec&>(SpecIn); return HandleDurationEffect(nonConst, Ctx); } case EGAEffectType::Duration: { FGAEffectSpec& nonConst = const_cast<FGAEffectSpec&>(SpecIn); return HandleDurationEffect(nonConst, Ctx); } case EGAEffectType::Infinite: { break; } default: { return FGAEffectHandle(); } } return FGAEffectHandle(); }
FGAEffectHandle FGAActiveEffectContainer::ApplyEffect(TSubclassOf<class UGAEffectSpecification> SpecIn, const FGAEffectContext& Ctx, const FName& EffectName) { if (!SpecIn) return FGAEffectHandle(); FGAEffectSpec spec(SpecIn.GetDefaultObject(), Ctx); spec.EffectName.EffectName = EffectName; switch (spec.Policy.Type) { case EGAEffectType::Instant: { FGAEffectInstant instntEffect(spec, Ctx); return HandleInstantEffect(instntEffect, Ctx); } case EGAEffectType::Periodic: { return HandleDurationEffect(spec, Ctx); } case EGAEffectType::Duration: { return HandleDurationEffect(spec, Ctx); } case EGAEffectType::Infinite: { break; } default: { return FGAEffectHandle(); } } return FGAEffectHandle(); }