diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-13 20:16:35 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-13 20:16:35 +0200 |
commit | 50db2b3baf7e341631fe11dd9146460e825db533 (patch) | |
tree | 57b35cc150516a8c31b13109a29c22bdbea1492d /server/src/server.rs | |
parent | f152f203e479aac5745e54224e892cb7315fa995 (diff) | |
download | hurrycurry-50db2b3baf7e341631fe11dd9146460e825db533.tar hurrycurry-50db2b3baf7e341631fe11dd9146460e825db533.tar.bz2 hurrycurry-50db2b3baf7e341631fe11dd9146460e825db533.tar.zst |
reenable movement sync
Diffstat (limited to 'server/src/server.rs')
-rw-r--r-- | server/src/server.rs | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index 2543baff..41931ef7 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -41,6 +41,7 @@ pub struct ServerState { pub player_id_counter: PlayerID, pub score_changed: bool, pub packet_loopback: VecDeque<PacketS>, + pub last_movement_update: HashMap<PlayerID, Instant>, } pub struct Server<'a> { @@ -220,6 +221,7 @@ impl ServerState { player_id_counter: PlayerID(1), score_changed: false, packet_loopback: VecDeque::new(), + last_movement_update: HashMap::default(), } } } @@ -343,18 +345,21 @@ impl Server<'_> { pd.movement.input(direction, boost); - let _ = pos; // TODO + if let Some(pos) = pos { + let last_position_update = self + .state + .last_movement_update + .entry(player) + .or_insert_with(|| Instant::now()); + let dt = last_position_update.elapsed(); + *last_position_update += dt; + let diff = pos - pd.movement.position; + pd.movement.position += diff.clamp_length_max(dt.as_secs_f32()); - // if let Some(pos) = pos { - // let dt = pd.last_position_update.elapsed(); - // pd.last_position_update += dt; - // let diff = pos - pd.movement.position; - // pd.movement.position += diff.clamp_length_max(dt.as_secs_f32()); - - // if diff.length() > 1. { - // replies.push(PacketC::MovementSync { player }); - // } - // } + if diff.length() > 1. { + replies.push(PacketC::MovementSync { player }); + } + } } PacketS::Interact { pos, player } => { let pid = player; |