diff options
author | metamuffin <metamuffin@disroot.org> | 2025-09-30 01:19:01 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-09-30 01:19:09 +0200 |
commit | 5033c326094edc1ff4234b994e95d987cb937fc4 (patch) | |
tree | 5fa426a77109722df163c15ce8d647170cd8fcea /server/src/server.rs | |
parent | 727752b87bbe7146adb0f9e9e27d6e64b785ec2f (diff) | |
download | hurrycurry-5033c326094edc1ff4234b994e95d987cb937fc4.tar hurrycurry-5033c326094edc1ff4234b994e95d987cb937fc4.tar.bz2 hurrycurry-5033c326094edc1ff4234b994e95d987cb937fc4.tar.zst |
Implement tile placeable items for server-side (#433)
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index 57b26122..14244394 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -16,7 +16,7 @@ */ use crate::{ - data::{index::GamedataIndex, DataIndex, Serverdata}, + data::{DataIndex, Serverdata}, entity::{Entities, EntityContext}, interaction::{interact, tick_slot}, message::TrError, @@ -24,7 +24,7 @@ use crate::{ tre, ConnectionID, }; use anyhow::{Context, Result}; -use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile}; +use hurrycurry_client_lib::{gamedata_index::GamedataIndex, Game, Involvement, Item, Player, Tile}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, movement::MovementBase, @@ -137,6 +137,7 @@ impl GameServerExt for Game { self.lobby = gamedata.current_map == "lobby"; self.data = gamedata.into(); + self.data_index.update(&self.data); self.score = Score { time_remaining: timer.map(|dur| dur.as_secs_f64()).unwrap_or(0.), ..Default::default() @@ -154,7 +155,7 @@ impl GameServerExt for Game { }), }, ); - if !self.data.tile_collide[tile.0] { + if !self.data_index.tile_collide[tile.0] { self.walkable.insert(p); } } @@ -304,7 +305,7 @@ impl GameServerExt for Game { ) { if let Some(kind) = kind { self.tiles.insert(tile, Tile::from(kind)); - if self.data.is_tile_colliding(kind) { + if self.data_index.tile_collide[kind.0] { self.walkable.remove(&tile); } else { self.walkable.insert(tile); @@ -547,7 +548,15 @@ impl Server { player.interacting = if edge { Some((pos, hand)) } else { None }; - let other_pid = if !self.game.data.is_tile_interactable(tile.kind) { + // Dont try interacting with player it tile is interactable + let other_pid = if !self + .game + .data + .tile_placeable_items + .get(&tile.kind) + .map_or(false, |p| !p.is_empty()) + // TODO check for hand item + { self.game .players .iter() |