rust/landgen/src/wavefront_collapse/generator.rs
branchtransitional_engine
changeset 15920 168f44ef9b67
parent 15919 659c92124c26
child 15922 da6b67f13c12
--- 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<T: Copy + PartialEq + Default>(
-        &self,
+    fn load_image_tiles<T: Copy + PartialEq + Default>(
         parameters: &LandGenerationParameters<T>,
-    ) -> Vec<TileImage<T, String>> {
+        path: &Path,
+    ) -> Result<Vec<TileImage<T, String>>> {
         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::<T, String>::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<T: Copy + PartialEq + Default>(
+        &self,
+        parameters: &LandGenerationParameters<T>,
+    ) -> Vec<TileImage<T, String>> {
+        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();