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, -            //             }); -            //         } -            //     }, -            // );          }      }  } | 
