aboutsummaryrefslogtreecommitdiff
path: root/server/data/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/data/src')
-rw-r--r--server/data/src/lib.rs8
-rw-r--r--server/data/src/registry.rs14
2 files changed, 13 insertions, 9 deletions
diff --git a/server/data/src/lib.rs b/server/data/src/lib.rs
index ef0f9bb6..80b2f75b 100644
--- a/server/data/src/lib.rs
+++ b/server/data/src/lib.rs
@@ -115,7 +115,7 @@ pub struct DemandDecl {
#[derive(Debug, Clone, Default)]
#[rustfmt::skip]
pub struct Serverdata {
- pub initial_map: HashMap<IVec2, (TileIndex, Option<ItemIndex>)>,
+ pub initial_map: HashMap<IVec2, (Vec<TileIndex>, Option<ItemIndex>)>,
pub chef_spawn: Vec2,
pub customer_spawn: Option<Vec2>,
pub score_baseline: i64,
@@ -152,6 +152,7 @@ fn build_data(
let mut tile_walkable = HashSet::new();
let mut exclusive_tiles = BTreeMap::<TileIndex, HashSet<ItemIndex>>::new();
let mut tile_placeable_items = BTreeMap::new();
+ let mut tile_placeable_any = HashSet::new();
let mut tile_interactable_empty = HashSet::new();
for (y, line) in map_in.map.iter().enumerate() {
for (x, char) in line.chars().enumerate() {
@@ -168,7 +169,7 @@ fn build_data(
tiles_used.insert(tile);
let item = tile_spec.item.clone().map(|i| reg.register_item(i));
items_used.extend(item);
- initial_map.insert(pos, (tile, item));
+ initial_map.insert(pos, (vec![tile], item));
if tile_spec.chef_spawn {
chef_spawn = Some(pos.as_vec2() + Vec2::splat(0.5));
@@ -285,8 +286,9 @@ fn build_data(
let mut data = Gamedata {
current_map: map_name,
maps,
- tile_walkable,
+ tile_collide: tile_walkable,
tile_placeable_items,
+ tile_placeable_any,
tile_interactable_empty,
flags: map_in.flags,
recipes,
diff --git a/server/data/src/registry.rs b/server/data/src/registry.rs
index 14a06b93..4de672d0 100644
--- a/server/data/src/registry.rs
+++ b/server/data/src/registry.rs
@@ -74,8 +74,8 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu
for rg in serverdata.recipe_groups.values() {
used_items.extend(rg);
}
- for &(tile, item) in serverdata.initial_map.values() {
- used_tiles.insert(tile);
+ for (tile, item) in serverdata.initial_map.values() {
+ used_tiles.extend(tile);
used_items.extend(item);
}
for e in &serverdata.entity_decls {
@@ -185,8 +185,10 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu
for rg in serverdata.recipe_groups.values_mut() {
*rg = rg.clone().into_iter().map(|e| item_map[&e]).collect();
}
- for (tile, item) in serverdata.initial_map.values_mut() {
- *tile = tile_map[tile];
+ for (tiles, item) in serverdata.initial_map.values_mut() {
+ for tile in tiles {
+ *tile = tile_map[tile];
+ }
if let Some(item) = item {
*item = item_map[item]
}
@@ -218,8 +220,8 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu
_ => (),
};
}
- data.tile_walkable = data
- .tile_walkable
+ data.tile_collide = data
+ .tile_collide
.clone()
.into_iter()
.map(|e| tile_map[&e])