public void CreateMinion(Tower tower)
        {
            if (ActiveMinions[tower.Side].Count(m => !m.IsDisposed) >= MaxMinions) return;

            var minion = new Minion(tower.Side, tower.Position +
                new Vector2(ConvertUnits.ToSimUnits(SpawnOffsetX*(tower.Side == Side.Heart?-1:1)),
                    ConvertUnits.ToSimUnits(SpawnOffsetY)), this);

            minion.Died += (s, e) => RemoveMinion(minion);
            ActiveMinions[tower.Side].Add(minion);
        }
 public virtual void Attack(Tower tower)
 {
     if (_timeSinceLastAttack < AttackTime + AttackDelay) return;
     if ((Direction < 0 && tower.Position.X - Position.X < 0) || (Direction > 0 && tower.Position.X - Position.X > 0) &&
         Math.Abs(Position.X - tower.Position.X) < AttackRange)
     {
         _timeSinceLastAttack = 0;
         Action = "attack";
         tower.Hurt(AttackDamage);
     }
 }