rust/landgen/src/wavefront_collapse/generator.rs
branchtransitional_engine
changeset 15946 e82de0410da5
parent 15945 8f093b1b18bc
child 15947 60b5639cc3a5
equal deleted inserted replaced
15945:8f093b1b18bc 15946:e82de0410da5
     1 use super::tile_image::TileImage;
     1 use super::tile_image::{Edge, TileImage};
     2 use super::wavefront_collapse::WavefrontCollapse;
     2 use super::wavefront_collapse::WavefrontCollapse;
     3 use crate::{LandGenerationParameters, LandGenerator};
     3 use crate::{LandGenerationParameters, LandGenerator};
     4 use integral_geometry::Size;
     4 use integral_geometry::Size;
     5 use png::Decoder;
     5 use png::Decoder;
     6 use std::fs::File;
     6 use std::fs::File;
    15         Self {
    15         Self {
    16             wfc: WavefrontCollapse::default(),
    16             wfc: WavefrontCollapse::default(),
    17         }
    17         }
    18     }
    18     }
    19 
    19 
    20     pub fn load_template<T: Copy + PartialEq + Default>(&self, parameters: &LandGenerationParameters<T>) -> Vec<TileImage<T>> {
    20     pub fn load_template<T: Copy + PartialEq + Default>(
       
    21         &self,
       
    22         parameters: &LandGenerationParameters<T>,
       
    23     ) -> Vec<TileImage<T, String>> {
       
    24         let mut result = Vec::new();
       
    25 
    21         let file = File::open("sample.png").expect("file exists");
    26         let file = File::open("sample.png").expect("file exists");
    22         let decoder = Decoder::new(BufReader::new(file));
    27         let decoder = Decoder::new(BufReader::new(file));
    23         let mut reader = decoder.read_info().unwrap();
    28         let mut reader = decoder.read_info().unwrap();
    24 
    29 
    25         let info = reader.info();
    30         let info = reader.info();
    45                         parameters.basic
    50                         parameters.basic
    46                     };
    51                     };
    47             }
    52             }
    48         }
    53         }
    49 
    54 
    50         TileImage::<T>::new(tiles_image).split(3, 3)
    55         let top_edge = Edge::new("edge".to_owned(), false);
       
    56         let right_edge = Edge::new("edge".to_owned(), false);
       
    57         let bottom_edge = Edge::new("edge".to_owned(), false);
       
    58         let left_edge = Edge::new("edge".to_owned(), false);
       
    59 
       
    60         let tile =
       
    61             TileImage::<T, String>::new(tiles_image, top_edge, right_edge, bottom_edge, left_edge);
       
    62 
       
    63         result.push(tile.clone());
       
    64         result.push(tile.mirrored());
       
    65 
       
    66         result
    51     }
    67     }
    52 }
    68 }
    53 
    69 
    54 impl LandGenerator for WavefrontCollapseLandGenerator {
    70 impl LandGenerator for WavefrontCollapseLandGenerator {
    55     fn generate_land<T: Copy + PartialEq + Default, I: Iterator<Item = u32>>(
    71     fn generate_land<T: Copy + PartialEq + Default, I: Iterator<Item = u32>>(
    64 }
    80 }
    65 
    81 
    66 #[cfg(test)]
    82 #[cfg(test)]
    67 mod tests {
    83 mod tests {
    68     use super::WavefrontCollapseLandGenerator;
    84     use super::WavefrontCollapseLandGenerator;
    69     use crate::{LandGenerator, LandGenerationParameters};
    85     use crate::{LandGenerationParameters, LandGenerator};
    70     use integral_geometry::Size;
    86     use integral_geometry::Size;
    71     use vec2d::Vec2D;
    87     use vec2d::Vec2D;
    72 
    88 
    73     #[test]
    89     #[test]
    74     fn test_generation() {
    90     fn test_generation() {
    75         let wfc_gen =WavefrontCollapseLandGenerator::new();
    91         let wfc_gen = WavefrontCollapseLandGenerator::new();
    76         let landgen_params = LandGenerationParameters::new(0u8, 255u8, 0, true, true);
    92         let landgen_params = LandGenerationParameters::new(0u8, 255u8, 0, true, true);
    77         wfc_gen.generate_land(&landgen_params, &mut std::iter::repeat(1u32));
    93         wfc_gen.generate_land(&landgen_params, &mut std::iter::repeat(1u32));
    78     }
    94     }
    79 }
    95 }