aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs94
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,
- // });
- // }
- // },
- // );
}
}
}