summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/server.rs27
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;