mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +00:00
* Bug fix to collision optimisation (arQon)
This commit is contained in:
parent
5692e30fa9
commit
da8f451263
4 changed files with 44 additions and 3 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue