diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-18 21:56:03 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:21:22 +0200 |
commit | fe0dd480d6e93098cddc71d596a8d7e61fec68ed (patch) | |
tree | ce86d206f8862c6a3360a412781299c5bcc567e1 /server/src/game.rs | |
parent | f4bc78d9dffda792cde848e0ae8040a98959591b (diff) | |
download | hurrycurry-fe0dd480d6e93098cddc71d596a8d7e61fec68ed.tar hurrycurry-fe0dd480d6e93098cddc71d596a8d7e61fec68ed.tar.bz2 hurrycurry-fe0dd480d6e93098cddc71d596a8d7e61fec68ed.tar.zst |
active recipes
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/server/src/game.rs b/server/src/game.rs index 46bc0569..35502d3c 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -33,7 +33,7 @@ pub struct Tile { pub struct Player { pub name: String, pub position: Vec2, - pub interacting: bool, + pub interacting: Option<IVec2>, pub item: Option<Item>, } @@ -98,7 +98,7 @@ impl Game { Player { item: None, position: self.data.spawn, - interacting: false, + interacting: None, name: name.clone(), }, ); @@ -113,8 +113,17 @@ impl Game { .players .remove(&player) .ok_or(anyhow!("player does not exist"))?; - if let Some(_id) = p.item { - // TODO place on ground + if let Some(item) = p.item { + let pos = p.position.floor().as_ivec2(); + if let Some(tile) = self.tiles.get_mut(&pos) { + if tile.item.is_none() { + self.packet_out.push_back(PacketC::ProduceItem { + tile: pos, + item: item.kind, + }); + tile.item = Some(item); + } + } } self.packet_out .push_back(PacketC::RemovePlayer { id: player }) @@ -140,8 +149,11 @@ impl Game { .get_mut(&pos) .ok_or(anyhow!("tile does not exist"))?; - if edge == player.interacting { - bail!("already (not) interacting") + if edge && player.interacting.is_some() { + bail!("already interacting") + } + if !edge && player.interacting != Some(pos) { + bail!("already not interacting here") } let tile_had_item = tile.item.is_some(); @@ -190,7 +202,7 @@ impl Game { } } - player.interacting = edge; + player.interacting = if edge { Some(pos) } else { None }; } } Ok(()) |