private void AddUnitToAura(Unit unit) { tempUpdatedTargets.Add(unit); if (applicationsByTargetId.ContainsKey(unit.Id) || unit.IsImmuneToAura(AuraInfo, Caster)) { return; } // check effect for immunity int auraEffectMask = 0; for (int i = 0; i < effectInfos.Count; i++) { if (!unit.IsImmuneToAuraEffect(effectInfos[i], Caster)) { auraEffectMask = auraEffectMask.SetBit(i); } } if (auraEffectMask == 0) { return; } // check for non stackable auras if (unit != Owner) { for (int i = 0; i < unit.AuraApplications.Count; i++) { if (!CanStackWith(unit.AuraApplications[i].Aura)) { return; } } } unit.Auras.ApplyAuraApplication(new AuraApplication(unit, this, auraEffectMask)); }