/// <summary> /// Tries the apply effect. /// </summary> /// <param name="effect">The effect.</param> /// <returns> /// <c>true</c> if the effect was applied successfully; otherwise, <c>false</c>. /// </returns> /// <exception cref="ArgumentNullException">effect</exception> public bool TryApplyEffect(IEffect effect) { if (effect == null) { throw new ArgumentNullException(nameof(effect)); } if (!IsAllowedToUse(effect)) { return(false); } var oldEffect = effects.FirstOrDefault(alreadyEffect => effectsComparer.Equals(alreadyEffect, effect)); if (oldEffect != null) { DestroyEffect(oldEffect); } effect.ApplyTo(unit, DestroyEffect); effects.Add(effect); return(true); }