public ProcessedAttack RunAttack(Unit attacker, Unit defender)
        {
            var attack          = CalculateAttack(attacker);
            var processedAttack = AttackProcessor.ProcessAttack(attack, defender.Stats);

            defender.ApplyDamageToTarget(processedAttack);
            return(processedAttack);
        }
        public async Task <bool> ExecuteSpell(Spell spell, Vector2 target)
        {
            var unit = Level.GetUnitAt(target);

            if (unit == null)
            {
                return(false);
            }

            var stats           = StatsComputer.ComputeStats(spell.Effects.ToArray());
            var attack          = AttackGenerator.GenerateAttack(stats);
            var processedAttack = AttackProcessor.ProcessAttack(attack, unit.Unit.Stats);

            unit.Unit.ApplyDamageToTarget(processedAttack);
            return(true);
        }