From 04637092b1360e32935bbfacf1365a743b74b0d9 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 13 Jan 2009 07:53:15 +0000 Subject: [PATCH] turn traceline_inverted into a tracebox_inverted function git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5499 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/g_subs.qc | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/data/qcsrc/server/g_subs.qc b/data/qcsrc/server/g_subs.qc index 055ea2583..704014604 100644 --- a/data/qcsrc/server/g_subs.qc +++ b/data/qcsrc/server/g_subs.qc @@ -291,8 +291,61 @@ void traceline_antilag (entity source, vector v1, vector v2, float nomonst, enti 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 @@ void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent) return; } } +#else + tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent); } /* -- 2.39.2