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."); }
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); }
// 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); }