aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/protocol/src/lib.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/server/protocol/src/lib.rs b/server/protocol/src/lib.rs
index dc9acfdb..ee5651ce 100644
--- a/server/protocol/src/lib.rs
+++ b/server/protocol/src/lib.rs
@@ -86,6 +86,7 @@ pub struct Gamedata {
pub item_names: Vec<String>,
pub tile_names: Vec<String>,
pub tile_walkable: HashSet<TileIndex>,
+ #[serde(deserialize_with = "deser_tile_index_map")]
pub tile_placeable_items: BTreeMap<TileIndex, HashSet<ItemIndex>>,
pub tile_interactable_empty: HashSet<TileIndex>,
pub maps: Vec<(String, MapMetadata)>,
@@ -385,3 +386,11 @@ fn deser_ivec2_opt<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Option<
let x = Option::<Vec2>::deserialize(deserializer)?;
Ok(x.map(|v| v.as_ivec2()))
}
+fn deser_tile_index_map<'de, D: Deserializer<'de>>(
+ deserializer: D,
+) -> Result<BTreeMap<TileIndex, HashSet<ItemIndex>>, D::Error> {
+ let x = BTreeMap::<String, HashSet<ItemIndex>>::deserialize(deserializer)?;
+ Ok(x.into_iter()
+ .map(|(k, v)| (TileIndex(k.parse().ok().unwrap_or_default()), v))
+ .collect())
+}