aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/game-core/src/lib.rs2
-rw-r--r--server/protocol/src/movement.rs9
-rw-r--r--server/src/server.rs4
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;
+ }
}
})
});