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

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu May 7 03:15:05 EDT 2009


Author: div0
Date: 2009-05-07 03:15:02 -0400 (Thu, 07 May 2009)
New Revision: 6679

Modified:
   trunk/data/qcsrc/server/cl_physics.qc
Log:
factor out Q3's PM_Accelerate function


Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2009-05-06 06:53:09 UTC (rev 6678)
+++ trunk/data/qcsrc/server/cl_physics.qc	2009-05-07 07:15:02 UTC (rev 6679)
@@ -373,6 +373,28 @@
 	self.velocity_z = zspeed;
 }
 
+void PM_Accelerate(vector wishdir, float wishspeed, float accel, float accelqw, float sidefric)
+{
+	float vel_straight;
+	float vel_z;
+	vector vel_perpend;
+	float addspeed;
+
+	vel_straight = self.velocity * wishdir;
+	vel_z = self.velocity_z;
+	vel_perpend = self.velocity - vel_straight * wishdir - vel_z * '0 0 1';
+
+	addspeed = wishspeed - vel_straight;
+	if(addspeed > 0)
+		vel_straight = vel_straight + min(addspeed, accel * frametime * wishspeed) * accelqw;
+	if(wishspeed > 0)
+		vel_straight = vel_straight + min(wishspeed, accel * frametime * wishspeed) * (1 - accelqw);
+
+	vel_perpend = vel_perpend * (1 - frametime * wishspeed * sidefric);
+
+	self.velocity = vel_straight * wishdir + vel_z * '0 0 1' + vel_perpend;
+}
+
 .vector movement_old;
 .float buttons_old;
 .vector v_angle_old;
@@ -610,11 +632,7 @@
 		if (wishspeed > sv_maxspeed*maxspd_mod)
 			wishspeed = sv_maxspeed*maxspd_mod;
 		if (time >= self.teleport_time)
-		{
-			f = wishspeed - (self.velocity * wishdir);
-			if (f > 0)
-				self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
-		}
+			PM_Accelerate(wishdir, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
 	}
 	else if (self.waterlevel >= WATERLEVEL_SWIMMING)
 	{
@@ -637,9 +655,7 @@
 		self.velocity = self.velocity * (1 - frametime * sv_friction);
 
 		// water acceleration
-		f = wishspeed - (self.velocity * wishdir);
-		if (f > 0)
-			self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
+		PM_Accelerate(wishdir, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
 	}
 	else if (time < self.ladder_time)
 	{
@@ -681,9 +697,8 @@
 			wishspeed = sv_maxspeed*maxspd_mod;
 		if (time >= self.teleport_time)
 		{
-			f = wishspeed - (self.velocity * wishdir);
-			if (f > 0)
-				self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
+			// water acceleration
+			PM_Accelerate(wishdir, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
 		}
 	}
 	else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!cvar("g_jetpack_fuel") || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO))
@@ -829,11 +844,7 @@
 		if (self.crouch)
 			wishspeed = wishspeed * 0.5;
 		if (time >= self.teleport_time)
-		{
-			f = wishspeed - (self.velocity * wishdir);
-			if (f > 0)
-				self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
-		}
+			PM_Accelerate(wishdir, wishspeed, sv_accelerate*maxspd_mod, 1, 0);
 	}
 	else
 	{
@@ -878,28 +889,7 @@
 			}
 			// !CPM
 			
-			// NOTE: this does the same as the commented out old code if:
-			//   sv_airaccel_qw 0
-			//   sv_airaccel_sideways_friction 0
-
-			float vel_straight;
-			float vel_z;
-			vector vel_perpend;
-			vel_straight = self.velocity * wishdir;
-			vel_z = self.velocity_z;
-			vel_perpend = self.velocity - vel_straight * wishdir - vel_z * '0 0 1';
-
-			f = wishspeed - vel_straight;
-			if(f > 0)
-				vel_straight = vel_straight + min(f, airaccel * frametime * wishspeed) * sv_airaccel_qw;
-			if(wishspeed > 0)
-				vel_straight = vel_straight + min(wishspeed, airaccel * frametime * wishspeed) * (1 - sv_airaccel_qw);
-
-			// anti-sideways friction to fix QW-style bunnyhopping
-			vel_perpend = vel_perpend * (1 - frametime * (wishspeed / maxairspd) * sv_airaccel_sideways_friction);
-
-			self.velocity = vel_straight * wishdir + vel_z * '0 0 1' + vel_perpend;
-			
+			PM_Accelerate(wishdir, wishspeed, airaccel, sv_airaccel_qw, sv_airaccel_sideways_friction / maxairspd);
 			if(sv_aircontrol)
 				CPM_PM_Aircontrol(wishdir, wishspeed2);
 



More information about the nexuiz-commits mailing list