diff options
Diffstat (limited to 'server/src/game.rs')
-rw-r--r-- | server/src/game.rs | 17 |
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() { |