// Method to create Horizontal/Vertical grid lines and walls bLine[,] partialGrid(int rows, int col) { bLine[,] pgrid = new bLine[rows, col];//multiD array of GO in which output array will be stored implies that grid-V has to be formed if (rows < col) {//grid-V for (int i=0; i<rows; i++) { for (int j=0; j<col; j++) { pgrid [i, j].toggle = new Toggle (true); Vector3 pos = new Vector3 (-10 * (float)S/2 + 20 * j, 35f, 5f * S - 20 * (i+1)+10); pgrid [i, j].Baseline = formBline (pos, Quaternion.Euler (0f, 90f, 0f)); pgrid [i, j].toggle.val = true; pgrid [i, j].wall = formWall (pos, Quaternion.Euler (0f, 90f, 0f));// Instead of iterating through new loops we shall construct walls and toggle on/off values on BLines simultaneuosly. } } } else {//grid-H for (int i=0; i<rows; i++) { for (int j=0; j<col; j++) { pgrid [i, j].toggle = new Toggle (true); Vector3 pos = new Vector3 (-5f * S + 20 * (j+1)-10, 35f, 5f * S - 20 * i); pgrid [i, j].Baseline = formBline (pos, Quaternion.identity); pgrid [i, j].toggle.val = true; pgrid [i, j].wall = formWall (pos + Vector3.up, Quaternion.identity); } } } return pgrid; }
// Function to merge any 2 cells given their line of intersection void merge_cells(cell cell1, cell cell2, bLine comm_bline, cell[,] cells) { int i1 = cell1.set.index, i2 = cell2.set.index; if (i1 > i2) merge_cells (cell2, cell1, comm_bline, cells); else { if(comm_bline.toggle.val && cell1.break_wall){ Destroy(comm_bline.Baseline); Destroy(comm_bline.wall); comm_bline.toggle.val = false; } cell2.break_wall = false; if(cell2.set.index != cell1.set.index){ cell2.set.index = i1; int N = cell2.cell_count; int i, j; i = (N-1) / S; if(N % S != 0) j = N % S - 1; else j = S - 1; if(i > 0){ if(cells[i-1, j].set.index == i2) merge_cells(cell2, cells[i-1, j], cell2.a_bline, cells); } if(j < S-1){ if(cells[i, j+1].set.index == i2) merge_cells(cell2, cells[i, j+1], cell2.r_bline, cells); } if(j > 0){ if(cells[i, j-1].set.index == i2) merge_cells(cell2, cells[i, j-1], cell2.l_bline, cells); } if(i < S-1){ if(cells[i+1, j].set.index == i2) merge_cells(cell2, cells[i+1, j], cell2.b_bline, cells); } cell2.break_wall = true; } // System.String s = string.Format("{0}, {1} : {2}", i, j, is_down[cells[i,j].set.index - 1].reply); // Debug.Log(s); } }