aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs19
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()