diff options
-rw-r--r-- | src/main.rs | 84 |
1 files changed, 3 insertions, 81 deletions
diff --git a/src/main.rs b/src/main.rs index b1e65fb..3cc85ae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -336,86 +336,8 @@ fn create_deadend<R: Rng + ?Sized>(level: &mut Level, rng: &mut R) -> Result<(), if empty { let rnd_index = rng.gen_range(0, level.rooms.len()); let room = &mut level.rooms[rnd_index]; - let room_center: (i32, i32) = ((room.x + (room.width/2)) as i32, (room.y + (room.height/2)) as i32); - let diff: (i32, i32) = (x as i32 - room_center.0, y as i32 - room_center.1); - let diff_abs: (i32, i32) = (i32::abs(diff.0), i32::abs(diff.1)); - - let mut direction = if diff_abs.1 < diff_abs.0 { - if diff.0 < 0 { Direction::Right } else { Direction::Left } - } else { - if diff.1 < 0 { Direction::Down } else { Direction::Up } - }; - - let mut steps = match direction { - Direction::Right | Direction::Left => { - rng.gen_range(0, diff_abs.0) + 1 - }, - Direction::Up | Direction::Down => { - rng.gen_range(0, diff_abs.1) + 1 - }, - Direction::None => unreachable!("direction is somehow None") - }; - - /*Only major difference*/ - /* - if 1 < steps { - steps = 2; - } - */ - - /*The tunneler subroutine is simillar to before*/ - let mut connected = false; - let mut pos = (x, y); - while !connected { - while 0 < steps { - /*TODO: Locate possible link neighbours*/ - match direction { - Direction::Up => pos.1 = pos.1 - 1, - Direction::Right => pos.0 = pos.0 + 1, - Direction::Down => pos.1 = pos.1 + 1, - Direction::Left => pos.0 = pos.0 - 1, - _ => {}, - } - let tile = level.region.get(pos.0, pos.1)?; - match tile { - Some(tile) => { - if tile.room != 9 { - connected = true; - steps = 0; - break; - } - }, - None => { - println!("SET -> {} {} to {}", pos.0, pos.1, 9); - level.region.set(pos.0, pos.1, Some(Tile { id: 1, room: 9})); - } - } - steps = steps - 1; - } - - let diff: (i32, i32) = (pos.0 as i32 - room_center.0 as i32, pos.1 as i32 - room_center.1 as i32); - let abs_diff = (i32::abs(diff.0), i32::abs(diff.1)); - - direction = if abs_diff.1 < abs_diff.0 { - if -1 < diff.0 { Direction::Left } else { Direction::Right } - } else { - if -1 < diff.1 { Direction::Up } else { Direction::Down } - }; - println!("{:?}", direction); - - steps = match direction { - Direction::Right | Direction::Left => { - let diff = i32::abs((pos.0 as i32 - room_center.0) as i32); - if diff == 0 { 1 } else { rng.gen_range(0, diff) + 1 } - }, - Direction::Up | Direction::Down => { - let diff = i32::abs((pos.1 as i32 - room_center.1) as i32); - if diff == 0 { 1 } else { rng.gen_range(0, diff) + 1 } - }, - _ => 0 - }; - } - return Ok(()); + let room_center: (u32, u32) = ((room.x + (room.width/2)), (room.y + (room.height/2))); + return tunnel(level, (x,y), room_center, 9, rng); } } @@ -506,7 +428,7 @@ fn main() { let res = connect_rooms(&mut level, 0, 1, &mut rng); let res = connect_rooms(&mut level, 1, 2, &mut rng); let res = connect_rooms(&mut level, 3, 2, &mut rng); - //create_deadend(&mut level, &mut rng); + create_deadend(&mut level, &mut rng); //create_deadend(&mut level, &mut rng); println!("{:?}", res); print_level(&level); |