public void EnemyMovement(Unit enemyUnit) { //найти врага, если есть, то идти к нему и бить, иначе идти куда-то рандомно while (enemyUnit.AP > 0) { Pathfinder path = new Pathfinder(enemyUnit.Position, _map); var unitList = _playerUnits.Where(item => item.Seen && path.DistanceBetweenVertex(item.Position) < 3); if (unitList.Any()) { var targetUnit = unitList.First(); while (enemyUnit.AP > 0) { if ((path.DistanceBetweenVertex(targetUnit.Position) <= enemyUnit.RangeOfAttack) && (enemyUnit.AP > 0)) { AttackUnit(enemyUnit, targetUnit); --enemyUnit.AP; } else if (enemyUnit.AP > 0) { MoveUnit(enemyUnit, path.PathToVertex(targetUnit.Position).First()); --enemyUnit.AP; } } } else { List<int> vertex = _map.Location[enemyUnit.Position].GetAvailebleVertex(); MoveUnit(enemyUnit, vertex[new Random().Next(0, vertex.Count)]); --enemyUnit.AP; } } }
public void AttackUnit(Unit aggressiveUnit, Unit defendingUnit) { Pathfinder tempPath = new Pathfinder(aggressiveUnit.Position, _map); if (tempPath.DistanceBetweenVertex(defendingUnit.Position) <= aggressiveUnit.RangeOfAttack)//если атакующий может достать до цели { if (defendingUnit.SetDamage(aggressiveUnit.Damage))//получение урона и проверка жизнь/смерть { _map.Location[defendingUnit.Position].AmountOfUnits--; int tempPosition = defendingUnit.Position; if (defendingUnit.Fraction == UnitFraction.Player) { _playerUnits.Remove(defendingUnit); } else { _enemyUnits.Remove(defendingUnit); } ChengeStateOfVertex(tempPosition); } } }