diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/customer.rs | 8 | ||||
-rw-r--r-- | server/src/game.rs | 27 | ||||
-rw-r--r-- | server/src/protocol.rs | 14 |
3 files changed, 44 insertions, 5 deletions
diff --git a/server/src/customer.rs b/server/src/customer.rs index b003c935..87b67f0e 100644 --- a/server/src/customer.rs +++ b/server/src/customer.rs @@ -1,7 +1,7 @@ use crate::{ data::Gamedata, game::Game, - protocol::{PacketC, PacketS, PlayerID}, + protocol::{Message, PacketC, PacketS, PlayerID}, }; use glam::{IVec2, Vec2}; use log::{debug, error}; @@ -118,6 +118,12 @@ impl DemandState { packets_out .push((p.id, move_player(p, &self.walkable, next - p.position, dt))); } else { + packets_out.push(( + p.id, + PacketS::Communicate { + message: Some(Message::Item(4)), + }, + )); p.state = CustomerState::Waiting { chair: *chair }; } } 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(()) } diff --git a/server/src/protocol.rs b/server/src/protocol.rs index 18b5f6fa..7eff2ba1 100644 --- a/server/src/protocol.rs +++ b/server/src/protocol.rs @@ -15,6 +15,14 @@ pub enum PacketS { Position { pos: Vec2, rot: f32 }, Interact { pos: IVec2, edge: bool }, Collide { player: PlayerID, force: Vec2 }, + Communicate { message: Option<Message> }, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum Message { + Text(String), + Item(ItemIndex), } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -61,10 +69,14 @@ pub enum PacketC { UpdateMap { pos: IVec2, tile: TileIndex, - neighbours: [Option<TileIndex>; 4], + neighbors: [Option<TileIndex>; 4], }, Collide { player: PlayerID, force: Vec2, }, + Communicate { + player: PlayerID, + message: Option<Message>, + }, } |