Esempio n. 1
0
 public override void Attack(PlayableUnit other)
 {
     if (!CanAtack(other))
     {
         return;
     }
     other.Hp = Math.Max(0, other.Hp - Damage);
 }
Esempio n. 2
0
 /// <summary>
 ///     Определяет, может ли текущий юнит атаковать указанный юнит.
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public bool CanAtack(PlayableUnit other)
 {
     //Если атакуемый юнит жив
     return(!other.IsDead &&
            //игрок не пытается атаковать сам себя
            Player != other.Player &&
            //и координаты входят в радиус атаки - везвраащем true, иначе - false
            Math.Abs(UnitCoordinates.X - other.UnitCoordinates.X) <= MaxAttackRange &&
            Math.Abs(UnitCoordinates.Y - other.UnitCoordinates.Y) <= MaxAttackRange);
 }
Esempio n. 3
0
        public override void Attack(PlayableUnit other)
        {
            if (!CanAtack(other))
            {
                return;
            }
            int Dx = Math.Abs(UnitCoordinates.X - other.UnitCoordinates.X);
            int Dy = Math.Abs(UnitCoordinates.Y - other.UnitCoordinates.Y);

            other.Hp = Math.Max(0, other.Hp - (Dx <= 1 && Dy <= 1 ? Damage / 2 : Damage));
        }
Esempio n. 4
0
 /// <summary>
 ///     Попытаться атаковать другой играбельный юнит.
 /// </summary>
 /// <param name="other"></param>
 public abstract void Attack(PlayableUnit other);
Esempio n. 5
0
 /// <summary>
 ///     Попытка передвинуть указанный юнит на заданную клекту.
 /// </summary>
 /// <param name="target">Передвигаемый юнит.</param>
 /// <param name="x">Координата x клетки перемещения.</param>
 /// <param name="y">Координата y клетки перемещения.</param>
 public static void MoveTo(PlayableUnit target, int x, int y)
 {
     target.UnitCoordinates.X = x;
     target.UnitCoordinates.Y = y;
 }