diff options
-rw-r--r-- | server/src/data/mod.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/server/src/data/mod.rs b/server/src/data/mod.rs index 7d3841d1..2b3c9a69 100644 --- a/server/src/data/mod.rs +++ b/server/src/data/mod.rs @@ -29,7 +29,7 @@ use hurrycurry_protocol::{ }; use serde::{Deserialize, Serialize}; use std::{ - collections::{BTreeMap, BTreeSet, HashMap, HashSet}, + collections::{BTreeMap, HashMap, HashSet}, fs::{read_to_string, File}, path::PathBuf, str::FromStr, @@ -267,7 +267,7 @@ pub fn build_data( let mut tiles_used = HashSet::new(); let mut items_used = HashSet::new(); let mut tile_walkable = HashSet::new(); - let mut exclusive_tiles = BTreeSet::new(); + let mut exclusive_tiles = BTreeMap::<TileIndex, HashSet<ItemIndex>>::new(); for (y, line) in map_in.map.iter().enumerate() { for (x, char) in line.chars().enumerate() { if char == ' ' { @@ -298,7 +298,7 @@ pub fn build_data( tile_walkable.insert(tile); } if tile_spec.walkable || tile_spec.collider || tile_spec.exclusive { - exclusive_tiles.insert(tile); + exclusive_tiles.entry(tile).or_default().extend(item); } } } @@ -336,11 +336,12 @@ pub fn build_data( let mut tile_placeable_items = BTreeMap::new(); let mut tile_interactable_empty = HashSet::new(); - for tile in exclusive_tiles { + for (tile, used_items) in exclusive_tiles { let whitelist = recipes .iter() .filter(|r| r.tile() == Some(tile)) .flat_map(|e| e.inputs()) + .chain(used_items) .collect(); let int_empty = recipes .iter() |