/// <summary> /// Проверить, может ли один юнит атаковать другого. /// </summary> /// <param name="attackingUnit">Юнит, который собирается совершить атаку.</param> /// <param name="targetUnit">Юнит, который является целью.</param> /// <returns> /// <see langvalue="true" />, если атака возможна /// <see langvalue="false" /> - иначе. /// </returns> public bool CanAttackUnit(object attackingUnit, object targetUnit) { //если хотя бы один из участников не я/я играбельным юнитом - исключение if (!(targetUnit is PlayableUnit TargetPlayableUnit) || !(attackingUnit is PlayableUnit AttackingPlayableUnit)) { throw new ArgumentException("Неизвестный тип"); } //возвращаем да, если атакующий игрок не пытается ударить сам себя и если может атаковать цель return(AttackingPlayableUnit.CanAtack(TargetPlayableUnit)); }
/// <summary> /// Атаковать указанного юнита. /// </summary> /// <param name="attackingUnit">Юнит, который собирается совершить атаку.</param> /// <param name="targetUnit">Юнит, который является целью.</param> public void AttackUnit(object attackingUnit, object targetUnit) { if (!CanAttackUnit(attackingUnit, targetUnit)) { return; } if (!(attackingUnit is PlayableUnit AttackingPlayableUnit) || !(targetUnit is PlayableUnit TargetPlayableUnit)) { throw new ArgumentException("Неизвестный тип"); } AttackingPlayableUnit.Attack(TargetPlayableUnit); }