private void RefillBoard() { int[,] refillMatrix = new int[m_horizontalSize, m_verticalSize]; int[] candiesToSpawn = new int[m_horizontalSize]; for (int i = 0; i < m_horizontalSize; i++) { for (int j = 0; j < m_verticalSize; j++) { if (m_board[i, j] == null) { int lowerPosition = j; int k = 1; while (j + k < m_verticalSize && m_board[i, j + k] == null) { k++; } for (int l = j + k; l < m_verticalSize; l++) { refillMatrix[i, l] -= k; } candiesToSpawn[i] += k; j += k - 1; } } } for (int i = 0; i < m_horizontalSize; i++) { for (int j = 0; j < m_verticalSize; j++) { if (refillMatrix[i, j] < 0 && m_board[i, j]) { m_board[i, j].MoveDown(new Vector2Int(i, j + refillMatrix[i, j]), refillMatrix[i, j] * m_distanceUnits); m_board[i, j + refillMatrix[i, j]] = m_board[i, j]; } } for (int j = 0; j < candiesToSpawn[i]; j++) { Candy prefabToInstantiate = m_candyPrefabsDictonary.Values.ToList()[Random.Range(0, m_candyPrefabsDictonary.Count())][RandomCandyTypeIndex()]; Candy candy = InstatiateCandyAtPosition(prefabToInstantiate, m_startSpawnPosition + new Vector2(i * m_distanceUnits, (m_verticalSize + j) * m_distanceUnits)); int verticalIndex = m_verticalSize - candiesToSpawn[i] + j; candy.SetUp(); m_board[i, verticalIndex] = candy; candy.MoveDown(new Vector2Int(i, verticalIndex), -(candiesToSpawn[i]) * m_distanceUnits); } } }