43 &mut self, |
43 &mut self, |
44 map_size: &Size, |
44 map_size: &Size, |
45 seed_fn: F, |
45 seed_fn: F, |
46 random_numbers: &mut I, |
46 random_numbers: &mut I, |
47 ) { |
47 ) { |
48 self.grid = Vec2D::new(&map_size, Tile::Empty); |
48 self.grid = Vec2D::new(map_size, Tile::Empty); |
49 |
49 |
50 seed_fn(&mut self.grid); |
50 seed_fn(&mut self.grid); |
51 |
51 |
52 while self.collapse_step(random_numbers) {} |
52 while self.collapse_step(random_numbers) {} |
53 } |
53 } |
54 |
54 |
55 pub fn set_rules(&mut self, rules: Vec<CollapseRule>) { |
55 pub fn set_rules(&mut self, rules: Vec<CollapseRule>) { |
56 self.rules = rules; |
56 self.rules = rules; |
57 } |
57 } |
58 |
58 |
59 pub fn add_rule(&mut self, rule: CollapseRule) { |
|
60 self.rules.push(rule); |
|
61 } |
|
62 |
|
63 fn get_tile(&self, y: usize, x: usize) -> Tile { |
59 fn get_tile(&self, y: usize, x: usize) -> Tile { |
64 self.grid.get(y, x).map(|p| *p).unwrap_or_default() |
60 self.grid.get(y, x).copied().unwrap_or_default() |
65 } |
61 } |
66 |
62 |
67 fn collapse_step<I: Iterator<Item = u32>>(&mut self, random_numbers: &mut I) -> bool { |
63 fn collapse_step<I: Iterator<Item = u32>>(&mut self, random_numbers: &mut I) -> bool { |
68 let mut tiles_to_collapse = (usize::max_value(), Vec::new()); |
64 let mut tiles_to_collapse = (usize::max_value(), Vec::new()); |
69 |
65 |
117 "Neighbour tiles are: {:?} {:?} {:?} {:?}", |
113 "Neighbour tiles are: {:?} {:?} {:?} {:?}", |
118 right_tile, bottom_tile, left_tile, top_tile |
114 right_tile, bottom_tile, left_tile, top_tile |
119 ); |
115 ); |
120 println!("Rules are: {:?}", self.rules);*/ |
116 println!("Rules are: {:?}", self.rules);*/ |
121 |
117 |
122 todo!("no collapse possible - what to do?") |
118 //todo!("no collapse possible - what to do?") |
123 } |
119 } |
124 } |
120 } |
125 } |
121 } |
126 } |
122 } |
127 |
123 |