From 9265813857500642b0e71ecc86e452ac3975d6ed Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 26 Jun 2024 20:41:09 +0200 Subject: send score --- server/src/customer/mod.rs | 13 ++++++++++++- server/src/game.rs | 15 +++++++++++++++ server/src/protocol.rs | 2 +- 3 files changed, 28 insertions(+), 2 deletions(-) (limited to 'server/src') diff --git a/server/src/customer/mod.rs b/server/src/customer/mod.rs index ba65a5e2..9e474b8f 100644 --- a/server/src/customer/mod.rs +++ b/server/src/customer/mod.rs @@ -41,6 +41,10 @@ pub struct DemandState { chairs: HashMap, customer_id_counter: PlayerID, customers: HashMap, + + pub completed: usize, + pub failed: usize, + pub score_changed: bool, } enum CustomerState { @@ -73,6 +77,9 @@ impl DemandState { pub fn new(data: Arc, map: &HashMap) -> Self { let chair = data.get_tile_by_name("chair"); Self { + score_changed: true, + completed: 0, + failed: 0, walkable: map .iter() .filter(|(_, v)| !data.is_tile_colliding(v.kind)) @@ -157,6 +164,8 @@ impl DemandState { ) .expect("no path to exit"); *self.chairs.get_mut(&chair).unwrap() = true; + self.failed += 1; + self.score_changed = true; p.state = CustomerState::Exiting { path } } else { let demand_data = &data.demand(*demand); @@ -219,6 +228,8 @@ impl DemandState { ) .ok_or(anyhow!("no path to exit"))?; *self.chairs.get_mut(&chair).unwrap() = true; + self.completed += 1; + self.score_changed = true; p.state = CustomerState::Exiting { path } } } @@ -238,7 +249,7 @@ impl DemandState { Ok(()) } - pub fn select_chair(&mut self) -> Option { + fn select_chair(&mut self) -> Option { use rand::seq::IteratorRandom; let (chosen, free) = self .chairs diff --git a/server/src/game.rs b/server/src/game.rs index 20f479c7..ad777584 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -188,6 +188,14 @@ impl Game { }) } } + out.push(PacketC::Score { + demands_failed: self.demand.as_ref().map(|d| d.failed).unwrap_or_default(), + demands_completed: self + .demand + .as_ref() + .map(|d| d.completed) + .unwrap_or_default(), + }); out } @@ -388,6 +396,13 @@ impl Game { if let Err(err) = demand.tick(&mut packet_out, &mut self.tiles, &self.data, dt) { warn!("demand tick {err}"); } + if demand.score_changed { + self.packet_out.push_back(PacketC::Score { + demands_failed: demand.failed, + demands_completed: demand.completed, + }); + demand.score_changed = false + } for (player, packet) in packet_out { if let Err(err) = self.packet_in(player, packet) { warn!("demand packet {err}"); diff --git a/server/src/protocol.rs b/server/src/protocol.rs index daa5c8af..92e2a639 100644 --- a/server/src/protocol.rs +++ b/server/src/protocol.rs @@ -132,7 +132,7 @@ pub enum PacketC { }, Score { demands_failed: usize, - demands_complete: usize, + demands_completed: usize, }, Error { message: String, -- cgit v1.2.3-70-g09d2