aboutsummaryrefslogtreecommitdiff
path: root/server/src/data.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-20 16:22:34 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 19:24:32 +0200
commit20556b7f754ff40860cc69bb3cd67b42581509a3 (patch)
tree86f61e78a6b2dab0493c24d3b72e724bf675067e /server/src/data.rs
parenteb446e1f786cbfe9af7f2ececca02f53d46d1ee4 (diff)
downloadhurrycurry-20556b7f754ff40860cc69bb3cd67b42581509a3.tar
hurrycurry-20556b7f754ff40860cc69bb3cd67b42581509a3.tar.bz2
hurrycurry-20556b7f754ff40860cc69bb3cd67b42581509a3.tar.zst
add server-side collision and interable list
Diffstat (limited to 'server/src/data.rs')
-rw-r--r--server/src/data.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/server/src/data.rs b/server/src/data.rs
index 9c200e5b..fd6f266d 100644
--- a/server/src/data.rs
+++ b/server/src/data.rs
@@ -33,6 +33,8 @@ pub struct InitialMap {
map: Vec<String>,
tiles: HashMap<char, String>,
items: HashMap<char, String>,
+ collider: Vec<String>,
+ walkable: Vec<String>,
chef_spawn: char,
customer_spawn: char,
}
@@ -57,6 +59,8 @@ pub struct Gamedata {
pub demands: Vec<Demand>,
pub item_names: Vec<String>,
pub tile_names: Vec<String>,
+ pub tile_collide: Vec<bool>,
+ pub tile_interact: Vec<bool>,
#[serde(skip)]
pub initial_map: HashMap<IVec2, (TileIndex, Option<ItemIndex>)>,
pub chef_spawn: Vec2,
@@ -138,12 +142,26 @@ pub fn build_gamedata(
}
}
+ let item_names = item_names.into_inner().unwrap();
+ let tile_names = tile_names.into_inner().unwrap();
+
+ let tile_collide = tile_names
+ .iter()
+ .map(|i| !map_in.walkable.contains(i))
+ .collect();
+ let tile_interact = tile_names
+ .iter()
+ .map(|i| !map_in.collider.contains(i) && !map_in.walkable.contains(i))
+ .collect();
+
Gamedata {
demands,
+ tile_collide,
+ tile_interact,
recipes,
initial_map,
- item_names: item_names.into_inner().unwrap(),
- tile_names: tile_names.into_inner().unwrap(),
+ item_names,
+ tile_names,
chef_spawn,
customer_spawn,
}
@@ -164,6 +182,12 @@ impl Gamedata {
pub fn tile_name(&self, index: TileIndex) -> &String {
&self.tile_names[index.0]
}
+ pub fn is_tile_colliding(&self, index: TileIndex) -> bool {
+ self.tile_collide[index.0]
+ }
+ pub fn is_tile_interactable(&self, index: TileIndex) -> bool {
+ self.tile_interact[index.0]
+ }
pub fn item_name(&self, index: ItemIndex) -> &String {
&self.item_names[index.0]
}