aboutsummaryrefslogtreecommitdiff
path: root/server/protocol/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-10-15 21:51:09 +0200
committermetamuffin <metamuffin@disroot.org>2025-10-15 21:51:09 +0200
commit836bdea5497cadaa468b4d74ad5e36404a89f46c (patch)
tree97845dc47edd1d476fb10eb7638b69c534f36c61 /server/protocol/src
parent4f7688680babef2ce6ed152d00518facfc500300 (diff)
downloadhurrycurry-836bdea5497cadaa468b4d74ad5e36404a89f46c.tar
hurrycurry-836bdea5497cadaa468b4d74ad5e36404a89f46c.tar.bz2
hurrycurry-836bdea5497cadaa468b4d74ad5e36404a89f46c.tar.zst
Fix parsing tile placable map
Diffstat (limited to 'server/protocol/src')
-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())
+}