diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-20 01:20:51 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:21:49 +0200 |
commit | 6f7b995dd9fa3bea95be8c24e2452f015b410839 (patch) | |
tree | 2c1d2d03a759ee4597a07d5998dae8480bd73a67 /server/src/game.rs | |
parent | 67ccafad4d7d481bdf60be750f96a086ae452e27 (diff) | |
download | hurrycurry-6f7b995dd9fa3bea95be8c24e2452f015b410839.tar hurrycurry-6f7b995dd9fa3bea95be8c24e2452f015b410839.tar.bz2 hurrycurry-6f7b995dd9fa3bea95be8c24e2452f015b410839.tar.zst |
change the protocol yet again
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 94 |
1 files changed, 38 insertions, 56 deletions
diff --git a/server/src/game.rs b/server/src/game.rs index 225455bf..b48e1833 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -80,8 +80,13 @@ impl Game { position: player.position, character: player.character, name: player.name.clone(), - item: player.item.as_ref().map(|i| i.kind), }); + if let Some(item) = &player.item { + out.push(PacketC::SetPlayerItem { + player: id, + item: Some(item.kind), + }) + } if let Some(c) = &player.communicate { out.push(PacketC::Communicate { player: id, @@ -101,9 +106,9 @@ impl Game { tile: tdata.kind.clone(), }); if let Some(item) = &tdata.item { - out.push(PacketC::ProduceItem { + out.push(PacketC::SetTileItem { tile, - item: item.kind, + item: Some(item.kind), }) } } @@ -133,7 +138,6 @@ impl Game { name, position: self.data.chef_spawn, character, - item: None, }); } PacketS::Leave => { @@ -145,9 +149,9 @@ impl Game { 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 { + self.packet_out.push_back(PacketC::SetTileItem { tile: pos, - item: item.kind, + item: Some(item.kind), }); tile.item = Some(item); } @@ -204,21 +208,25 @@ impl Game { }), InteractEffect::Produce => { if tile_had_item { - self.packet_out - .push_back(PacketC::ConsumeItem { tile: pos }); + self.packet_out.push_back(PacketC::SetTileItem { + tile: pos, + item: None, + }); } if player_had_item { self.packet_out.push_back(PacketC::PutItem { player: pid, tile: pos, }); - self.packet_out - .push_back(PacketC::ConsumeItem { tile: pos }); + self.packet_out.push_back(PacketC::SetTileItem { + tile: pos, + item: None, + }); } if let Some(i) = &player.item { - self.packet_out.push_back(PacketC::ProduceItem { + self.packet_out.push_back(PacketC::SetTileItem { tile: pos, - item: i.kind, + item: Some(i.kind), }); self.packet_out.push_back(PacketC::TakeItem { player: pid, @@ -226,9 +234,9 @@ impl Game { }) } if let Some(i) = &tile.item { - self.packet_out.push_back(PacketC::ProduceItem { + self.packet_out.push_back(PacketC::SetTileItem { tile: pos, - item: i.kind, + item: Some(i.kind), }); } } @@ -245,6 +253,18 @@ impl Game { self.packet_out .push_back(PacketC::Communicate { player, message }) } + PacketS::ReplaceHand { item } => { + let pdata = self + .players + .get_mut(&player) + .ok_or(anyhow!("player does not exist"))?; + pdata.item = item.map(|i| Item { + kind: i, + active: None, + }); + self.packet_out + .push_back(PacketC::SetPlayerItem { player, item }) + } } Ok(()) } @@ -264,51 +284,13 @@ impl Game { .map(|i| i.progress), }), TickEffect::Produce => { - self.packet_out - .push_back(PacketC::ConsumeItem { tile: pos }); - if let Some(item) = &tile.item { - self.packet_out.push_back(PacketC::ProduceItem { - tile: pos, - item: item.kind, - }); - } + self.packet_out.push_back(PacketC::SetTileItem { + tile: pos, + item: tile.item.as_ref().map(|i| i.kind), + }); } } } - // let items = tile.items.iter().map(|e| self.items[e]).collect::<Vec<_>>(); - // tick_tile( - // dt, - // &self.data, - // tile.kind, - // &mut tile.active, - // items, - // |out| match out { - // Out::Take(_) | Out::Put => { - // unreachable!() - // } - // Out::Produce(kind) => { - // info!("produce"); - // let id = self.item_id_counter; - // self.item_id_counter += 1; - // self.items.insert(id, kind); - // tile.items.push(id); - // self.packet_out - // .push_back(PacketC::ProduceItem { id, pos, kind }); - // } - // Out::Consume(index) => { - // info!("consume"); - // let id = tile.items.remove(index); - // info!("left {:?}", tile.items); - // self.packet_out.push_back(PacketC::ConsumeItem { id, pos }); - // } - // Out::SetActive(progress) => { - // self.packet_out.push_back(PacketC::SetActive { - // tile: pos, - // progress, - // }); - // } - // }, - // ); } } } |