r2302 - in trunk/data: . qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Apr 13 17:50:29 EDT 2007


Author: div0
Date: 2007-04-13 17:50:29 -0400 (Fri, 13 Apr 2007)
New Revision: 2302

Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
new zoom customization: cl_zoomspeed, cl_zoomfactor


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2007-04-11 18:29:46 UTC (rev 2301)
+++ trunk/data/default.cfg	2007-04-13 21:50:29 UTC (rev 2302)
@@ -60,6 +60,8 @@
 _cl_playerskin 0
 crosshair 5
 fov 90
+set cl_zoomfactor 5  // how much +zoom will zoom (1-16)
+set cl_zoomspeed 3.5 // how fast it will zoom (0.5-16), negative values mean instant zoom
 freelook 1
 sensitivity 6
 seta scmenu_mouse_speed 1

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2007-04-11 18:29:46 UTC (rev 2301)
+++ trunk/data/qcsrc/server/cl_client.qc	2007-04-13 21:50:29 UTC (rev 2302)
@@ -457,6 +457,7 @@
 		self.oldvelocity = self.velocity;
 
 		self.viewzoom = 0.6;
+		self.has_zoomed = 0;
 
 		self.customizeentityforclient = Client_customizeentityforclient;
 
@@ -1443,21 +1444,60 @@
 
 		W_WeaponFrame();
 
-		if (self.button4 || (self.weapon == WEP_NEX && self.button3))
-		{
-			if (cvar("g_minstagib") && self.button3)
-			{
+		if (cvar("g_minstagib"))
+			if(self.button3)
 				if (self.jump_interval <= (time + 0.1))
 				{
 					self.jump_interval = time + 1;
 					W_Laser_Attack();
 				}
+		
+		{
+			float zoomfactor, zoomspeed, zoomdir;
+			zoomfactor = self.cvar_cl_zoomfactor;
+			if(zoomfactor < 1 || zoomfactor > 16)
+				zoomfactor = 2.5;
+			zoomspeed = self.cvar_cl_zoomspeed;
+			if(zoomspeed >= 0) // < 0 is instant zoom
+				if(zoomspeed < 0.5 || zoomspeed > 16)
+					zoomspeed = 3.5;
+			
+			zoomdir = self.button4;
+			if(self.button3)
+				if(self.weapon == WEP_NEX)
+					if(!cvar("g_minstagib"))
+						zoomdir = 1;
+
+			if(zoomdir)
+				self.has_zoomed = 1;
+
+			if(self.has_zoomed)
+			{
+				if(zoomspeed <= 0) // instant zoom
+				{
+					if(zoomdir)
+						self.viewzoom = 1 / zoomfactor;
+					else
+						self.viewzoom = 1;
+				}
+				else
+				{
+					// geometric zoom would be:
+					//   self.viewzoom = bound(1 / zoomfactor, self.viewzoom * pow(zoomfactor, (zoomdir ? -1 : 1) * frametime * zoomspeed), 1);
+					// however, testing showed that arithmetic/harmonic zoom works better
+					if(zoomdir)
+						// self.viewzoom = 1 / bound(1, 1 / self.viewzoom + (zoomdir ? 1 : -1) * frametime * zoomspeed * (zoomfactor - 1), zoomfactor);
+						// zoom in = arithmetic: 1x, 2x, 3x, 4x, ..., 8x
+						self.viewzoom = 1 / bound(1, 1 / self.viewzoom + frametime * zoomspeed * (zoomfactor - 1), zoomfactor);
+					else
+						// self.viewzoom = bound(1 / zoomfactor, self.viewzoom + (zoomdir ? -1 : 1) * frametime * zoomspeed * (1 - 1 / zoomfactor), 1);
+						// zoom out = harmonic: 8/1x, 8/2x, 8/3x, 8/4x, ..., 8/8x
+						self.viewzoom = bound(1 / zoomfactor, self.viewzoom + frametime * zoomspeed * (1 - 1 / zoomfactor), 1);
+				}
 			}
-			else if (self.viewzoom > 0.4)
-				self.viewzoom = max (0.4, self.viewzoom - frametime * 2);
+			else
+				self.viewzoom = min(1, self.viewzoom + frametime); // spawn zoom-in
 		}
-		else if (self.viewzoom < 1.0)
-			self.viewzoom = min (1.0, self.viewzoom + frametime);
 
 		player_powerups();
 		player_regen();

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2007-04-11 18:29:46 UTC (rev 2301)
+++ trunk/data/qcsrc/server/defs.qh	2007-04-13 21:50:29 UTC (rev 2302)
@@ -252,7 +252,11 @@
 float default_player_alpha;
 float default_weapon_alpha;
 
+.float has_zoomed;
+
 .float() customizeentityforclient;
+.float cvar_cl_zoomfactor;
+.float cvar_cl_zoomspeed;
 .float cvar_cl_playerdetailreduction;
 .float cvar_cl_nogibs;
 .float cvar_scr_centertime;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2007-04-11 18:29:46 UTC (rev 2301)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2007-04-13 21:50:29 UTC (rev 2302)
@@ -358,6 +358,8 @@
 }
 void GetCvars(float f)
 {
+	GetCvars_handleFloat(f, cvar_cl_zoomfactor, "cl_zoomfactor");
+	GetCvars_handleFloat(f, cvar_cl_zoomspeed, "cl_zoomspeed");
 	GetCvars_handleFloat(f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
 	GetCvars_handleFloat(f, cvar_cl_nogibs, "cl_nogibs");
 	GetCvars_handleFloat(f, cvar_scr_centertime, "scr_centertime");




More information about the nexuiz-commits mailing list