From b56a557d3452d3dc18ed0625db50e2e50946f914 Mon Sep 17 00:00:00 2001 From: havoc Date: Mon, 24 Oct 2005 04:19:23 +0000 Subject: [PATCH] made an optimized SV_ClipMoveToWorld function to save time on large numbers of world collisions git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@5762 d7cf8633-e32d-0410-b094-e92efae38249 --- world.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/world.c b/world.c index ff129dfd..7468e135 100644 --- 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) -- 2.39.2