diff options
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 45 |
1 files changed, 26 insertions, 19 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![], } |