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.rs17
1 files changed, 13 insertions, 4 deletions
diff --git a/server/src/game.rs b/server/src/game.rs
index bb6d5182..9a01e4a3 100644
--- a/server/src/game.rs
+++ b/server/src/game.rs
@@ -272,7 +272,12 @@ impl Game {
demands_completed: self.demands_completed,
}
}
- pub fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<()> {
+ pub fn packet_in(
+ &mut self,
+ player: PlayerID,
+ packet: PacketS,
+ replies: &mut Vec<PacketC>,
+ ) -> Result<()> {
let points_before = self.points;
match packet {
@@ -356,8 +361,12 @@ impl Game {
if let Some(pos) = pos {
let dt = player.last_position_update.elapsed();
player.last_position_update += dt;
- player.movement.position +=
- (pos - player.movement.position).clamp_length_max(dt.as_secs_f32());
+ let diff = pos - player.movement.position;
+ player.movement.position += diff.clamp_length_max(dt.as_secs_f32());
+
+ if diff.length() > 1. {
+ replies.push(PacketC::MovementSync);
+ }
}
}
PacketS::Collide { player, force } => {
@@ -573,7 +582,7 @@ impl Game {
}
}
for pid in players_auto_release.drain(..) {
- let _ = self.packet_in(pid, PacketS::Interact { pos: None });
+ let _ = self.packet_in(pid, PacketS::Interact { pos: None }, &mut vec![]);
}
for entity in self.entities.clone().write().unwrap().iter_mut() {