diff options
Diffstat (limited to 'dungeon/src/bsp.rs')
| -rw-r--r-- | dungeon/src/bsp.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/dungeon/src/bsp.rs b/dungeon/src/bsp.rs index 09b4433..905b29b 100644 --- a/dungeon/src/bsp.rs +++ b/dungeon/src/bsp.rs @@ -288,7 +288,7 @@ fn carve_v_corridor(tiles: &mut [Tile; TILE_COUNT], y1: u16, y2: u16, x: u16) { /// Top-level generator function for the dungeon using BSP. /// Returns a `Floor` -pub fn generate(seed: u64, mut rng: SmallRng) -> Floor { +pub fn generate(rng: &mut SmallRng) -> Floor { // Initialize all tiles to walls let mut tiles_box: Box<[Tile; TILE_COUNT]> = Box::new([Tile::Wall; TILE_COUNT]); @@ -332,7 +332,7 @@ pub fn generate(seed: u64, mut rng: SmallRng) -> Floor { // TODO: Store nodes in smart pointers to avoid unsafe? let node = unsafe { &mut *node_ptr }; // Attempt to split if possible - if node.split(&mut rng) { + if node.split(rng) { splitted_any = true; } } @@ -344,7 +344,7 @@ pub fn generate(seed: u64, mut rng: SmallRng) -> Floor { } // Create rooms in all leaves - root.create_room(&mut rng); + root.create_room(rng); // Carve all rooms into the tile array let mut leaves = vec![]; @@ -356,7 +356,7 @@ pub fn generate(seed: u64, mut rng: SmallRng) -> Floor { } // Collect corridors (pairs of centers) by connecting children bottom-up - let corridors = root.connect_children(&mut rng); + let corridors = root.connect_children(rng); // Carve corridors. For each corridor (x1,y1,x2,y2), carve straight or L-shape. for (left_point, right_point) in corridors { @@ -382,20 +382,20 @@ pub fn generate(seed: u64, mut rng: SmallRng) -> Floor { // Choose player start randomly in the center of one of the rooms (leaf nodes) let mut leaves = vec![]; root.collect_leaves(&mut leaves); - let player_room = leaves.choose(&mut rng).unwrap_or(&leaves[0]); + let player_room = leaves.choose(rng).unwrap_or(&leaves[0]); let player_start = player_room.room_center(); // Set one tile to Stairs (exit) in a random room different from player start let mut exit_room = player_room; while exit_room == player_room { - exit_room = leaves.choose(&mut rng).unwrap_or(&leaves[0]); + exit_room = leaves.choose(rng).unwrap_or(&leaves[0]); } let exit_pos = exit_room.room_center(); let exit_idx = exit_pos.xy().0 + exit_pos.xy().1 * MAP_SIZE; tiles_box[exit_idx as usize] = Tile::Stairs; // Return components turned into a `Floor` - Floor::from_parts(tiles_box, player_start, seed, rng) + Floor::new(tiles_box, player_start) } /// BSP Unit Tests @@ -468,8 +468,8 @@ mod tests { #[test] fn test_generate() { let seed = 12345u64; - let rng = SmallRng::seed_from_u64(seed); - let floor = generate(seed, rng); + let mut rng = SmallRng::seed_from_u64(seed); + let floor = generate(&mut rng); // Check that tiles contain some Room tiles let room_count = floor.tiles().iter().filter(|&&t| t == Tile::Room).count(); assert!(room_count > 0); |