/* Produces new drops on given columns */ private IEnumerator ProduceDrops(List <sbyte> columns, List <List <Color> > ColumnColorList) { Vector3 startPosition; float positionX, positionY; float startX = GetBoardStartCoordinateX(); sbyte t = 0; // Helps us to rotate tiles /* Specifies the beginning of drop production */ dropProductionStatus = true; /* Produce new hexagon, set variables */ foreach (sbyte i in columns) { /* Instantiate new drops and give a little delay */ positionX = startX - (DROP_DISTANCE * i); positionY = BOARD_BOTTOM + (DROP_DISTANCE * gameBoard[i].Count); startPosition = new Vector3(positionX, positionY, 0); yield return(new WaitForSeconds(DELAY_TO_PRODUCE_DROP)); TileParent.transform.GetChild(t).transform.position = new Vector3(positionX, positionY, 1); // instantiate method is expensive, so i decided to create tiles while scene is loading if (ColumnColorList[i][gameBoard[i].Count] == Color.red) { GameObject newObj = Instantiate(_redDrop, DROP_START_POSITION, Quaternion.identity, DropParent.transform); Drop newDrop = newObj.GetComponent <Drop>(); newDrop.ChangeBoardPosition(new Vector2(i, gameBoard[i].Count)); newDrop.ChangeWorldPosition(startPosition); newDrop.SetMyColor(ColumnColorList[i][gameBoard[i].Count]); gameBoard[i].Add(newDrop); } else if (ColumnColorList[i][gameBoard[i].Count] == Color.blue) { GameObject newObj = Instantiate(_blueDrop, DROP_START_POSITION, Quaternion.identity, DropParent.transform); Drop newDrop = newObj.GetComponent <Drop>(); newDrop.ChangeBoardPosition(new Vector2(i, gameBoard[i].Count)); newDrop.ChangeWorldPosition(startPosition); newDrop.SetMyColor(ColumnColorList[i][gameBoard[i].Count]); gameBoard[i].Add(newDrop); } else if (ColumnColorList[i][gameBoard[i].Count] == Color.yellow) { GameObject newObj = Instantiate(_yellowDrop, DROP_START_POSITION, Quaternion.identity, DropParent.transform); Drop newDrop = newObj.GetComponent <Drop>(); newDrop.ChangeBoardPosition(new Vector2(i, gameBoard[i].Count)); newDrop.ChangeWorldPosition(startPosition); newDrop.SetMyColor(ColumnColorList[i][gameBoard[i].Count]); gameBoard[i].Add(newDrop); } else { GameObject newObj = Instantiate(_greenDrop, DROP_START_POSITION, Quaternion.identity, DropParent.transform); Drop newDrop = newObj.GetComponent <Drop>(); newDrop.ChangeBoardPosition(new Vector2(i, gameBoard[i].Count)); newDrop.ChangeWorldPosition(startPosition); newDrop.SetMyColor(ColumnColorList[i][gameBoard[i].Count]); gameBoard[i].Add(newDrop); } t++; } /* Specifies the end of drop production */ dropProductionStatus = false; UIController.instance.ResetButton.GetComponent <Button>().interactable = true; UIController.instance.MenuButton.GetComponent <Button>().interactable = true; }