diff options
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")                  } | 
