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(), |