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 | |
| 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')
| -rw-r--r-- | server/src/entity/customers/mod.rs | 2 | ||||
| -rw-r--r-- | server/src/game.rs | 17 | ||||
| -rw-r--r-- | server/src/state.rs | 5 | 
3 files changed, 17 insertions, 7 deletions
| diff --git a/server/src/entity/customers/mod.rs b/server/src/entity/customers/mod.rs index 806a25f9..7a8280bc 100644 --- a/server/src/entity/customers/mod.rs +++ b/server/src/entity/customers/mod.rs @@ -253,7 +253,7 @@ impl EntityT for Customers {              self.customers.remove(&c).unwrap();          }          for (player, packet) in self.cpackets.drain(..) { -            if let Err(err) = game.packet_in(player, packet) { +            if let Err(err) = game.packet_in(player, packet, &mut vec![]) {                  warn!("demand packet {err}");              }          } 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() { diff --git a/server/src/state.rs b/server/src/state.rs index e637b323..61795da4 100644 --- a/server/src/state.rs +++ b/server/src/state.rs @@ -101,6 +101,7 @@ impl State {          Ok(())      }      pub async fn packet_in(&mut self, player: PlayerID, packet: PacketS) -> Result<Vec<PacketC>> { +        let mut replies = Vec::new();          match &packet {              PacketS::Communicate {                  message: Some(Message::Text(text)), @@ -117,7 +118,7 @@ impl State {              }              _ => (),          } -        self.game.packet_in(player, packet)?; +        self.game.packet_in(player, packet, &mut replies)?;          if self.game.players.is_empty() && !self.game.lobby {              self.tx                  .send(PacketC::ServerMessage { @@ -127,7 +128,7 @@ impl State {              self.game                  .load(self.index.generate("lobby-none".to_string()).await?, None);          } -        Ok(vec![]) +        Ok(replies)      }      async fn handle_command_parse(&mut self, player: PlayerID, command: &str) -> Result<()> { | 
