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); } } }
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]; } } } }
static int SortByCost(QueueElementAStar p1, QueueElementAStar p2) { return(p1.MyCost.CompareTo(p2.MyCost)); }