public void SearchInRange(HexCell cell, int range, int action) { for (int i = 0; i < cells.Length; i++) { cells[i].Distance = int.MaxValue; cells[i].DisableValidation(); } Queue <HexCell> frontier = new Queue <HexCell>(); cell.Distance = 0; frontier.Enqueue(cell); while (frontier.Count > 0) { HexCell current = frontier.Dequeue(); current.EnableValidation(Color.yellow); for (HexDirection d = HexDirection.NE; d <= HexDirection.NW; d++) { HexCell neighbor = current.GetNeighbor(d); if (neighbor == null || neighbor.Distance != int.MaxValue) { continue; } if (current.GetEdgeType(neighbor) == HexEdgeType.Cliff && action == 0) { continue; } if (current.Distance > (range - 1)) { break; } neighbor.Distance = current.Distance + 1; frontier.Enqueue(neighbor); } } }