From 2a3b8382f60212aeba4e239a6d3e6ecc1f9fd37f Mon Sep 17 00:00:00 2001 From: div0 Date: Fri, 14 Aug 2009 10:57:19 +0000 Subject: [PATCH] don't cause roundoff errors if we don't really NEED to clip the velocity to keyboard axes git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7437 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_physics.qc | 61 +++++++++++++++++---------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 118718ad7..c8986ded8 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -509,37 +509,40 @@ void SV_PlayerPhysics() // TODO implement this for engine cl_movement code too (basically, clipping to the four axes) wishvel_x = fabs(self.movement_x); wishvel_y = fabs(self.movement_y); - wishvel_z = 0; - wishspeed = vlen(wishvel); - if(wishvel_x >= 2 * wishvel_y) - { - // pure X motion - if(self.movement_x > 0) - self.movement_x = wishspeed; - else - self.movement_x = -wishspeed; - self.movement_y = 0; - } - else if(wishvel_y >= 2 * wishvel_x) + if(wishvel_x != 0 && wishvel_y != 0 && wishvel_x != wishvel_y) { - // pure Y motion - self.movement_x = 0; - if(self.movement_y > 0) - self.movement_y = wishspeed; - else - self.movement_y = -wishspeed; - } - else - { - // diagonal - if(self.movement_x > 0) - self.movement_x = 0.70710678118654752440 * wishspeed; - else - self.movement_x = -0.70710678118654752440 * wishspeed; - if(self.movement_y > 0) - self.movement_y = 0.70710678118654752440 * wishspeed; + wishvel_z = 0; + wishspeed = vlen(wishvel); + if(wishvel_x >= 2 * wishvel_y) + { + // pure X motion + if(self.movement_x > 0) + self.movement_x = wishspeed; + else + self.movement_x = -wishspeed; + self.movement_y = 0; + } + else if(wishvel_y >= 2 * wishvel_x) + { + // pure Y motion + self.movement_x = 0; + if(self.movement_y > 0) + self.movement_y = wishspeed; + else + self.movement_y = -wishspeed; + } else - self.movement_y = -0.70710678118654752440 * wishspeed; + { + // diagonal + if(self.movement_x > 0) + self.movement_x = 0.70710678118654752440 * wishspeed; + else + self.movement_x = -0.70710678118654752440 * wishspeed; + if(self.movement_y > 0) + self.movement_y = 0.70710678118654752440 * wishspeed; + else + self.movement_y = -0.70710678118654752440 * wishspeed; + } } } -- 2.39.2