Example #1
0
    /// <summary>
    /// Spawns new food in columns that have missing ones
    /// </summary>
    /// <param name="columnsWithMissingFood"></param>
    /// <returns>Info about new foods created</returns>
    private AlteredFoodInfo CreateNewFoodInSpecificColumns(IEnumerable <int> columnsWithMissingFood)
    {
        AlteredFoodInfo newFoodInfo = new AlteredFoodInfo();

        //find how many null values the column has
        foreach (int column in columnsWithMissingFood)
        {
            var emptyItems = shapes.GetEmptyItemsOnColumn(column);
            foreach (var item in emptyItems)
            {
                var        go      = GetRandomFood();
                GameObject newFood = Instantiate(go, SpawnPositions[column], Quaternion.identity)
                                     as GameObject;

                newFood.GetComponent <Shape>().Assign(go.GetComponent <Shape>().Type, item.Row, item.Column);
                newFood.transform.localScale = new Vector3(FoodSize.x, FoodSize.y, 1.0f);

                if (Constants.Rows - item.Row > newFoodInfo.MaxDistance)
                {
                    newFoodInfo.MaxDistance = Constants.Rows - item.Row;
                }

                shapes[item.Row, item.Column] = newFood;
                newFoodInfo.AddFood(newFood);
            }
        }
        return(newFoodInfo);
    }
    /// <summary>
    /// Collapses the array on the specific columns, after checking for empty items on them
    /// </summary>
    /// <param name="columns"></param>
    /// <returns>Info about the GameObjects that were moved</returns>
    public AlteredFoodInfo Collapse(IEnumerable <int> columns)
    {
        AlteredFoodInfo collapseInfo = new AlteredFoodInfo();


        ///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 (shapes[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 (shapes[row2, column] != null)
                        {
                            shapes[row, column]  = shapes[row2, column];
                            shapes[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)
                            shapes[row, column].GetComponent <Shape>().Row    = row;
                            shapes[row, column].GetComponent <Shape>().Column = column;

                            collapseInfo.AddFood(shapes[row, column]);
                            break;
                        }
                    }
                }
            }
        }

        return(collapseInfo);
    }