rust/landgen/src/maze.rs
branchtransitional_engine
changeset 16062 1860852892c0
parent 16061 31cc1e450273
child 16063 09beeec033ba
--- a/rust/landgen/src/maze.rs	Tue Sep 10 13:56:51 2024 +0200
+++ b/rust/landgen/src/maze.rs	Tue Sep 10 18:21:31 2024 +0200
@@ -4,12 +4,12 @@
 use land2d::Land2D;
 
 pub struct MazeTemplate {
-    width: usize,
-    height: usize,
-    cell_size: usize,
-    inverted: bool,
-    distortion_limiting_factor: u32,
-    braidness: usize,
+    pub width: usize,
+    pub height: usize,
+    pub cell_size: usize,
+    pub inverted: bool,
+    pub distortion_limiting_factor: u32,
+    pub braidness: usize,
 }
 
 pub struct MazeLandGenerator {
@@ -48,7 +48,7 @@
         let mut step_done = vec![false; num_steps];
         let mut last_cell = vec![Point::diag(0); num_steps];
         let mut came_from_pos = vec![0; num_steps];
-        let mut came_from = vec![vec![Point::diag(0); num_cells.area()]; num_steps];
+        let mut came_from = vec![vec![Point::diag(0); num_steps]; num_cells.area()];
 
         let mut done = false;
         let mut seen_list = vec![vec![None as Option<usize>; seen_cells.width]; seen_cells.height];
@@ -66,22 +66,21 @@
                 / num_steps;
             last_cell[current_step] = Point::new(
                 (x + current_step * seen_cells.width / num_steps) as i32,
-                random_numbers.next().unwrap_or_default() as i32 / num_steps as i32,
+                random_numbers.next().unwrap_or_default() as i32 % seen_cells.height as i32,
             );
         }
 
         let see_cell = |current_step: usize, start_dir: Point, seen_list: &mut Vec<Vec<Option<usize>>>, x_walls: &mut Vec<Vec<bool>>, y_walls: &mut Vec<Vec<bool>>,
                         last_cell: &mut Vec<Point>, came_from: &mut Vec<Vec<Point>>, came_from_pos: &mut Vec<i32>| {
+            let mut dir = start_dir;
             loop {
-                let p = last_cell[current_step];
-                seen_list[p.y as usize][p.x as usize] = Some(current_step);
-
-                let mut dir = start_dir;
+                let p = dbg!(last_cell[current_step]);
+                seen_list[p.y as usize][p.x as usize] = Some(dbg!(current_step));
 
                 let next_dir_clockwise = true;//random_numbers.next().unwrap_or_default() % 2 == 0;
 
                 for _ in 0..5 {
-                    let sp = p + dir;
+                    let sp = dbg!(p) + dbg!(dir);
                     let when_seen =
                         if sp.x < 0
                             || sp.x >= seen_cells.width as i32
@@ -130,9 +129,10 @@
                             if dir.x == 1 {
                                 y_walls[p.y as usize][p.x as usize] = false;
                             }
-                            last_cell[current_step] = p + dir;
+                            last_cell[current_step] = dbg!(sp);
                             came_from_pos[current_step] += 1;
                             came_from[came_from_pos[current_step] as usize][current_step] = p;
+                            return true;
                         }
                         _ => {
                             return true;
@@ -277,7 +277,7 @@
 
         OutlinePoints {
             islands,
-            fill_points: vec![],
+            fill_points: vec![Point::new(1, 1 + off_y)],
             size: *size,
             play_box,
             intersections_box,