diff -r d46ad15c6dec -r 9502611bffc1 rust/landgen/src/wavefront_collapse/wavefront_collapse.rs --- a/rust/landgen/src/wavefront_collapse/wavefront_collapse.rs Mon Feb 13 17:02:08 2023 +0100 +++ b/rust/landgen/src/wavefront_collapse/wavefront_collapse.rs Tue Feb 14 08:52:20 2023 +0100 @@ -27,6 +27,7 @@ pub struct WavefrontCollapse { rules: Vec, grid: Vec2D, + wrap: bool, } impl Default for WavefrontCollapse { @@ -34,11 +35,20 @@ Self { rules: Vec::new(), grid: Vec2D::new(&Size::new(1, 1), Tile::Empty), + wrap: false, } } } impl WavefrontCollapse { + pub fn new(wrap: bool) -> Self { + Self { + rules: Vec::new(), + grid: Vec2D::new(&Size::new(1, 1), Tile::Empty), + wrap, + } + } + pub fn generate_map, F: FnOnce(&mut Vec2D)>( &mut self, map_size: &Size, @@ -57,6 +67,20 @@ } fn get_tile(&self, y: usize, x: usize) -> Tile { + let x = if self.wrap { + if x == usize::MAX { + self.grid.width() - 1 + } else { + if x == self.grid.width() { + 0 + } else { + x + } + } + } else { + x + }; + self.grid.get(y, x).copied().unwrap_or_default() }