Beispiel #1
0
 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;
         }
     }
 }
Beispiel #2
0
 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);
         }
     }
 }