diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-20 17:31:56 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-20 17:32:25 +0200 |
commit | 89ba8a6b62b90ac72547e2ca9ea5eeae7bbc6500 (patch) | |
tree | 3c55c94857e42353376c8377d3fe2632e757cb0d /server/src/game.rs | |
parent | 8290f420bee04702751ae6e4453c8b140e227e19 (diff) | |
download | hurrycurry-89ba8a6b62b90ac72547e2ca9ea5eeae7bbc6500.tar hurrycurry-89ba8a6b62b90ac72547e2ca9ea5eeae7bbc6500.tar.bz2 hurrycurry-89ba8a6b62b90ac72547e2ca9ea5eeae7bbc6500.tar.zst |
syncronize player movement if the diverge
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() { |