From 759530f5e72bbc7887ab0265a9ecf1a5c062fe84 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 14 Sep 2009 14:57:53 +0000 Subject: [PATCH] sideways friction: make negative values never decrease velocity git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7787 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_physics.qc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 392d63276..f34cc2157 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -417,6 +417,9 @@ void PM_Accelerate(vector wishdir, float wishspeed, float accel, float accelqw, float vel_z; vector vel_perpend; float addspeed; + float savespeed; + + savespeed = self.velocity * self.velocity; vel_straight = self.velocity * wishdir; vel_z = self.velocity_z; @@ -428,7 +431,18 @@ void PM_Accelerate(vector wishdir, float wishspeed, float accel, float accelqw, if(wishspeed > 0) vel_straight = vel_straight + min(wishspeed, accel * frametime * wishspeed) * (1 - accelqw); - vel_perpend = vel_perpend * (1 - frametime * wishspeed * sidefric); + if(sidefric < 0 && (vel_perpend*vel_perpend)) + { + float f, fmin; + f = (1 + frametime * wishspeed * sidefric); + fmin = (savespeed - vel_straight*vel_straight) / (vel_perpend*vel_perpend); + if(fmin <= 0) + vel_perpend = vel_perpend * f; + else + vel_perpend = vel_perpend * min(1, max(fmin, f)); + } + else + vel_perpend = vel_perpend * (1 - frametime * wishspeed * sidefric); self.velocity = vel_straight * wishdir + vel_z * '0 0 1' + vel_perpend; } -- 2.39.2