]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
fix bug in tracebox->line and traceline->point redirection causing endposnudge to...
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 7 Jan 2010 12:40:34 +0000 (12:40 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 7 Jan 2010 12:40:34 +0000 (12:40 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9802 d7cf8633-e32d-0410-b094-e92efae38249

cl_collision.c
sv_phys.c

index a98d0b5c6525e6e686415044fde4362020bddf82..8978f374f25a457f8a491ae90e60ec04e547bdee 100644 (file)
@@ -463,7 +463,10 @@ trace_t CL_TraceLine(const vec3_t start, const vec3_t end, int type, prvm_edict_
        vec3_t end;
        vec_t len = 0;
 
-       if(!VectorCompare(start, pEnd) && collision_endposnudge.value > 0)
+       if (VectorCompare(start, pEnd))
+               return CL_TracePoint(start, type, passedict, hitsupercontentsmask, hitnetworkbrushmodels, hitnetworkplayers, hitnetworkentity, hitcsqcentities);
+
+       if(collision_endposnudge.value > 0)
        {
                // TRICK: make the trace 1 qu longer!
                VectorSubtract(pEnd, start, end);
@@ -472,10 +475,10 @@ trace_t CL_TraceLine(const vec3_t start, const vec3_t end, int type, prvm_edict_
        }
        else
                VectorCopy(pEnd, end);
-#endif
-
+#else
        if (VectorCompare(start, end))
                return CL_TracePoint(start, type, passedict, hitsupercontentsmask, hitnetworkbrushmodels, hitnetworkplayers, hitnetworkentity, hitcsqcentities);
+#endif
 
        if (hitnetworkentity)
                *hitnetworkentity = 0;
@@ -701,6 +704,19 @@ trace_t CL_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
        vec3_t end;
        vec_t len = 0;
 
+       if (VectorCompare(mins, maxs))
+       {
+               vec3_t shiftstart, shiftend;
+               VectorAdd(start, mins, shiftstart);
+               VectorAdd(pEnd, mins, shiftend);
+               if (VectorCompare(start, pEnd))
+                       trace = CL_TracePoint(shiftstart, type, passedict, hitsupercontentsmask, hitnetworkbrushmodels, hitnetworkplayers, hitnetworkentity, hitcsqcentities);
+               else
+                       trace = CL_TraceLine(shiftstart, shiftend, type, passedict, hitsupercontentsmask, hitnetworkbrushmodels, hitnetworkplayers, hitnetworkentity, hitcsqcentities);
+               VectorSubtract(trace.endpos, mins, trace.endpos);
+               return trace;
+       }
+
        if(!VectorCompare(start, pEnd) && collision_endposnudge.value > 0)
        {
                // TRICK: make the trace 1 qu longer!
@@ -710,8 +726,7 @@ trace_t CL_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
        }
        else
                VectorCopy(pEnd, end);
-#endif
-
+#else
        if (VectorCompare(mins, maxs))
        {
                vec3_t shiftstart, shiftend;
@@ -724,6 +739,7 @@ trace_t CL_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
                VectorSubtract(trace.endpos, mins, trace.endpos);
                return trace;
        }
+#endif
 
        if (hitnetworkentity)
                *hitnetworkentity = 0;
index ab3e7d9cadb957aa2e6160a2fb142b268fcef9ec..2b1aa58d29327a7413b1f1e3d9bf0669fd5294f3 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -271,7 +271,10 @@ trace_t SV_TraceLine(const vec3_t start, const vec3_t end, int type, prvm_edict_
        vec3_t end;
        vec_t len = 0;
 
-       if(!VectorCompare(start, pEnd) && collision_endposnudge.value > 0)
+       if (VectorCompare(start, pEnd))
+               return SV_TracePoint(start, type, passedict, hitsupercontentsmask);
+
+       if(collision_endposnudge.value > 0)
        {
                // TRICK: make the trace 1 qu longer!
                VectorSubtract(pEnd, start, end);
@@ -280,13 +283,13 @@ trace_t SV_TraceLine(const vec3_t start, const vec3_t end, int type, prvm_edict_
        }
        else
                VectorCopy(pEnd, end);
+#else
+       if (VectorCompare(start, end))
+               return SV_TracePoint(start, type, passedict, hitsupercontentsmask);
 #endif
 
        //return SV_TraceBox(start, vec3_origin, vec3_origin, end, type, passedict, hitsupercontentsmask);
 
-       if (VectorCompare(start, end))
-               return SV_TracePoint(start, type, passedict, hitsupercontentsmask);
-
        VectorCopy(start, clipstart);
        VectorCopy(end, clipend);
        VectorClear(clipmins2);
@@ -450,6 +453,19 @@ trace_t SV_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
        vec3_t end;
        vec_t len = 0;
 
+       if (VectorCompare(mins, maxs))
+       {
+               vec3_t shiftstart, shiftend;
+               VectorAdd(start, mins, shiftstart);
+               VectorAdd(pEnd, mins, shiftend);
+               if (VectorCompare(start, pEnd))
+                       trace = SV_TracePoint(shiftstart, type, passedict, hitsupercontentsmask);
+               else
+                       trace = SV_TraceLine(shiftstart, shiftend, type, passedict, hitsupercontentsmask);
+               VectorSubtract(trace.endpos, mins, trace.endpos);
+               return trace;
+       }
+
        if(!VectorCompare(start, pEnd) && collision_endposnudge.value > 0)
        {
                // TRICK: make the trace 1 qu longer!
@@ -459,8 +475,7 @@ trace_t SV_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
        }
        else
                VectorCopy(pEnd, end);
-#endif
-
+#else
        if (VectorCompare(mins, maxs))
        {
                vec3_t shiftstart, shiftend;
@@ -473,6 +488,7 @@ trace_t SV_TraceBox(const vec3_t start, const vec3_t mins, const vec3_t maxs, co
                VectorSubtract(trace.endpos, mins, trace.endpos);
                return trace;
        }
+#endif
 
        VectorCopy(start, clipstart);
        VectorCopy(end, clipend);