|
1 use integral_geometry::{Point, Rect, Size}; |
|
2 use land2d::Land2D; |
|
3 use landgen::{ |
|
4 outline_template_based::outline_template::OutlineTemplate, LandGenerationParameters, |
|
5 }; |
|
6 use serde_derive::Deserialize; |
|
7 use serde_yaml; |
|
8 use std::{borrow::Borrow, collections::hash_map::HashMap, mem::replace}; |
|
9 |
|
10 #[derive(Deserialize)] |
|
11 pub struct PointDesc { |
|
12 x: u32, |
|
13 y: u32, |
|
14 } |
|
15 |
|
16 #[derive(Deserialize)] |
|
17 pub struct RectDesc { |
|
18 x: u32, |
|
19 y: u32, |
|
20 w: u32, |
|
21 h: u32, |
|
22 } |
|
23 |
|
24 #[derive(Deserialize)] |
|
25 pub struct TemplateDesc { |
|
26 width: usize, |
|
27 height: usize, |
|
28 can_flip: bool, |
|
29 can_invert: bool, |
|
30 can_mirror: bool, |
|
31 is_negative: bool, |
|
32 put_girders: bool, |
|
33 max_hedgehogs: u8, |
|
34 outline_points: Vec<Vec<RectDesc>>, |
|
35 fill_points: Vec<PointDesc>, |
|
36 } |
|
37 |
|
38 #[derive(Deserialize)] |
|
39 pub struct TemplateCollectionDesc { |
|
40 pub templates: Vec<TemplateDesc>, |
|
41 pub template_types: HashMap<String, Vec<usize>>, |
|
42 } |
|
43 |
|
44 impl From<&TemplateDesc> for OutlineTemplate { |
|
45 fn from(desc: &TemplateDesc) -> Self { |
|
46 OutlineTemplate { |
|
47 islands: desc |
|
48 .outline_points |
|
49 .iter() |
|
50 .map(|v| { |
|
51 v.iter() |
|
52 .map(|r| { |
|
53 Rect::from_size( |
|
54 Point::new(r.x as i32, r.y as i32), |
|
55 Size::new(r.w as usize, r.h as usize), |
|
56 ) |
|
57 }) |
|
58 .collect() |
|
59 }) |
|
60 .collect(), |
|
61 fill_points: desc |
|
62 .fill_points |
|
63 .iter() |
|
64 .map(|p| Point::new(p.x as i32, p.y as i32)) |
|
65 .collect(), |
|
66 size: Size::new(desc.width, desc.height), |
|
67 can_flip: desc.can_flip, |
|
68 can_invert: desc.can_invert, |
|
69 can_mirror: desc.can_mirror, |
|
70 is_negative: desc.is_negative, |
|
71 } |
|
72 } |
|
73 } |