diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/game.rs | 45 | ||||
| -rw-r--r-- | server/src/protocol.rs | 26 | 
2 files changed, 34 insertions, 37 deletions
| diff --git a/server/src/game.rs b/server/src/game.rs index 18bd6519..a9ee8f3d 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -8,6 +8,7 @@ struct TileData {      kind: Tile,      items: Vec<ID>,      active: bool, +    progress: f32,  }  struct Player { @@ -29,31 +30,32 @@ impl Game {          let mut g = Self::default();          for x in -5..5 {              for y in -5..5 { -                g.tiles.insert(IVec2 { x, y }, Tile::Floor.into()); +                g.tiles +                    .insert(IVec2 { x, y }, Tile("floor".to_string()).into());              }          }          for x in -5..5 { -            g.tiles.insert(IVec2 { x, y: -5 }, Tile::Table.into()); -            g.tiles.insert(IVec2 { x, y: 4 }, Tile::Table.into()); +            g.tiles +                .insert(IVec2 { x, y: -5 }, Tile("table".to_string()).into()); +            g.tiles +                .insert(IVec2 { x, y: 4 }, Tile("table".to_string()).into());          }          for y in -5..5 { -            g.tiles.insert(IVec2 { x: -5, y }, Tile::Table.into()); -            g.tiles.insert(IVec2 { x: 4, y }, Tile::Table.into()); +            g.tiles +                .insert(IVec2 { x: -5, y }, Tile("table".to_string()).into()); +            g.tiles +                .insert(IVec2 { x: 4, y }, Tile("table".to_string()).into());          }          g.tiles.extend( -            [ -                ([-5, 1], Tile::Pan), -                ([-5, 2], Tile::Pan), -                ([4, 3], Tile::FlourBag), -            ] -            .map(|(k, v)| { +            [([-5, 1], "pan"), ([-5, 2], "pan"), ([4, 3], "flour_bag")].map(|(k, v)| {                  (                      IVec2::from_array(k),                      TileData {                          active: false,                          items: vec![], -                        kind: v, +                        kind: Tile(v.to_string()).into(), +                        progress: 0.,                      },                  )              }), @@ -72,19 +74,19 @@ impl Game {              out.push(PacketC::AddPlayer {                  id,                  name: player.name.clone(), -                hand: player.hand.map(|i| (i, self.items[&i])), +                hand: player.hand.map(|i| (i, self.items[&i].clone())),              })          }          for (&pos, tdata) in &self.tiles {              out.push(PacketC::UpdateMap {                  pos, -                tile: tdata.kind, +                tile: tdata.kind.clone(),              });              for &id in &tdata.items {                  out.push(PacketC::ProduceItem {                      id,                      pos, -                    kind: self.items[&id], +                    kind: self.items[&id].clone(),                  })              }          } @@ -123,7 +125,10 @@ impl Game {                  self.packet_out                      .push_back(PacketC::Position { player, pos, rot });              } -            PacketS::Interact { pos } => { +            PacketS::Interact { pos, edge } => { +                if !edge { +                    return Ok(()); +                }                  let tile = self                      .tiles                      .get_mut(&pos) @@ -133,14 +138,15 @@ impl Game {                      .get_mut(&player)                      .ok_or(anyhow!("player does not exist"))?; -                if let Tile::FlourBag = tile.kind { +                if tile.kind.0 == "flour_bag" {                      info!("new flour"); -                    self.items.insert(self.item_id_counter, Item::Flour); +                    let item = Item("flour".to_string()); +                    self.items.insert(self.item_id_counter, item.clone());                      tile.items.push(self.item_id_counter);                      self.packet_out.push_back(PacketC::ProduceItem {                          id: self.item_id_counter,                          pos, -                        kind: Item::Flour, +                        kind: item,                      });                      self.item_id_counter += 1;                  } @@ -166,6 +172,7 @@ impl From<Tile> for TileData {      fn from(kind: Tile) -> Self {          Self {              kind, +            progress: 0.,              active: false,              items: vec![],          } diff --git a/server/src/protocol.rs b/server/src/protocol.rs index 0218658d..a318a9b2 100644 --- a/server/src/protocol.rs +++ b/server/src/protocol.rs @@ -3,24 +3,13 @@ use serde::{Deserialize, Serialize};  pub type ID = u32; -#[derive(Debug, Clone, Copy, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum Item { -    Flour, -    Water, -    Dough, -    Pancake, -} +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(transparent)] +pub struct Item(pub String); -#[derive(Debug, Clone, Copy, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum Tile { -    Sink, -    FlourBag, -    Floor, -    Table, -    Pan, -} +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(transparent)] +pub struct Tile(pub String);  #[derive(Debug, Clone, Serialize, Deserialize)]  #[serde(rename_all = "snake_case")] @@ -28,7 +17,7 @@ pub enum PacketS {      Join { name: String },      Leave,      Position { pos: Vec2, rot: f32 }, -    Interact { pos: IVec2 }, +    Interact { pos: IVec2, edge: bool },  }  #[derive(Debug, Clone, Serialize, Deserialize)] @@ -69,6 +58,7 @@ pub enum PacketC {      },      SetActive {          tile: IVec2, +        progress: f32,      },      UpdateMap {          pos: IVec2, | 
