--- 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,
+ },
}
}
}