diff options
Diffstat (limited to 'server/src')
| -rw-r--r-- | server/src/customer/movement.rs | 2 | ||||
| -rw-r--r-- | server/src/game.rs | 14 | 
2 files changed, 13 insertions, 3 deletions
| diff --git a/server/src/customer/movement.rs b/server/src/customer/movement.rs index a4b039e2..c637a17f 100644 --- a/server/src/customer/movement.rs +++ b/server/src/customer/movement.rs @@ -4,7 +4,7 @@ use std::collections::HashSet;  const PLAYER_SIZE: f32 = 0.4;  const PLAYER_SPEED: f32 = 25.; -pub const PLAYER_SPEED_LIMIT: f32 = 8.; +pub const PLAYER_SPEED_LIMIT: f32 = 10.;  pub struct MovementBase {      pub position: Vec2, diff --git a/server/src/game.rs b/server/src/game.rs index 8ca3523f..b38d3ace 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -183,11 +183,18 @@ impl Game {                  let dt = player.last_position_ts.elapsed().as_secs_f32();                  let dist = pos.distance(player.position);                  let speed = dist / dt; -                if speed < PLAYER_SPEED_LIMIT && dist < 1. { +                let interact_dist = player +                    .interacting +                    .map(|p| (p.as_vec2() + Vec2::splat(0.5)).distance(player.position)) +                    .unwrap_or_default(); +                if speed < PLAYER_SPEED_LIMIT && dist < 1. && interact_dist < 2. {                      player.position = pos;                      player.last_position_ts = Instant::now();                  } else { -                    warn!("{:?} moved to quickly.", player.name) +                    warn!( +                        "{:?} moved to quickly. speed={speed:.02} dist={dist:.02}", +                        player.name +                    )                  }                  self.packet_out.push_back(PacketC::Position { @@ -219,6 +226,9 @@ impl Game {                  if !edge && player.interacting != Some(pos) {                      bail!("already not interacting here")                  } +                if edge && (pos.as_vec2() + Vec2::splat(0.5)).distance(player.position) > 2. { +                    bail!("interacting too far from player"); +                }                  let tile_had_item = tile.item.is_some();                  let player_had_item = player.item.is_some(); | 
