summaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs27
1 files changed, 24 insertions, 3 deletions
diff --git a/server/src/game.rs b/server/src/game.rs
index 228d7048..225455bf 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -1,7 +1,7 @@
use crate::{
data::Gamedata,
interaction::{interact, tick_tile, InteractEffect, TickEffect},
- protocol::{ItemIndex, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},
+ protocol::{ItemIndex, Message, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},
};
use anyhow::{anyhow, bail, Result};
use glam::{IVec2, Vec2};
@@ -36,6 +36,7 @@ pub struct Player {
pub position: Vec2,
pub interacting: Option<IVec2>,
pub item: Option<Item>,
+ pub communicate: Option<Message>,
}
pub struct Game {
@@ -80,12 +81,18 @@ impl Game {
character: player.character,
name: player.name.clone(),
item: player.item.as_ref().map(|i| i.kind),
- })
+ });
+ if let Some(c) = &player.communicate {
+ out.push(PacketC::Communicate {
+ player: id,
+ message: Some(c.to_owned()),
+ })
+ }
}
for (&tile, tdata) in &self.tiles {
out.push(PacketC::UpdateMap {
pos: tile,
- neighbours: [
+ neighbors: [
self.tiles.get(&(tile + IVec2::NEG_Y)).map(|e| e.kind),
self.tiles.get(&(tile + IVec2::NEG_X)).map(|e| e.kind),
self.tiles.get(&(tile + IVec2::Y)).map(|e| e.kind),
@@ -116,6 +123,7 @@ impl Game {
} else {
self.data.chef_spawn
},
+ communicate: None,
interacting: None,
name: name.clone(),
},
@@ -151,6 +159,11 @@ impl Game {
PacketS::Position { pos, rot } => {
self.packet_out
.push_back(PacketC::Position { player, pos, rot });
+ let player = self
+ .players
+ .get_mut(&player)
+ .ok_or(anyhow!("player does not exist"))?;
+ player.position = pos;
}
PacketS::Collide { player, force } => {
self.packet_out
@@ -224,6 +237,14 @@ impl Game {
player.interacting = if edge { Some(pos) } else { None };
}
+ PacketS::Communicate { message } => {
+ info!("{player} message {message:?}");
+ if let Some(player) = self.players.get_mut(&player) {
+ player.communicate = message.clone()
+ }
+ self.packet_out
+ .push_back(PacketC::Communicate { player, message })
+ }
}
Ok(())
}