Example #1
0
            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);
            }
Example #2
0
            public void UpdateClientsideVisibility()
            {
                for (int i = unitRenderers.Count - 1; i >= 0; i--)
                {
                    if (!IsVisibleForPlayer(unitRenderers[i].Unit))
                    {
                        DetachRenderer(unitRenderers[i].Unit);
                    }
                }

                List <Unit> newVisibleUnits = ListPoolContainer <Unit> .Take();

                foreach (Unit detachedUnit in detachedUnits)
                {
                    if (IsVisibleForPlayer(detachedUnit))
                    {
                        newVisibleUnits.Add(detachedUnit);
                    }
                }

                foreach (Unit newVisibleUnit in newVisibleUnits)
                {
                    AttachRenderer(newVisibleUnit);
                }

                ListPoolContainer <Unit> .Return(newVisibleUnits);
            }
            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);
            }
Example #4
0
            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);
            }