diff options
author | metamuffin <metamuffin@disroot.org> | 2025-09-30 14:13:36 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-09-30 14:13:37 +0200 |
commit | 792227a1c7398c903efe54213a9a290bb564509d (patch) | |
tree | 6860c969eae77280e575d0591ac993e15440fb38 /server/src/data/mod.rs | |
parent | b605a261f72bb3763736b75175ce28a5a882dbda (diff) | |
download | hurrycurry-792227a1c7398c903efe54213a9a290bb564509d.tar hurrycurry-792227a1c7398c903efe54213a9a290bb564509d.tar.bz2 hurrycurry-792227a1c7398c903efe54213a9a290bb564509d.tar.zst |
Also allow initially placed item for exclusive tiles
Diffstat (limited to 'server/src/data/mod.rs')
-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() |