summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Blajda <blajda@hotmail.com>2019-08-22 12:51:08 +0000
committerDavid Blajda <blajda@hotmail.com>2019-08-22 12:51:08 +0000
commit71a2e56d0fd9aa5b1f62fe5c41dee6551107c840 (patch)
treef2a8b92bee77f040821ce6a700510c171ed0aacd
parent71ed048e2c4bd1da2e21e7285ca5fd58e195975b (diff)
:WIP: modify tunelling for deadends
-rw-r--r--src/main.rs84
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);