public bool Compute(int originX, int originY, int destX, int destY) { OriginX = originX; OriginY = originY; DestinationX = destX; DestinationY = destY; Nodes.Clear(); OpenList.Clear(); if (originX == destX && originY == destY) { return(true); } var originOutsideMap = !IsValid(OriginX, OriginY); var destOutsideMap = !IsValid(DestinationX, DestinationY); if (originOutsideMap || destOutsideMap) { return(false); } if (!Map.Tiles[OriginX, OriginY].Walkable || !Map.Tiles[DestinationX, DestinationY].Walkable) { return(false); } InitializeGrid(ClosedList, false, Width, Height); InitializeCellDetails(); OpenList.Add(new NodeScore(0, new Point(OriginX, OriginY))); while (OpenList.Count != 0) { var nodeScore = OpenList[0]; OpenList.RemoveAt(0); var x = nodeScore.Location.X; var y = nodeScore.Location.Y; ClosedList[x, y] = true; if (ProcessCell(x, y, NorthEast, DiagonalCost)) { break; } if (ProcessCell(x, y, North, 1)) { break; } if (ProcessCell(x, y, NorthWest, DiagonalCost)) { break; } if (ProcessCell(x, y, East, 1)) { break; } if (ProcessCell(x, y, West, 1)) { break; } if (ProcessCell(x, y, SouthEast, DiagonalCost)) { break; } if (ProcessCell(x, y, South, 1)) { break; } if (ProcessCell(x, y, SouthWest, DiagonalCost)) { break; } } return(true); }