diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-10-15 21:51:09 +0200 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-10-15 21:51:09 +0200 |
| commit | 836bdea5497cadaa468b4d74ad5e36404a89f46c (patch) | |
| tree | 97845dc47edd1d476fb10eb7638b69c534f36c61 /server/protocol/src | |
| parent | 4f7688680babef2ce6ed152d00518facfc500300 (diff) | |
| download | hurrycurry-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.rs | 9 |
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()) +} |