aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Pasquet <dev@etenil.net>2019-11-18 06:16:33 +0000
committerGuillaume Pasquet <dev@etenil.net>2019-11-18 06:16:33 +0000
commitcb61c55ae7394557359fde443d4568780401428c (patch)
tree4b47b09d45a42b6b799eefb67acb5cb1cbd0eb90
parent057ca8bf3485b1d3b4d41e186780b9ee4d689f3c (diff)
Better looking, simpler corridors
-rw-r--r--src/world.rs26
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),
};