public override void Attack(PlayableUnit other) { if (!CanAtack(other)) { return; } other.Hp = Math.Max(0, other.Hp - Damage); }
/// <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); }
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)); }
/// <summary> /// Попытаться атаковать другой играбельный юнит. /// </summary> /// <param name="other"></param> public abstract void Attack(PlayableUnit other);
/// <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; }