internal void RemoveAurasWithEffectMechanics(AuraEffectType auraEffectType, SpellMechanics mechanics) { IReadOnlyList <AuraEffect> auraEffects = GetAuraEffects(auraEffectType); if (auraEffects == null) { return; } var auraEffectsToRemove = ListPoolContainer <AuraEffect> .Take(); for (int i = 0; i < auraEffects.Count; i++) { if (auraEffects[i].EffectInfo.Mechanics == mechanics) { auraEffectsToRemove.Add(auraEffects[i]); } } foreach (AuraEffect auraEffectToRemove in auraEffectsToRemove) { if (!auraEffectToRemove.Aura.IsRemoved) { auraEffectToRemove.Aura.Remove(AuraRemoveMode.Spell); } } ListPoolContainer <AuraEffect> .Return(auraEffectsToRemove); }
private Sprite GetSprite(AuraEffectType typeToSearchFor) { for (int i = 0; i < _auraEffectSprites.Length; i++) { if (_auraEffectSprites[i].Type == typeToSearchFor) { return(_auraEffectSprites[i].IconSprite); } } return(null); }
internal float MaxPositiveAuraModifier(AuraEffectType auraType) { if (!auraEffectsByAuraType.TryGetValue(auraType, out List <AuraEffect> auraEffects)) { return(0.0f); } float modifier = 0.0f; foreach (AuraEffect auraEffect in auraEffects) { modifier = Mathf.Max(modifier, auraEffect.Value); } return(modifier); }
internal float TotalAuraMultiplier(AuraEffectType auraType) { if (!auraEffectsByAuraType.TryGetValue(auraType, out List <AuraEffect> auraEffects)) { return(1.0f); } float multiplier = 1.0f; foreach (AuraEffect auraEffect in auraEffects) { multiplier = multiplier.AddPercentage(auraEffect.Value); } return(multiplier); }
internal float TotalAuraModifier(AuraEffectType auraType) { if (!auraEffectsByAuraType.TryGetValue(auraType, out List <AuraEffect> auraEffects)) { return(0.0f); } float modifier = 0.0f; foreach (AuraEffect auraEffect in auraEffects) { modifier += auraEffect.Value; } return(modifier); }
internal float TotalAuraMultiplier(AuraEffectType auraType, float secondaryValue, ComparisonOperator comparison) { if (!auraEffectsByAuraType.TryGetValue(auraType, out List <AuraEffect> auraEffects)) { return(1.0f); } float multiplier = 1.0f; foreach (AuraEffect auraEffect in auraEffects) { if (auraEffect.EffectInfo.SecondaryValue.CompareWith(secondaryValue, comparison)) { multiplier = multiplier.AddPercentage(auraEffect.Value); } } return(multiplier); }
internal void RemoveAurasWithEffect(AuraEffectType auraEffectType, AuraEffect exceptEffect = null, Aura exceptAura = null, Unit onlyWithCaster = null) { IReadOnlyList <AuraEffect> auraEffects = GetAuraEffects(auraEffectType); if (auraEffects == null) { return; } var auraEffectsToRemove = ListPoolContainer <AuraEffect> .Take(); for (int i = 0; i < auraEffects.Count; i++) { if (onlyWithCaster != null && auraEffects[i].Aura.Caster != onlyWithCaster) { continue; } if (exceptEffect == auraEffects[i]) { continue; } if (exceptAura == auraEffects[i].Aura) { continue; } auraEffectsToRemove.Add(auraEffects[i]); } foreach (AuraEffect auraEffectToRemove in auraEffectsToRemove) { if (!auraEffectToRemove.Aura.IsRemoved) { auraEffectToRemove.Aura.Remove(AuraRemoveMode.Spell); } } ListPoolContainer <AuraEffect> .Return(auraEffectsToRemove); }
public bool CanCancelAuraType(AuraEffectType auraEffectType, Unit caster) { IReadOnlyList <AuraEffect> activeEffects = caster.Auras.GetAuraEffects(auraEffectType); if (activeEffects == null) { return(true); } for (int i = 0; i < activeEffects.Count; i++) { if (CanCancelAura(activeEffects[i])) { continue; } return(false); } return(true); }
internal float MinPositiveAuraModifier(AuraEffectType auraType) { if (!auraEffectsByAuraType.TryGetValue(auraType, out List <AuraEffect> auraEffects)) { return(0.0f); } float modifier = float.MaxValue; bool hasPositive = false; foreach (AuraEffect auraEffect in auraEffects) { if (auraEffect.Value > 0.0f) { modifier = Mathf.Min(modifier, auraEffect.Value); hasPositive = true; } } return(hasPositive ? modifier : 0.0f); }
private SpellCastResult ValidateMechanics(AuraEffectType auraEffectType) { IReadOnlyList <AuraEffect> activeEffects = Caster.Auras.GetAuraEffects(auraEffectType); if (activeEffects == null) { return(SpellCastResult.Success); } for (int i = 0; i < activeEffects.Count; i++) { SpellMechanicsFlags combinedEffectMechanics = activeEffects[i].Aura.SpellInfo.CombinedEffectMechanics; if (combinedEffectMechanics == 0) { continue; } if (!SpellInfo.CastIgnoringMechanics.HasTargetFlag(combinedEffectMechanics)) { switch (auraEffectType) { case AuraEffectType.StunState: return(SpellCastResult.Stunned); case AuraEffectType.ModFear: return(SpellCastResult.Fleeing); case AuraEffectType.ConfusionState: return(SpellCastResult.Confused); default: return(SpellCastResult.NotKnown); } } } return(SpellCastResult.Success); }
internal void RemoveAurasWithEffect(AuraEffectType auraEffectType, AuraEffect except = null) { IReadOnlyList <AuraEffect> auraEffects = GetAuraEffects(auraEffectType); if (auraEffects == null) { return; } var auraEffectsToRemove = ListPoolContainer <AuraEffect> .Take(); auraEffectsToRemove.AddRange(auraEffects); auraEffectsToRemove.Remove(except); foreach (AuraEffect auraEffectToRemove in auraEffectsToRemove) { if (!auraEffectToRemove.Aura.IsRemoved) { auraEffectToRemove.Aura.Remove(AuraRemoveMode.Spell); } } ListPoolContainer <AuraEffect> .Return(auraEffectsToRemove); }
internal IReadOnlyList <AuraEffect> GetAuraEffects(AuraEffectType auraEffectType) { return(auraEffectsByAuraType.TryGetValue(auraEffectType, out List <AuraEffect> effectList) ? effectList : null); }
internal bool HasAuraType(AuraEffectType auraEffectType) => auraEffectsByAuraType.ContainsKey(auraEffectType);
public AuraEffectDetails(AuraEffectType type, bool isApplying) { Type = type; IsApplying = isApplying; }