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