diff options
Diffstat (limited to 'server/data/src')
| -rw-r--r-- | server/data/src/lib.rs | 8 | ||||
| -rw-r--r-- | server/data/src/registry.rs | 14 |
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]) |