//Swap blocks to empty cells public void MoveBlocksToEmptyCell() { int emptyCount = 0; do { for (int i = 0; i < _config.fieldWidth; i++) { for (int j = 0; j < _config.fieldHeight; j++) { if (_gamefield[i, j] == null) { if (j == 0) // If top block - getting new block from pool { _gamefield[i, j] = _pool.GetBlock(); _gamefield[i, j].block.transform.position = new Vector3(i * BLOCK_SIZE, j * BLOCK_SIZE); GetColor(_gamefield[i, j], i, j); _gamefield[i, j].block.SetActive(true); } else // Swaping blocks { SwapBlocks(i, j, false, -1); } } } } emptyCount = GetEmptyCount(true); } while (emptyCount != 0); }
//Init public GameField(Config config, IPool pool) { _config = config; _pool = pool; //Generate random colors _colors = new Color[config.countOfColors]; GenerateColors(config.countOfColors); //generate base field structure and checking colors _gamefield = new Block[config.fieldWidth, config.fieldHeight]; for (int i = 0; i < config.fieldWidth; i++) { for (int j = 0; j < config.fieldHeight; j++) { _gamefield[i, j] = _pool.GetBlock(); _gamefield[i, j].block.transform.position = new Vector3(i * BLOCK_SIZE, -j * BLOCK_SIZE); GetColor(_gamefield[i, j], i, j); _gamefield[i, j].block.SetActive(true); } } //Set camera to center based on blocks count Camera.main.transform.position = new Vector3(_gamefield[(int)config.fieldWidth / 2, (int)config.fieldHeight / 2].block.transform.position.x, _gamefield[(int)config.fieldWidth / 2, (int)config.fieldHeight / 2].block.transform.position.y, Camera.main.transform.position.z); Camera.main.fieldOfView = config.fieldWidth * 90 / 10; }