void CGSyscall_CM_TransformedTrace( trace_t *results, const vec3_t start, const vec3_t end, const vec3_t mins, const vec3_t maxs, clipHandle_t model, int brushmask, const vec3_t origin, const vec3_t angles, int capsule ) { if ( capsule ) trap_CM_TransformedCapsuleTrace( results, start, end, mins, maxs, model, brushmask, origin, angles ); else trap_CM_TransformedBoxTrace( results, start, end, mins, maxs, model, brushmask, origin, angles ); }
/* ==================== CG_ClipMoveToEntities ==================== */ static void CG_ClipMoveToEntities ( const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int skipNumber, int mask, trace_t *tr, traceType_t traceType ) { int i; trace_t trace; entityState_t *ent; clipHandle_t cmodel; vec3_t origin, angles; centity_t *cent; for ( i = 0 ; i < cg_numSolidEntities ; i++ ) { cent = cg_solidEntities[ i ]; ent = ¢->currentState; if ( ent->number == skipNumber ) { continue; } // if it doesn't have any brushes of a type we // are looking for, ignore it if ( !(mask & ent->contents) ) { continue; } if ( ent->collisionType == CT_SUBMODEL ) { cmodel = trap_CM_InlineModel( ent->modelindex ); VectorCopy( cent->lerpAngles, angles ); BG_EvaluateTrajectory( ¢->currentState.pos, cg.physicsTime, origin ); } else if ( ent->collisionType == CT_CAPSULE ) { cmodel = trap_CM_TempCapsuleModel( ent->mins, ent->maxs, ent->contents ); VectorCopy( vec3_origin, angles ); VectorCopy( cent->lerpOrigin, origin ); } else /* if ( ent->collisionType == CT_AABB ) */ { cmodel = trap_CM_TempBoxModel( ent->mins, ent->maxs, ent->contents ); VectorCopy( vec3_origin, angles ); VectorCopy( cent->lerpOrigin, origin ); } if ( traceType == TT_BISPHERE ) { trap_CM_TransformedBiSphereTrace( &trace, start, end, mins[ 0 ], maxs[ 0 ], cmodel, mask, origin ); } else if ( traceType == TT_CAPSULE ) { trap_CM_TransformedCapsuleTrace ( &trace, start, end, mins, maxs, cmodel, mask, origin, angles ); } else /* if ( traceType == TT_AABB ) */ { trap_CM_TransformedBoxTrace ( &trace, start, end, mins, maxs, cmodel, mask, origin, angles ); } if (trace.allsolid || trace.fraction < tr->fraction) { trace.entityNum = ent->number; if( tr->lateralFraction < trace.lateralFraction ) { float oldLateralFraction = tr->lateralFraction; *tr = trace; tr->lateralFraction = oldLateralFraction; } else { *tr = trace; } } else if (trace.startsolid) { tr->startsolid = qtrue; tr->entityNum = ent->number; } if ( tr->allsolid ) { return; } } }