Example #1
0
    /// <summary>
    /// Generates a level given the properties defined by its member variables.
    /// </summary>
    /// <param name="startPosition">The center position of the first cell in the level grid.</param>
    /// <param name="startCellAnchor">The position of the first cell, relative to the grid. .</param>
    /// <param name="endCellAnchor">The position to which the last cell of the grid is anchored (i.e., is the final
    /// cell at the top, bottom, left or right of the grid?) </param>
    public void GenerateLevel(Vector2 startCellPosition, CellAnchor startCellAnchor, CellAnchor endCellAnchor)
    {
        if (paused)
        {
            return;
        }

        // Store the given arguments in their respective member variables
        this.startCellPosition = startCellPosition;
        this.startCellAnchor   = startCellAnchor;
        this.endCellAnchor     = endCellAnchor;

        // Create the level grid which stores the GameObjects and cell information for all cells in the level.
        grid = new LevelCell[rows, columns];

        // Set the seed for the random number generator. Ensures that, given the same seed, the same level will be reproduced.
        Random.seed = this.seed;

        // Compute and store the (row,column) coordinates of the starting/ending cells of the level grid.
        startCellCoordinates = ComputeStartCellCoordinates();
        endCellCoordinates   = ComputeEndCellCoordinates();

        // Create the GameObject which will act as a parent to every GameObject in the level.
        levelHolder = new GameObject("Level").transform;

        Debug.Log("Branch Navigator: " + branchNavigator.ToString());

        // Generate the golden path for the level. This is the main road that leads from start to finish.
        GenerateGoldenPath();

        Debug.Log("Branch Navigator: " + branchNavigator.ToString());

        // Generate the branches in the level maze. These are divergences in the maze that lead to nowhere
        GenerateBranches();

        Debug.Log("Branch Navigator: " + branchNavigator.ToString());

        // Iterate through the level grid and populate all the non-occupied cells with obstacles.
        GenerateObstacleCells();

        // Generates the level cells which close off the level.
        GenerateBoundaries();

        // Update the 'vertical/horizontalBounds' variables to store the positional bounds of the level.
        UpdateVerticalBounds();
        UpdateHorizontalBounds();
    }