diff options
Diffstat (limited to 'server')
| -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>, +    },  } | 
