Ejemplo n.º 1
0
        private List<Unit> _enemyUnits;//List<IUnit> _enemyUnits;

        public void MoveUnit(Unit unit, int newPosition)
        {
            if ((_map.Location[unit.Position].IsAvailableVertex(newPosition)) && (unit.AP > 0))
            {
                _map.Location[unit.Position].AmountOfUnits--;
                int tempPosition = unit.Position;
                unit.Move(newPosition);
                ChengeStateOfVertex(tempPosition);
                _map.Location[unit.Position].AmountOfUnits++;
                ChengeStateOfVertex(unit.Position);

                //если юнит ассасин, то проверить освещение
                if (unit.Type == UnitType.Assassin)
                {
                    if (_map.Location[unit.Position].Light)
                    {
                        unit.Visible = true;
                    }
                    else
                    {
                        unit.Visible = false;
                    }
                }

                //var temp = _enemyUnits.Where(item => item.Type == 3 && item.Fraction == 2);
                //var temp =  _unitsEnemy.Where(item => item.Type == 3);
                //foreach (var singleUnit in temp)
                //{   
                //}
                
                //если есть враги, то юнит их заметил
                //смотрим кто есть на соседних вершинах
                List<int> tempVertex = _map.Location[unit.Position].GetAvailebleVertex();
                foreach (var numVertex in tempVertex)
                {
                    if (unit.Fraction == UnitFraction.Player)
                    {
                        //делаем врагов видимыми
                        var temp = _enemyUnits.Where(item => item.Position == numVertex);
                        foreach (var curUnit in temp)
                        {
                            curUnit.NeedDraw = true;
                        }
                    }
                    else
                    {
                        var temp = _playerUnits.Where(item => item.Position == numVertex);
                        foreach (var curUnit in temp)
                        {
                            curUnit.Seen = true;
                        }
                    }
                } 
            }
        }
Ejemplo n.º 2
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;
         }
     }
 }
Ejemplo n.º 3
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);
         }
     }
 }