diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/game.rs | 14 | ||||
| -rw-r--r-- | server/src/interaction.rs | 4 | ||||
| -rw-r--r-- | server/src/main.rs | 7 | ||||
| -rw-r--r-- | server/src/protocol.rs | 6 | 
4 files changed, 23 insertions, 8 deletions
| diff --git a/server/src/game.rs b/server/src/game.rs index 35502d3c..c9881e7c 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -32,6 +32,7 @@ pub struct Tile {  pub struct Player {      pub name: String, +    pub character: usize,      pub position: Vec2,      pub interacting: Option<IVec2>,      pub item: Option<Item>, @@ -71,8 +72,10 @@ impl Game {          for (&id, player) in &self.players {              out.push(PacketC::AddPlayer {                  id, +                position: player.position, +                character: player.character,                  name: player.name.clone(), -                hand: player.item.as_ref().map(|i| i.kind), +                item: player.item.as_ref().map(|i| i.kind),              })          }          for (&tile, tdata) in &self.tiles { @@ -92,11 +95,12 @@ impl Game {      pub fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> {          match packet { -            PacketS::Join { name } => { +            PacketS::Join { name, character } => {                  self.players.insert(                      player,                      Player {                          item: None, +                        character,                          position: self.data.spawn,                          interacting: None,                          name: name.clone(), @@ -105,7 +109,9 @@ impl Game {                  self.packet_out.push_back(PacketC::AddPlayer {                      id: player,                      name, -                    hand: None, +                    position: self.data.spawn, +                    character, +                    item: None,                  });              }              PacketS::Leave => { @@ -157,7 +163,7 @@ impl Game {                  }                  let tile_had_item = tile.item.is_some(); -                let player_had_item = tile.item.is_some(); +                let player_had_item = player.item.is_some();                  if let Some(effect) = interact(&self.data, edge, tile, player) {                      match effect { diff --git a/server/src/interaction.rs b/server/src/interaction.rs index d43c71da..d822340f 100644 --- a/server/src/interaction.rs +++ b/server/src/interaction.rs @@ -3,6 +3,7 @@ use crate::{      game::{Involvement, Item, Player, Tile},      protocol::{ItemIndex, TileIndex},  }; +use log::info;  use serde::{Deserialize, Serialize};  #[derive(Debug, Clone, Serialize, Deserialize)] @@ -101,6 +102,7 @@ pub fn interact(                      if let Some(item) = &mut tile.item {                          if item.kind == *input {                              if item.active.is_none() { +                                info!("start active recipe {ri}");                                  item.active = Some(Involvement {                                      recipe: ri,                                      working: 1, @@ -117,6 +119,7 @@ pub fn interact(                              if let Some(active) = &mut item.active {                                  active.working += 1;                              } else { +                                info!("start active recipe {ri}");                                  item.active = Some(Involvement {                                      recipe: ri,                                      working: 1, @@ -137,6 +140,7 @@ pub fn interact(                  let ok = (inputs[0] == on_tile && inputs[1] == in_hand)                      || (inputs[1] == on_tile && inputs[0] == in_hand);                  if ok { +                    info!("instant recipe {ri}");                      player.item = outputs[0].map(|kind| Item { kind, active: None });                      tile.item = outputs[1].map(|kind| Item { kind, active: None });                      return Some(InteractEffect::Produce); diff --git a/server/src/main.rs b/server/src/main.rs index c4df346e..45ee39dd 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -11,9 +11,9 @@ use tokio::{  };  use tokio_tungstenite::tungstenite::Message;  use undercooked::{ +    data::build_gamedata,      game::Game,      protocol::{PacketC, PacketS}, -    data::build_gamedata,  };  #[tokio::main] @@ -94,7 +94,10 @@ async fn main() -> Result<()> {              }              r = ws_listener.accept() => {                  let (sock, addr) = r?; -                let sock = tokio_tungstenite::accept_async(sock).await?; +                let Ok(sock) = tokio_tungstenite::accept_async(sock).await else { +                    warn!("invalid ws handshake"); +                    continue +                };                  let (mut write, mut read) = sock.split();                  let game = game.clone();                  let mut rx = rx.resubscribe(); diff --git a/server/src/protocol.rs b/server/src/protocol.rs index 4f04793f..6fe8ccd8 100644 --- a/server/src/protocol.rs +++ b/server/src/protocol.rs @@ -10,7 +10,7 @@ pub type RecipeIndex = usize;  #[derive(Debug, Clone, Serialize, Deserialize)]  #[serde(rename_all = "snake_case", tag = "type")]  pub enum PacketS { -    Join { name: String }, +    Join { name: String, character: usize },      Leave,      Position { pos: Vec2, rot: f32 },      Interact { pos: IVec2, edge: bool }, @@ -26,8 +26,10 @@ pub enum PacketC {      },      AddPlayer {          id: PlayerID, +        position: Vec2, +        character: usize,          name: String, -        hand: Option<ItemIndex>, +        item: Option<ItemIndex>,      },      RemovePlayer {          id: PlayerID, | 
