示例#1
0
/*
============
G_TestEntityPosition

============
*/
gentity_t	*G_TestEntityPosition( gentity_t *ent ) {
	trace_t	tr;
	qboolean	capsule;
	vec3_t	origin;
	int		mask;

	if ( ent->client ) {
		VectorCopy( ent->client->ps.origin, origin );
		capsule = ent->client->ps.capsule;
	} else {
		VectorCopy( ent->s.pos.trBase, origin );
		capsule = ent->s.capsule;
	}

	if ( ent->clipmask ) {
		mask = ent->clipmask;
	} else {
		mask = MASK_SOLID;
	}

	if ( capsule ) {
		trap_TraceCapsule( &tr, origin, ent->s.mins, ent->s.maxs, origin, ent->s.number, mask );
	} else {
		trap_Trace( &tr, origin, ent->s.mins, ent->s.maxs, origin, ent->s.number, mask );
	}
	
	if (tr.startsolid)
		return &g_entities[ tr.entityNum ];
		
	return NULL;
}
示例#2
0
/*
============
G_TestEntityPosition

============
*/
gentity_t	*G_TestEntityPosition( gentity_t *ent ) {
	trace_t	tr;
	collisionType_t	collisionType;
	vec3_t	origin;
	int		mask;

	if ( ent->player ) {
		VectorCopy( ent->player->ps.origin, origin );
		collisionType = ent->player->ps.collisionType;
	} else {
		VectorCopy( ent->s.pos.trBase, origin );
		collisionType = ent->s.collisionType;
	}

	if ( ent->clipmask ) {
		mask = ent->clipmask;
	} else {
		mask = MASK_SOLID;
	}

	if ( collisionType == CT_CAPSULE ) {
		trap_TraceCapsule( &tr, origin, ent->s.mins, ent->s.maxs, origin, ent->s.number, mask );
	} else {
		trap_Trace( &tr, origin, ent->s.mins, ent->s.maxs, origin, ent->s.number, mask );
	}
	
	if (tr.startsolid)
		return &g_entities[ tr.entityNum ];
		
	return NULL;
}
示例#3
0
void trap_TraceCapsuleNoEnts(trace_t *results, const vec3_t start, const vec3_t mins, const vec3_t maxs, const vec3_t end, int passEntityNum, int contentmask)
{
	trap_TraceCapsule(results, start, mins, maxs, end, -2, contentmask);
}