rust/mapgen/src/template/wavefront_collapse.rs
branchtransitional_engine
changeset 15925 b0e8cc72bfef
parent 15924 9502611bffc1
--- 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<EdgeDescriptionHelper>,
+    pub right: Option<EdgeDescriptionHelper>,
+    pub bottom: Option<EdgeDescriptionHelper>,
+    pub left: Option<EdgeDescriptionHelper>,
+}
 
 #[derive(Deserialize)]
 pub struct TemplateDesc {
@@ -52,6 +62,7 @@
     pub put_girders: bool,
     pub max_hedgehogs: u8,
     pub wrap: bool,
+    pub edges: Option<NonStrictEdgesDesc>,
     pub tiles: Vec<TileDescriptionHelper>,
 }
 
@@ -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,
+            },
         }
     }
 }