aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/game.rs')
-rw-r--r--server/src/game.rs44
1 files changed, 37 insertions, 7 deletions
diff --git a/server/src/game.rs b/server/src/game.rs
index 23900559..72f653c4 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -65,6 +65,7 @@ pub struct Game {
players: HashMap<PlayerID, Player>,
packet_out: VecDeque<PacketC>,
demand: Option<DemandState>,
+ points: i64,
}
impl Game {
@@ -75,11 +76,13 @@ impl Game {
players: Default::default(),
tiles: Default::default(),
demand: None,
+ points: 0,
}
}
fn unload(&mut self) {
- self.packet_out.push_back(PacketC::SetIngame { state: false });
+ self.packet_out
+ .push_back(PacketC::SetIngame { state: false });
for (id, _) in self.players.drain() {
self.packet_out.push_back(PacketC::RemovePlayer { id })
}
@@ -189,18 +192,22 @@ impl Game {
})
}
}
- out.push(PacketC::Score {
+ out.push(self.score());
+ out.push(PacketC::SetIngame { state: true });
+ out
+ }
+
+ pub fn score(&self) -> PacketC {
+ PacketC::Score {
+ points: self.points,
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.push(PacketC::SetIngame { state: true });
- out
+ }
}
-
pub fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> {
match packet {
PacketS::Join { name, character } => {
@@ -315,6 +322,7 @@ impl Game {
tile.kind,
&mut tile.item,
&mut player.item,
+ &mut self.points,
) {
match effect {
InteractEffect::Put => self.packet_out.push_back(PacketC::PutItem {
@@ -363,6 +371,21 @@ impl Game {
item: Some(i.kind),
});
}
+ self.packet_out.push_back({
+ PacketC::Score {
+ points: self.points,
+ 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(),
+ }
+ })
}
}
}
@@ -396,11 +419,18 @@ impl Game {
pub fn tick(&mut self, dt: f32) {
if let Some(demand) = &mut self.demand {
let mut packet_out = Vec::new();
- if let Err(err) = demand.tick(&mut packet_out, &mut self.tiles, &self.data, dt) {
+ if let Err(err) = demand.tick(
+ &mut packet_out,
+ &mut self.tiles,
+ &self.data,
+ dt,
+ &mut self.points,
+ ) {
warn!("demand tick {err}");
}
if demand.score_changed {
self.packet_out.push_back(PacketC::Score {
+ points: self.points,
demands_failed: demand.failed,
demands_completed: demand.completed,
});