diff -r 659c92124c26 -r 168f44ef9b67 rust/landgen/src/wavefront_collapse/generator.rs --- a/rust/landgen/src/wavefront_collapse/generator.rs Sun Feb 12 15:10:10 2023 +0100 +++ b/rust/landgen/src/wavefront_collapse/generator.rs Mon Feb 13 10:39:37 2023 +0100 @@ -5,7 +5,8 @@ use png::Decoder; use std::collections::HashSet; use std::fs::File; -use std::io::BufReader; +use std::io::{BufReader, Result}; +use std::path::Path; pub struct WavefrontCollapseLandGenerator { pub size: Size, @@ -16,13 +17,13 @@ Self { size: *size } } - pub fn load_template( - &self, + fn load_image_tiles( parameters: &LandGenerationParameters, - ) -> Vec> { + path: &Path, + ) -> Result>> { let mut result = Vec::new(); - let file = File::open("sample.png").expect("file exists"); + let file = File::open(path)?; let decoder = Decoder::new(BufReader::new(file)); let mut reader = decoder.read_info().unwrap(); @@ -60,10 +61,26 @@ TileImage::::new(tiles_image, top_edge, right_edge, bottom_edge, left_edge); result.push(tile.clone()); + result.push(tile.flipped()); + result.push(tile.mirrored()); + result.push(tile.mirrored().flipped()); result.push(tile.rotated90()); result.push(tile.rotated180()); result.push(tile.rotated270()); + Ok(result) + } + + pub fn load_template( + &self, + parameters: &LandGenerationParameters, + ) -> Vec> { + let mut result = Vec::new(); + + if let Ok(mut tiles) = Self::load_image_tiles(parameters, Path::new("sample.png")) { + result.append(&mut tiles); + } + result } } @@ -183,7 +200,10 @@ fn test_generation() { let wfc_gen = WavefrontCollapseLandGenerator::new(&Size::new(2048, 1024)); let landgen_params = LandGenerationParameters::new(0u32, 0xff000000u32, 0, true, true); - let land = wfc_gen.generate_land(&landgen_params, &mut [0u32, 1u32, 3u32, 5u32, 7u32, 11u32].into_iter().cycle()); + let land = wfc_gen.generate_land( + &landgen_params, + &mut [0u32, 1u32, 3u32, 5u32, 7u32, 11u32].into_iter().cycle(), + ); let path = Path::new(r"output.png"); let file = File::create(path).unwrap();