Exemple #1
0
        /// <summary>
        /// Applies the effects of a DelayedAbility to all of its targets.
        /// </summary>
        /// <param name="ability">The DelayedAbility to apply.</param>
        /// <param name="targets">The CombatEntity targets of the DelayedAbility.</param>
        private void ApplyEffects(DelayedAbility ability, IEnumerable <CombatEntity> targets)
        {
            foreach (var target in targets)
            {
                var damage  = DamageCalculator.GetTotalDamage(ability.StoredDamage, target);
                int healing = ability.StoredHealing;
                healing += target.Resources.MaxHealth * ability.BaseAbility.PercentHeal / 100;

                target.Resources.CurrentHealth += healing;
                target.Resources.CurrentHealth -= DamageCalculator.GetDamageTypesAsInt(damage);
                if (target.Resources.CurrentHealth > 0)
                {
                    _statusEffectManager.Apply(target, ability.Actor, ability.BaseAbility.AppliedStatusEffects, ability.IsCrit);
                }
                else
                {
                    _statusEffectManager.RemoveAll(target);
                }
            }

            if (ability.BaseAbility.SelfAppliedStatusEffects.Any())
            {
                _statusEffectManager.Apply(ability.Actor, ability.Actor, ability.BaseAbility.SelfAppliedStatusEffects, ability.IsCrit);
            }
        }
Exemple #2
0
        /// <summary>
        /// Activates the effects of a DelayedAbility on its target formation, returning an IEnumerable of
        /// CombatEntities affected by the DelayedAbility.
        /// </summary>
        /// <param name="ability">The DelayedAbility to activate the effects of.</param>
        /// <returns></returns>
        public IEnumerable <CombatEntity> PerformDelayedAbility(DelayedAbility ability)
        {
            var affectedEntities = new List <CombatEntity>();
            var targetPosition   = ability.TargetPosition;

            if (ability.BaseAbility.IsPositionStatic)
            {
                targetPosition = ability.BaseAbility.CenterOfTargets;
            }

            var targets = FormationTargeter.GetTargets(ability.BaseAbility, targetPosition, ability.TargetFormation);

            if (targets == null || targets.Count() == 0)
            {
                return(affectedEntities);
            }

            ApplyEffects(ability, targets);

            return(targets);
        }