diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-20 01:38:00 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-23 19:21:49 +0200 |
commit | 720bb2e4f53d4467832ba59f97c9b6b6786181e7 (patch) | |
tree | 10ea600436adf2c101d9a1ccbf64808414bbc354 /server/src/customer/mod.rs | |
parent | 6f7b995dd9fa3bea95be8c24e2452f015b410839 (diff) | |
download | hurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar hurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar.bz2 hurrycurry-720bb2e4f53d4467832ba59f97c9b6b6786181e7.tar.zst |
type safe indecies
Diffstat (limited to 'server/src/customer/mod.rs')
-rw-r--r-- | server/src/customer/mod.rs | 58 |
1 files changed, 28 insertions, 30 deletions
diff --git a/server/src/customer/mod.rs b/server/src/customer/mod.rs index ecd99250..4c557d41 100644 --- a/server/src/customer/mod.rs +++ b/server/src/customer/mod.rs @@ -47,7 +47,7 @@ struct Customer { pub async fn customer(game: Arc<RwLock<Game>>, mut grx: broadcast::Receiver<PacketC>) { let mut state = CustomerManager { - customer_id_counter: 0, + customer_id_counter: PlayerID(0), walkable: Default::default(), chairs: Default::default(), items: Default::default(), @@ -56,14 +56,14 @@ pub async fn customer(game: Arc<RwLock<Game>>, mut grx: broadcast::Receiver<Pack data: Gamedata::default(), }, }; - let initial = game.write().await.prime_client(-1); + let initial = game.write().await.prime_client(PlayerID(-1)); for p in initial { match p { PacketC::Init { data, .. } => { state.demand.data = data; } PacketC::UpdateMap { pos, tile, .. } => { - let tilename = &state.demand.data.tile_names[tile]; + let tilename = state.demand.data.tile_name(tile); if tilename == "floor" || tilename == "door" || tilename == "chair" { state.walkable.insert(pos); } @@ -119,14 +119,14 @@ impl DemandState { pub fn generate_demand(&self) -> DemandIndex { // TODO insert sofa magic formula - random::<usize>() % self.data.demands.len() + DemandIndex(random::<usize>() % self.data.demands.len()) } } impl CustomerManager { pub fn tick(&mut self, packets_out: &mut Vec<(PlayerID, PacketS)>, dt: f32) { if self.customers.len() < self.demand.target_customer_count() { - self.customer_id_counter -= 1; + self.customer_id_counter.0 -= 1; let id = self.customer_id_counter; packets_out.push(( id, @@ -164,7 +164,7 @@ impl CustomerManager { packets_out.push(( id, PacketS::Communicate { - message: Some(Message::Item(self.demand.data.demands[demand].from)), + message: Some(Message::Item(self.demand.data.demand(demand).from)), }, )); p.state = CustomerState::Waiting { @@ -174,41 +174,39 @@ impl CustomerManager { } } CustomerState::Waiting { chair, demand } => { + let demand = &self.demand.data.demand(*demand); let demand_pos = [IVec2::NEG_X, IVec2::NEG_Y, IVec2::X, IVec2::Y] .into_iter() .find_map(|off| { let pos = *chair + off; - if self.items.get(&pos) == Some(demand) { + if self.items.get(&pos) == Some(&demand.from) { Some(pos) } else { None } }); if let Some(pos) = demand_pos { - let demand = &self.demand.data.demands[*demand]; - if self.items.get(&pos) == Some(&demand.from) { - packets_out.push((id, PacketS::Communicate { message: None })); - for edge in [true, false] { - packets_out.push((id, PacketS::Interact { pos, edge })) - } - packets_out.push(( - id, - PacketS::ReplaceHand { - item: Some(demand.to), - }, - )); - for edge in [true, false] { - packets_out.push((id, PacketS::Interact { pos, edge })) - } - let path = find_path( - &self.walkable, - p.movement.position.as_ivec2(), - self.demand.data.customer_spawn.as_ivec2(), - ) - .expect("no path to exit"); - *self.chairs.get_mut(&chair).unwrap() = true; - p.state = CustomerState::Exiting { path } + packets_out.push((id, PacketS::Communicate { message: None })); + for edge in [true, false] { + packets_out.push((id, PacketS::Interact { pos, edge })) + } + packets_out.push(( + id, + PacketS::ReplaceHand { + item: Some(demand.to), + }, + )); + for edge in [true, false] { + packets_out.push((id, PacketS::Interact { pos, edge })) } + let path = find_path( + &self.walkable, + p.movement.position.as_ivec2(), + self.demand.data.customer_spawn.as_ivec2(), + ) + .expect("no path to exit"); + *self.chairs.get_mut(&chair).unwrap() = true; + p.state = CustomerState::Exiting { path } } debug!("waiting") } |