|
1 use integral_geometry::{Point, Rect, Size}; |
|
2 use land2d::Land2D; |
|
3 use landgen::{ |
|
4 outline_template::OutlineTemplate, template_based::TemplatedLandGenerator, |
|
5 LandGenerationParameters, LandGenerator, |
|
6 }; |
|
7 use lfprng::LaggedFibonacciPRNG; |
|
8 |
|
9 pub struct World { |
|
10 random_numbers_gen: LaggedFibonacciPRNG, |
|
11 preview: Land2D<u8>, |
|
12 } |
|
13 |
|
14 impl World { |
|
15 pub fn new() -> Self { |
|
16 Self { |
|
17 random_numbers_gen: LaggedFibonacciPRNG::new(&[]), |
|
18 preview: Land2D::new(Size::new(0, 0), 0), |
|
19 } |
|
20 } |
|
21 |
|
22 pub fn preview(&self) -> &Land2D<u8> { |
|
23 &self.preview |
|
24 } |
|
25 |
|
26 pub fn generate_preview(&mut self) { |
|
27 fn template() -> OutlineTemplate { |
|
28 let mut template = OutlineTemplate::new(Size::new(4096, 2048)); |
|
29 template.islands = vec![vec![ |
|
30 Rect::from_size_coords(100, 2050, 1, 1), |
|
31 Rect::from_size_coords(100, 500, 400, 1200), |
|
32 Rect::from_size_coords(3600, 500, 400, 1200), |
|
33 Rect::from_size_coords(3900, 2050, 1, 1), |
|
34 ]]; |
|
35 template.fill_points = vec![Point::new(1, 0)]; |
|
36 |
|
37 template |
|
38 } |
|
39 |
|
40 let params = LandGenerationParameters::new(0 as u8, 255, 5, false, false); |
|
41 let landgen = TemplatedLandGenerator::new(template()); |
|
42 self.preview = landgen.generate_land(¶ms, &mut self.random_numbers_gen); |
|
43 } |
|
44 } |