diff options
Diffstat (limited to 'server/src/customer/mod.rs')
| -rw-r--r-- | server/src/customer/mod.rs | 29 | 
1 files changed, 19 insertions, 10 deletions
| diff --git a/server/src/customer/mod.rs b/server/src/customer/mod.rs index 7c6cd235..ecd99250 100644 --- a/server/src/customer/mod.rs +++ b/server/src/customer/mod.rs @@ -4,13 +4,13 @@ mod pathfinding;  use crate::{      data::Gamedata,      game::Game, -    protocol::{ItemIndex, Message, PacketC, PacketS, PlayerID}, +    protocol::{DemandIndex, ItemIndex, Message, PacketC, PacketS, PlayerID},  };  use glam::{IVec2, Vec2};  use log::{debug, error};  use movement::MovementBase;  use pathfinding::{find_path, Path}; -use rand::thread_rng; +use rand::{random, thread_rng};  use std::{      collections::{HashMap, HashSet},      sync::Arc, @@ -36,7 +36,7 @@ struct DemandState {  enum CustomerState {      WalkingToChair { path: Path, chair: IVec2 }, -    Waiting { chair: IVec2, demand: ItemIndex }, +    Waiting { chair: IVec2, demand: DemandIndex },      Exiting { path: Path },  } @@ -83,8 +83,7 @@ pub async fn customer(game: Arc<RwLock<Game>>, mut grx: broadcast::Receiver<Pack                  match packet.unwrap() {                      PacketC::PutItem { .. }                      | PacketC::TakeItem { .. } -                    | PacketC::ProduceItem { .. } -                    | PacketC::ConsumeItem { .. } => { +                    | PacketC::SetTileItem { .. } => {                          let g = game.read().await;                          update_items(&mut state, &g)                      }, @@ -117,10 +116,10 @@ impl DemandState {          // TODO insert sofa magic formula          5      } -    pub fn generate_demand(&self) -> usize { +    pub fn generate_demand(&self) -> DemandIndex {          // TODO insert sofa magic formula -        use rand::seq::IndexedRandom; -        *self.data.demands.choose(&mut thread_rng()).unwrap() + +        random::<usize>() % self.data.demands.len()      }  } @@ -165,7 +164,7 @@ impl CustomerManager {                          packets_out.push((                              id,                              PacketS::Communicate { -                                message: Some(Message::Item(demand)), +                                message: Some(Message::Item(self.demand.data.demands[demand].from)),                              },                          ));                          p.state = CustomerState::Waiting { @@ -186,11 +185,21 @@ impl CustomerManager {                              }                          });                      if let Some(pos) = demand_pos { -                        if self.items.get(&pos) == Some(demand) { +                        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(), | 
