Example #1
0
    public static void Apply(Level level, Parameters parameters, int seed)
    {
        var stopwatch = new System.Diagnostics.Stopwatch();

        stopwatch.Start();

        BSPAlgorithm bsp = new BSPAlgorithm();

        bsp.m_minNodeSize = new Vector2Int(level.Grid.Tiles.GetLength(0) / parameters.MinNumRooms, level.Grid.Tiles.GetLength(1) / parameters.MinNumRooms);
        //Random.InitState(seed);

        var root = new Node(level.Grid.Tiles);

        bsp.DivideGrid(level.Grid, root);

        level.Rooms = new HashSet <Tile[, ]>();
        var roomGenerator = new RoomGenerator(level, new Vector2Int(parameters.MinRoomWidth, parameters.MinRoomHeight));

        roomGenerator.PlaceRooms(root);

        var corridorGenerator = new CorridorGenerator(level.Grid, parameters.CorridorType);

        corridorGenerator.PlaceCorridors(root);

        stopwatch.Stop();
        Debug.Log("BSPAlgorithm took " + stopwatch.ElapsedMilliseconds + " milliseconds to complete.");
    }
Example #2
0
    void Awake()
    {
        var level = new Level(GridSize);

        BSPAlgorithm.Apply(level, BSPAlgorithm.Parameters.Default, 100);
        Random.InitState((int)System.DateTime.Now.Ticks);
        render.Init(level.Grid.Tiles, GridSize);
    }
Example #3
0
    // Use this for initialization
    void Start()
    {
        var level = new Level(GridSize);

        BSPAlgorithm.Apply(level, BSPAlgorithm.Parameters.Default, 100);

        Tile firstFloor  = null;
        Tile secondFloor = null;

        int count = 0;

        //Random.InitState(563534); // 4-5 ms
        //Random.InitState(10000); //23 ms
        // Random.InitState(2342452);  //31 ms

        Random.InitState((int)System.DateTime.Now.Ticks);
        while (true)
        {
            var tile = level.Grid.Tiles[Random.Range(0, level.Grid.Tiles.GetLength(0) - 1), Random.Range(0, level.Grid.Tiles.GetLength(1) - 1)];
            if (tile.Type == Tile.Types.Floor)
            {
                firstFloor = tile;
                break;
            }
            count++;

            if (count == 1000)
            {
                break;
            }
        }

        count = 0;
        while (true)
        {
            var tile = level.Grid.Tiles[Random.Range(0, level.Grid.Tiles.GetLength(0) - 1), Random.Range(0, level.Grid.Tiles.GetLength(1) - 1)];

            if (tile.Type == Tile.Types.Floor)
            {
                secondFloor = tile;
                break;
            }

            count++;

            if (count == 1000)
            {
                break;
            }
        }

        AStarAlgorithm pathfinding = new AStarAlgorithm();

        var path = pathfinding.GetPath(firstFloor, secondFloor);

        foreach (var item in path)
        {
            //item.GetToNode.Node.attached.GetComponent<SpriteRenderer>().color = Color.red;
        }
        render.Init(level.Grid.Tiles, GridSize);
    }