private CollapseTiles CreateNewTileInSpecificColumns(IEnumerable<int> columnsWithMissingTile) { CollapseTiles newTileInfo = new CollapseTiles(); foreach (int column in columnsWithMissingTile) { var emptyItems = board.GetAllEmptyInColumn(column); foreach (var item in emptyItems) { var go = randomTile(); GameObject newTile = Instantiate(go, SpawnPositions[column], Quaternion.identity) as GameObject; newTile.GetComponent<TileInfo>().assign(go.GetComponent<TileInfo>().type, item.row, item.column); if (Constants.rows - item.row > newTileInfo.maxDistance) { newTileInfo.maxDistance = Constants.rows - item.row; } board[item.row, item.column] = newTile; NetworkServer.Spawn(newTile); newTileInfo.addTile(newTile); } } return newTileInfo; }
public CollapseTiles Collapse(IEnumerable<int> columns) { CollapseTiles collapseInfo = new CollapseTiles(); ///search in every column foreach (var column in columns) { //begin from bottom row for (int row = 0; row < Constants.rows - 1; row++) { //if you find a null item if (grid[row, column] == null) { //start searching for the first non-null for (int row2 = row + 1; row2 < Constants.rows; row2++) { //if you find one, bring it down (i.e. replace it with the null you found) if (grid[row2, column] != null) { grid[row, column] = grid[row2, column]; grid[row2, column] = null; //calculate the biggest distance if (row2 - row > collapseInfo.maxDistance) collapseInfo.maxDistance = row2 - row; //assign new row and column (name does not change) grid[row, column].GetComponent<TileInfo>().row = row; grid[row, column].GetComponent<TileInfo>().column = column; collapseInfo.addTile(grid[row, column]); break; } } } } } return collapseInfo; }