summaryrefslogtreecommitdiff
path: root/server/src/customer/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/customer/mod.rs')
-rw-r--r--server/src/customer/mod.rs29
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(),