diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/game-core/src/lib.rs | 2 | ||||
| -rw-r--r-- | server/protocol/src/movement.rs | 9 | ||||
| -rw-r--r-- | server/src/server.rs | 4 |
3 files changed, 9 insertions, 6 deletions
diff --git a/server/game-core/src/lib.rs b/server/game-core/src/lib.rs index 8a0b1aa7..a0d4d05d 100644 --- a/server/game-core/src/lib.rs +++ b/server/game-core/src/lib.rs @@ -267,7 +267,7 @@ impl Game { self.players_spatial_index.all(|p1, pos1| { self.players_spatial_index.query(pos1, 2., |p2, _pos2| { if let [Some(a), Some(b)] = self.players.get_disjoint_mut([&p1, &p2]) { - a.movement.collide(&mut b.movement, dt) + a.movement.collide(&mut b.movement, dt); } }) }); diff --git a/server/protocol/src/movement.rs b/server/protocol/src/movement.rs index 6a07687f..14aefacb 100644 --- a/server/protocol/src/movement.rs +++ b/server/protocol/src/movement.rs @@ -99,18 +99,19 @@ impl MovementBase { } } - pub fn collide(&mut self, other: &mut Self, dt: f32) { + pub fn collide(&mut self, other: &mut Self, dt: f32) -> bool { let diff = self.position - other.position; let d = diff.length(); if d < 0.01 { - return; + return false; } if d > PLAYER_SIZE * 2. { - return; + return false; } let norm = diff.normalize(); let f = 100. / (1. + d); - self.velocity += norm * f * dt + self.velocity += norm * f * dt; + true } pub fn get_interact_target(&self) -> IVec2 { (self.position + Vec2::new(self.rotation.sin(), self.rotation.cos())).as_ivec2() diff --git a/server/src/server.rs b/server/src/server.rs index be5fee3f..627ba5c2 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -692,7 +692,9 @@ impl Server { if p1 != p2 && let [Some(a), Some(b)] = self.game.players.get_disjoint_mut([&p1, &p2]) { - a.movement.collide(&mut b.movement, dt) + if a.movement.collide(&mut b.movement, dt) { + a.movement_input_changed = true; + } } }) }); |