aboutsummaryrefslogtreecommitdiff
path: root/server/src/game.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-20 17:31:56 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-20 17:32:25 +0200
commit89ba8a6b62b90ac72547e2ca9ea5eeae7bbc6500 (patch)
tree3c55c94857e42353376c8377d3fe2632e757cb0d /server/src/game.rs
parent8290f420bee04702751ae6e4453c8b140e227e19 (diff)
downloadhurrycurry-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.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() {