diff options
author | Guillaume Pasquet <dev@etenil.net> | 2019-11-18 06:16:33 +0000 |
---|---|---|
committer | Guillaume Pasquet <dev@etenil.net> | 2019-11-18 06:16:33 +0000 |
commit | cb61c55ae7394557359fde443d4568780401428c (patch) | |
tree | 4b47b09d45a42b6b799eefb67acb5cb1cbd0eb90 | |
parent | 057ca8bf3485b1d3b4d41e186780b9ee4d689f3c (diff) |
Better looking, simpler corridors
-rw-r--r-- | src/world.rs | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/src/world.rs b/src/world.rs index 369fd59..b0be50a 100644 --- a/src/world.rs +++ b/src/world.rs @@ -323,21 +323,6 @@ impl Level { false } - fn room_distances(&self, point: Point) -> Vec<(usize, f32)> { - let mut dists: Vec<(usize, f32)> = self - .rooms - .iter() - .enumerate() - .map(|(room_num, room): (usize, &Room)| -> (usize, f32) { - (room_num, distance(point, room.center)) - }) - .collect(); - dists.sort_by(|(_, dista): &(usize, f32), (_, distb): &(usize, f32)| { - dista.partial_cmp(&distb).unwrap() - }); - dists - } - fn random_room(&self) -> Result<Room, String> { // TODO: Detect when not enough space is left to allocate a room. let mut rng = rand::thread_rng(); @@ -391,12 +376,15 @@ impl Generatable for Level { } // Generate corridors - for room in &self.rooms { + for (i, room) in self.rooms.iter().enumerate() { // Find the nearest room. - let distances = self.room_distances(room.center); - let nearest_room = &self.rooms[distances[1].0]; + let next_room = if i == self.rooms.len() - 1 { + &self.rooms[0] + } else { + &self.rooms[i + 1] + }; - match Corridor::link(room.center, nearest_room.center) { + match Corridor::link(room.center, next_room.center) { Ok(mut cor) => self.corridors.append(&mut cor), Err(e) => println!("{}", e), }; |