diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-20 16:22:34 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:24:32 +0200 |
commit | 20556b7f754ff40860cc69bb3cd67b42581509a3 (patch) | |
tree | 86f61e78a6b2dab0493c24d3b72e724bf675067e /server/src/data.rs | |
parent | eb446e1f786cbfe9af7f2ececca02f53d46d1ee4 (diff) | |
download | hurrycurry-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.rs | 28 |
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] } |