diff -r 9502611bffc1 -r b0e8cc72bfef rust/mapgen/src/template/wavefront_collapse.rs --- a/rust/mapgen/src/template/wavefront_collapse.rs Tue Feb 14 08:52:20 2023 +0100 +++ b/rust/mapgen/src/template/wavefront_collapse.rs Wed Feb 15 12:36:24 2023 +0100 @@ -42,6 +42,16 @@ #[derive(Deserialize)] pub struct TileDescriptionHelper(#[serde(with = "TileDesc")] TileDescription); +#[derive(Deserialize)] +pub struct EdgeDescriptionHelper(#[serde(with = "EdgeDesc")] EdgeDescription); + +#[derive(Deserialize)] +pub struct NonStrictEdgesDesc { + pub top: Option, + pub right: Option, + pub bottom: Option, + pub left: Option, +} #[derive(Deserialize)] pub struct TemplateDesc { @@ -52,6 +62,7 @@ pub put_girders: bool, pub max_hedgehogs: u8, pub wrap: bool, + pub edges: Option, pub tiles: Vec, } @@ -63,6 +74,18 @@ impl From<&TemplateDesc> for TemplateDescription { fn from(desc: &TemplateDesc) -> Self { + let [top, right, bottom, left] = if let Some(edges) = &desc.edges { + [ + edges.top.as_ref(), + edges.right.as_ref(), + edges.bottom.as_ref(), + edges.left.as_ref(), + ] + .map(|e| e.map(|EdgeDescriptionHelper(e)| e.clone())) + } else { + [None, None, None, None] + }; + Self { size: Size::new(desc.width, desc.height), tiles: desc @@ -71,6 +94,12 @@ .map(|TileDescriptionHelper(t)| t.clone()) .collect(), wrap: desc.wrap, + edges: NonStrictEdgesDescription { + top, + right, + bottom, + left, + }, } } }