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