aboutsummaryrefslogtreecommitdiff
path: root/server/src/data/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/data/mod.rs')
-rw-r--r--server/src/data/mod.rs9
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()