r5499 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Jan 13 02:53:15 EST 2009


Author: div0
Date: 2009-01-13 02:53:15 -0500 (Tue, 13 Jan 2009)
New Revision: 5499

Modified:
   trunk/data/qcsrc/server/g_subs.qc
Log:
turn traceline_inverted into a tracebox_inverted function


Modified: trunk/data/qcsrc/server/g_subs.qc
===================================================================
--- trunk/data/qcsrc/server/g_subs.qc	2009-01-13 06:26:02 UTC (rev 5498)
+++ trunk/data/qcsrc/server/g_subs.qc	2009-01-13 07:53:15 UTC (rev 5499)
@@ -291,8 +291,61 @@
 	traceline_antilag_force(source, v1, v2, nomonst, forent, lag);
 }
 
+void tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomonsters, entity forent)
+{
+	vector pos, dir, t;
+	float nudge;
+
+	//nudge = 2 * cvar("collision_impactnudge"); // why not?
+	nudge = 0.5;
+
+	dir = normalize(v2 - v1);
+
+	pos = v1 + dir * nudge;
+
+	for(;;)
+	{
+		if((pos - v1) * dir >= (v2 - v1) * dir)
+		{
+			// went too far
+			trace_fraction = 1;
+			return;
+		}
+
+		tracebox(pos, mi, ma, v2, nomonsters, forent);
+
+		if(trace_startsolid)
+		{
+			// we started inside solid.
+			// then trace from endpos to pos
+			t = trace_endpos;
+			tracebox(t, mi, ma, pos, nomonsters, forent);
+			if(trace_startsolid)
+			{
+				// t is inside solid? bad
+				// force advance, then
+				pos = pos + dir * nudge;
+			}
+			else
+			{
+				// we actually LEFT solid!
+				trace_fraction = ((trace_endpos - v1) * dir) / ((v2 - v1) * dir);
+				return;
+			}
+		}
+		else
+		{
+			// pos is outside solid?!? but why?!? never mind, just return it.
+			trace_endpos = pos;
+			trace_fraction = ((trace_endpos - v1) * dir) / ((v2 - v1) * dir);
+			return;
+		}
+	}
+}
+
 void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent)
 {
+#if 0
 	vector pos, dir, t;
 	float nudge;
 
@@ -341,6 +394,8 @@
 			return;
 		}
 	}
+#else
+	tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent);
 }
 
 /*




More information about the nexuiz-commits mailing list