equal
deleted
inserted
replaced
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 } |