Пример #1
0
    public void A_Star_Step()
    {
        //Get the first Element
        while (true)
        {
            QueueElementAStar Current = Queue[0];

            if (Current.Name.Equals(GetGridCharXY(EndPos.x, EndPos.y)))
            {
                Vector2 GO = GetXYFromName(Current.Name);
                float   _i = GO.x;
                float   _j = GO.y;

                for (int i = 0; i < Current.road_.Count; i++)
                {
                    Vector2 __ = GetXYFromName(Current.road_[i]);
                    grid.gridArray[(int)__[0], (int)__[1]].MySprite.GetComponent <SpriteRenderer>().sprite = State_Colors[3];
                }
                break;
            }


            Queue.RemoveAt(0);
            Debug.Log(Current.Name + "  " + GetGridCharXY(EndPos.x, EndPos.y));
            if (!(Searched.Contains(Current.Name)))
            {
                //Get its original grid node
                Vector2 GO = GetXYFromName(Current.Name);


                float _i = GO.x;
                float _j = GO.y;

                Debug.Log("THE CURRENT IS " + Current.Name + " and has i of " + _i + " and j of   " + _j);

                AddElementsToQueue(_i + 1, _j, CostsOfMove.Vertical_Cost, Current.road_);
                AddElementsToQueue(_i - 1, _j, CostsOfMove.Vertical_Cost, Current.road_);
                AddElementsToQueue(_i, _j + 1, CostsOfMove.Horizontal_Cost, Current.road_);
                AddElementsToQueue(_i, _j - 1, CostsOfMove.Horizontal_Cost, Current.road_);

                AddElementsToQueue(_i + 1, _j + 1, CostsOfMove.Diagonal_Cost, Current.road_);
                AddElementsToQueue(_i - 1, _j - 1, CostsOfMove.Diagonal_Cost, Current.road_);
                AddElementsToQueue(_i + 1, _j - 1, CostsOfMove.Diagonal_Cost, Current.road_);
                AddElementsToQueue(_i - 1, _j + 1, CostsOfMove.Diagonal_Cost, Current.road_);

                grid.gridArray[(int)_i, (int)_j].MySprite.GetComponent <SpriteRenderer>().sprite = State_Colors[2];

                Searched.Add(Current.Name);


                Queue.Sort(SortByCost);
            }
        }
    }
Пример #2
0
 public void AddElementsToQueue(float i, float j, CostsOfMove TypeOfMovement, List <char> RoadSoFar)
 {
     if ((i <= grid.gridArray.GetLength(0) - 1) && (j <= grid.gridArray.GetLength(1) - 1) && (i >= 0) && (j >= 0))
     {
         if ((grid.gridArray[(int)i, (int)j].walkable_))
         {
             float cost = grid.gridArray[(int)i, (int)j].HCost + (int)TypeOfMovement;
             char  Name = GetGridCharXY(i, j);
             if (!(Searched.Contains(Name)))
             {
                 List <char> R_ = new List <char>();
                 for (int q = 0; q < RoadSoFar.Count; q++)
                 {
                     R_.Add(RoadSoFar[q]);
                 }
                 R_.Add(Name);
                 QueueElementAStar _ = new QueueElementAStar(cost, Name, R_);
                 //_.PrintTheCurrentRoad();
                 Queue.Add(_);
                 grid.gridArray[(int)i, (int)j].MySprite.GetComponent <SpriteRenderer>().sprite = State_Colors[1];
             }
         }
     }
 }
Пример #3
0
 static int SortByCost(QueueElementAStar p1, QueueElementAStar p2)
 {
     return(p1.MyCost.CompareTo(p2.MyCost));
 }