Пример #1
0
    // 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;
    }
Пример #2
0
 // 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);
     }
 }