/* 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;
    }