]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
made an optimized SV_ClipMoveToWorld function to save time on large numbers of world...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 24 Oct 2005 04:19:23 +0000 (04:19 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 24 Oct 2005 04:19:23 +0000 (04:19 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5762 d7cf8633-e32d-0410-b094-e92efae38249

world.c

diff --git a/world.c b/world.c
index ff129dfd5165647d41a00bba78d14f8b84cd3211..7468e1357e5dd2902c9285892d9a820ea96ab95c 100644 (file)
--- a/world.c
+++ b/world.c
@@ -521,6 +521,28 @@ trace_t SV_ClipMoveToEntity(prvm_edict_t *ent, const vec3_t start, const vec3_t
        return trace;
 }
 
+/*
+==================
+SV_ClipMoveToWorld
+==================
+*/
+trace_t SV_ClipMoveToWorld(const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int movetype, int hitsupercontents)
+{
+       trace_t trace;
+       float starttransformedmins[3], starttransformedmaxs[3], endtransformedmins[3], endtransformedmaxs[3];
+       memset(&trace, 0, sizeof(trace));
+       trace.fraction = trace.realfraction = 1;
+       VectorAdd(start, maxs, starttransformedmaxs);
+       VectorAdd(end, maxs, endtransformedmaxs);
+       VectorAdd(start, mins, starttransformedmins);
+       VectorAdd(end, mins, endtransformedmins);
+       sv.worldmodel->TraceBox(sv.worldmodel, 0, &trace, starttransformedmins, starttransformedmaxs, endtransformedmins, endtransformedmaxs, hitsupercontents);
+       trace.fraction = bound(0, trace.fraction, 1);
+       trace.realfraction = bound(0, trace.realfraction, 1);
+       VectorLerp(start, trace.fraction, end, trace.endpos);
+       return trace;
+}
+
 //===========================================================================
 
 /*
@@ -574,7 +596,7 @@ trace_t SV_Move(const vec3_t start, const vec3_t mins, const vec3_t maxs, const
        }
 
        // clip to world
-       cliptrace = SV_ClipMoveToEntity(prog->edicts, clipstart, clipmins, clipmaxs, clipend, type, hitsupercontentsmask);
+       cliptrace = SV_ClipMoveToWorld(clipstart, clipmins, clipmaxs, clipend, type, hitsupercontentsmask);
        if (cliptrace.startsolid || cliptrace.fraction < 1)
                cliptrace.ent = prog->edicts;
        if (type == MOVE_WORLDONLY)