コード例 #1
0
ファイル: cg_syscalls.c プロジェクト: Almightygir/OpenJK
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 ); }
コード例 #2
0
/*
====================
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 = &cent->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( &cent->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;
		}
	}
}