private void GenerateMap() { TileBase[] tileBases = new TileBase[size * size]; labGrid = new LabGrid(size, size, 1f); //int row = 0; //for (int i = 0; i < tileBases.Length; i++) //{ // if (i < size || i == size * (row - 1) || i == size * row - 1 || i > size * size - size) // { // tileBases[i] = wallTile; // labGrid.grid[i / size, i - size * row] = 1; // } // else if (i == size * 2 - 2) // tileBases[i] = finishTile; // else if (i == size * size - size * 2 + 1) // tileBases[i] = characterTile; // else // tileBases[i] = pathTile; // if (i == size * row) row++; //} tileMap.size = new Vector3Int(size, size, 1); tileMap.origin = new Vector3Int(0, 0, 0); tileMap.ResizeBounds(); BoundsInt bounds = tileMap.cellBounds; for (int x = 0; x < bounds.size.x; x++) { for (int y = 0; y < bounds.size.y; y++) { if (x == 0 || y == 0 || x == size - 1 || y == size - 1) { tileBases[x + y * bounds.size.x] = wallTile; labGrid.grid[x, y] = 1; } else if (x == size - 2 && y == 1) { tileBases[x + y * bounds.size.x] = finishTile; labGrid.grid[x, y] = 2; } else if (x == 1 && y == size - 2) { tileBases[x + y * bounds.size.x] = characterTile; } else { tileBases[x + y * bounds.size.x] = pathTile; } } } tileMap.SetTilesBlock(tileMap.cellBounds, tileBases); DeleteTileMapFlags(); Camera.main.transform.position = new Vector3(tileMap.size.x / 2, tileMap.size.y / 2, -10); Camera.main.orthographicSize = tileMap.size.x / 2 + tileMap.size.x / 4; }
public static bool FindPath(LabGrid labGrid, Vector2Int start, Vector2Int finish) { int[,] grid = labGrid.grid; MinHeap nodes = new MinHeap(); Node startNode = new Node(null, start.x, start.y); Evaluate(startNode, finish); nodes.Insert(startNode); int[,] visited = new int[labGrid.width, labGrid.height]; visited[startNode.x, startNode.y] = 1; bool found = false; Node node = new Node(); while (nodes.list.Count > 0 && !found) { node = nodes.PullMin(); if (node.x == finish.x && node.y == finish.y) { found = true; break; } List <Node> neighbours = new List <Node>(); PopulateNeighbours(node, neighbours); foreach (Node item in neighbours) { if (item.x >= 0 && item.y >= 0 && item.x < labGrid.width && item.y < labGrid.height && (grid[item.x, item.y] == 0 || grid[item.x, item.y] == 2)) { if (visited[item.x, item.y] == 0) { Evaluate(item, finish); GiveWeight(item); nodes.Insert(item); visited[item.x, item.y] = 1; } } } } if (found) { return(true); } else { return(false); } }