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

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Nov 21 10:23:55 EST 2009


Author: div0
Date: 2009-11-21 10:23:54 -0500 (Sat, 21 Nov 2009)
New Revision: 8305

Modified:
   trunk/data/qcsrc/server/gamecommand.qc
Log:
a new radarmap mode --lineblock for debugging traceline (the other modes use point or box traces); result: patches are broken for traceline too


Modified: trunk/data/qcsrc/server/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/server/gamecommand.qc	2009-11-21 14:41:49 UTC (rev 8304)
+++ trunk/data/qcsrc/server/gamecommand.qc	2009-11-21 15:23:54 UTC (rev 8305)
@@ -49,6 +49,46 @@
 
 	return FullTraceFraction(a, mi, ma, b);
 }
+float RadarMapAtPoint_LineBlock(float x, float y, float w, float h, float zmin, float zsize, float q)
+{
+	vector o, mi, ma;
+	float i, r;
+	vector dz;
+
+	q = 256 * q - 1;
+	// 256q-1 is the ideal sample count to map equal amount of sample values to one pixel value
+
+	mi = '0 0 0';
+	dz = (zsize / q) * '0 0 1';
+	ma = '1 0 0' * w + '0 1 0' * h + dz;
+	o = '1 0 0' * x + '0 1 0' * y + '0 0 1' * zmin;
+
+	if(x < world.absmin_x - w)
+		return 0;
+	if(y < world.absmin_y - h)
+		return 0;
+	if(x > world.absmax_x)
+		return 0;
+	if(y > world.absmax_y)
+		return 0;
+
+	r = 0;
+	for(i = 0; i < q; ++i)
+	{
+		vector v1, v2;
+		v1 = v2 = o + dz * i + mi;
+		v1_x += random() * (ma_x - mi_x);
+		v1_y += random() * (ma_y - mi_y);
+		v1_z += random() * (ma_z - mi_z);
+		v2_x += random() * (ma_x - mi_x);
+		v2_y += random() * (ma_y - mi_y);
+		v2_z += random() * (ma_z - mi_z);
+		traceline(v1, v2, MOVE_WORLDONLY, world);
+		if(trace_startsolid || trace_fraction < 1)
+			++r;
+	}
+	return r / q;
+}
 float RadarMapAtPoint_Block(float x, float y, float w, float h, float zmin, float zsize, float q)
 {
 	vector o, mi, ma;
@@ -290,6 +330,13 @@
 					sharpen_set(x, l);
 				}
 				break;
+			case 24:
+				for(x = 0; x < self.size_x; ++x)
+				{
+					l = RadarMapAtPoint_LineBlock(self.mins_x + x * self.maxs_x, self.mins_y + (self.size_y - self.frame) * self.maxs_y, self.maxs_x, self.maxs_y, self.mins_z, self.maxs_z, self.size_z);
+					sharpen_set(x, l);
+				}
+				break;
 		}
 
 		// do we have enough lines?
@@ -381,6 +428,10 @@
 			radarmapper.count &~= 24;
 			radarmapper.count |= 16;
 		}
+		else if(argv(i) == "--lineblock")
+		{
+			radarmapper.count |= 24;
+		}
 		else if(argv(i) == "--flags") // for the recursive call
 		{
 			++i;
@@ -407,7 +458,7 @@
 		{
 			remove(radarmapper);
 			radarmapper = world;
-			print("Usage: sv_cmd radarmap [--force] [--loop] [--quit] [--block | --trace | --sample] [--sharpen N] [--res W H] [--qual Q]\n");
+			print("Usage: sv_cmd radarmap [--force] [--loop] [--quit] [--block | --trace | --sample | --lineblock] [--sharpen N] [--res W H] [--qual Q]\n");
 			print("The quality factor Q is roughly proportional to the time taken.\n");
 			print("--trace supports no quality factor; its result should look like --block with infinite quality factor.\n");
 			print("--block \n");



More information about the nexuiz-commits mailing list