diff options
-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; |