summaryrefslogtreecommitdiff
path: root/dungeon/src/bsp.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dungeon/src/bsp.rs')
-rw-r--r--dungeon/src/bsp.rs18
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);