void FGAGameEffectContainer::InternalCheckPeriodicEffectStacking(const FGAGameEffectHandle& HandleIn) { UGAGameEffectSpec* Spec = HandleIn.GetEffectSpec(); //sEGAEffectStacking Stacking = Spec->EffectStacking; EGAEffectAggregation Aggregation = Spec->EffectAggregation; EGAEffectStacking Stacking = HandleIn.GetEffectSpec()->EffectStacking; UE_LOG(GameAttributes, Log, TEXT("Stacking Type: %s"), *EnumToString::GetStatckingAsString(Stacking)); FGAGameEffectHandle* Handle = nullptr; switch (Aggregation) { case EGAEffectAggregation::AggregateByInstigator: { TMap<FName, TSet<FGAGameEffectHandle>>* EffectHandle = InstigatorEffectHandles.Find(HandleIn.GetContextRef().Instigator.Get()); TSet<FGAGameEffectHandle>* HandleSet = nullptr; if (EffectHandle) { HandleSet = EffectHandle->Find(HandleIn.GetEffectSpec()->GetFName()); if (HandleSet) { Handle = HandleSet->Find(HandleIn); } } } case EGAEffectAggregation::AggregateByTarget: { TSet<FGAGameEffectHandle>* HandleSet = TargetEffectByType.Find(HandleIn.GetEffectSpec()->GetFName()); if (HandleSet) { Handle = HandleSet->Find(HandleIn); } break; } } switch (Stacking) { case EGAEffectStacking::Add: { break; } case EGAEffectStacking::Duration: { break; } case EGAEffectStacking::Intensity: { break; } case EGAEffectStacking::Override: { break; } case EGAEffectStacking::StrongerOverride: { InternalApplyPeriodic(HandleIn); break; } } InternalApplyEffectByAggregation(HandleIn); }
void FGAGameEffectContainer::InternalCheckEffectStacking(const FGAGameEffectHandle& HandleIn) { UGAGameEffectSpec* Spec = HandleIn.GetEffectSpec(); //sEGAEffectStacking Stacking = Spec->EffectStacking; EGAEffectAggregation Aggregation = Spec->EffectAggregation; EGAEffectStacking Stacking = HandleIn.GetEffectSpec()->EffectStacking; UE_LOG(GameAttributes, Log, TEXT("Stacking Type: %s"), *EnumToString::GetStatckingAsString(Stacking)); switch (Aggregation) { case EGAEffectAggregation::AggregateByInstigator: { TMap<UClass*, FGAGameEffectHandle>* EffectHandle = InstigatorEffectHandles.Find(HandleIn.GetContextRef().Instigator.Get()); FGAGameEffectHandle* Handle = nullptr; if(EffectHandle) Handle = EffectHandle->Find(HandleIn.GetEffectSpec()->StaticClass()); switch (Stacking) { case EGAEffectStacking::Add: { InternalApplyEffect(HandleIn); break; } case EGAEffectStacking::Duration: { if (Handle) { InternalExtendEffectDuration(*Handle, HandleIn); } else { FGAGameEffectHandle InvalidHandle; InternalExtendEffectDuration(HandleIn, InvalidHandle); } break; } case EGAEffectStacking::Intensity: { break; } case EGAEffectStacking::Override: { if (Handle) { RemoveEffect(*Handle); } InternalApplyEffect(HandleIn); break; } case EGAEffectStacking::StrongerOverride: { if (Handle) { RemoveEffect(*Handle); } InternalApplyEffect(HandleIn); break; } } break; } case EGAEffectAggregation::AggregateByTarget: { break; } } InternalApplyEffectByAggregation(HandleIn); }