[nexuiz-commits] r7787 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Sep 14 10:57:53 EDT 2009


Author: div0
Date: 2009-09-14 10:57:53 -0400 (Mon, 14 Sep 2009)
New Revision: 7787

Modified:
   trunk/data/qcsrc/server/cl_physics.qc
Log:
sideways friction: make negative values never decrease velocity


Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2009-09-14 12:54:35 UTC (rev 7786)
+++ trunk/data/qcsrc/server/cl_physics.qc	2009-09-14 14:57:53 UTC (rev 7787)
@@ -417,7 +417,10 @@
 	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;
 	vel_perpend = self.velocity - vel_straight * wishdir - vel_z * '0 0 1';
@@ -428,7 +431,18 @@
 	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;
 }



More information about the nexuiz-commits mailing list