Skip to content

Commit

Permalink
* Bug fix to collision optimisation (arQon)
Browse files Browse the repository at this point in the history
  • Loading branch information
timangus committed Oct 6, 2007
1 parent 5692e30 commit da8f451
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 3 deletions.
2 changes: 2 additions & 0 deletions code/qcommon/cm_local.h
Expand Up @@ -185,6 +185,8 @@ void CM_StoreBrushes( leafList_t *ll, int nodenum );
void CM_BoxLeafnums_r( leafList_t *ll, int nodenum );

cmodel_t *CM_ClipHandleToModel( clipHandle_t handle );
qboolean CM_BoundsIntersect( const vec3_t mins, const vec3_t maxs, const vec3_t mins2, const vec3_t maxs2 );
qboolean CM_BoundsIntersectPoint( const vec3_t mins, const vec3_t maxs, const vec3_t point );

// cm_patch.c

Expand Down
2 changes: 1 addition & 1 deletion code/qcommon/cm_patch.c
Expand Up @@ -1386,7 +1386,7 @@ void CM_TraceThroughPatchCollide( traceWork_t *tw, const struct patchCollide_s *
static cvar_t *cv;
#endif //BSPC

if ( !BoundsIntersect( tw->bounds[0], tw->bounds[1],
if ( !CM_BoundsIntersect( tw->bounds[0], tw->bounds[1],
pc->bounds[0], pc->bounds[1] ) ) {
return;
}
Expand Down
41 changes: 40 additions & 1 deletion code/qcommon/cm_test.c
Expand Up @@ -250,7 +250,7 @@ int CM_PointContents( const vec3_t p, clipHandle_t model ) {
brushnum = cm.leafbrushes[leaf->firstLeafBrush+k];
b = &cm.brushes[brushnum];

if ( !BoundsIntersectPoint( b->bounds[0], b->bounds[1], p ) ) {
if ( !CM_BoundsIntersectPoint( b->bounds[0], b->bounds[1], p ) ) {
continue;
}

Expand Down Expand Up @@ -480,3 +480,42 @@ int CM_WriteAreaBits (byte *buffer, int area)
return bytes;
}

/*
====================
CM_BoundsIntersect
====================
*/
qboolean CM_BoundsIntersect( const vec3_t mins, const vec3_t maxs, const vec3_t mins2, const vec3_t maxs2 )
{
if (maxs[0] < mins2[0] - SURFACE_CLIP_EPSILON ||
maxs[1] < mins2[1] - SURFACE_CLIP_EPSILON ||
maxs[2] < mins2[2] - SURFACE_CLIP_EPSILON ||
mins[0] > maxs2[0] + SURFACE_CLIP_EPSILON ||
mins[1] > maxs2[1] + SURFACE_CLIP_EPSILON ||
mins[2] > maxs2[2] + SURFACE_CLIP_EPSILON)
{
return qfalse;
}

return qtrue;
}

/*
====================
CM_BoundsIntersectPoint
====================
*/
qboolean CM_BoundsIntersectPoint( const vec3_t mins, const vec3_t maxs, const vec3_t point )
{
if (maxs[0] < point[0] - SURFACE_CLIP_EPSILON ||
maxs[1] < point[1] - SURFACE_CLIP_EPSILON ||
maxs[2] < point[2] - SURFACE_CLIP_EPSILON ||
mins[0] > point[0] + SURFACE_CLIP_EPSILON ||
mins[1] > point[1] + SURFACE_CLIP_EPSILON ||
mins[2] > point[2] + SURFACE_CLIP_EPSILON)
{
return qfalse;
}

return qtrue;
}
2 changes: 1 addition & 1 deletion code/qcommon/cm_trace.c
Expand Up @@ -685,7 +685,7 @@ void CM_TraceThroughLeaf( traceWork_t *tw, cLeaf_t *leaf ) {
continue;
}

if ( !BoundsIntersect( tw->bounds[0], tw->bounds[1],
if ( !CM_BoundsIntersect( tw->bounds[0], tw->bounds[1],
b->bounds[0], b->bounds[1] ) ) {
continue;
}
Expand Down

0 comments on commit da8f451

Please sign in to comment.