rust/mapgen/src/template/outline.rs
branchtransitional_engine
changeset 15922 da6b67f13c12
child 15923 d46ad15c6dec
equal deleted inserted replaced
15921:5f00829c55ec 15922:da6b67f13c12
       
     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 }