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