All pastes #281033 Raw Edit

Unnamed

public text v1 · immutable
#281033 ·published 2006-12-16 12:50 UTC
rendered paste body
qboolean ID_INLINE BoxTraceTestResult( int axis, float dist, const vec3_t start, const vec3_t forward, const vec3_t mins, const vec3_t maxs, vec3_t result ) {
	result[0] = start[0] + forward[0] * dist;
	result[1] = start[1] + forward[1] * dist;
	result[2] = start[2] + forward[2] * dist;

	if (axis != 0 && (result[0] < mins[0] || result[0] > maxs[0]))
		return qfalse;
	if (axis != 1 && (result[1] < mins[1] || result[1] > maxs[1]))
		return qfalse;
	if (axis != 2 && (result[2] < mins[2] || result[2] > maxs[2]))
		return qfalse;
	return qtrue;
}

qboolean ID_INLINE BoxTraceTestSides( int axis, const vec3_t start, const vec3_t forward, const vec3_t mins, const vec3_t maxs, vec3_t result ) {
	if (forward[axis] > 0 && start[axis] <= mins[axis]) {
		float dist = ( mins[axis] - start[axis] ) / forward[axis];
		if (BoxTraceTestResult(axis, dist, start, forward, mins, maxs, result))
			return qtrue;
	}
	if (forward[axis] < 0 && start[axis] >= maxs[axis]) {
		float dist = ( maxs[axis] - start[axis] ) / forward[axis];
		if (BoxTraceTestResult(axis, dist, start, forward, mins, maxs, result))
			return qtrue;
	}
	return qfalse;
}

qboolean BoxTraceImpact(const vec3_t start, const vec3_t forward, const vec3_t container, vec3_t result ) {
	vec3_t mins, maxs;

	mins[0] = -container[2];
	mins[1] = -container[2];
	mins[2] = container[0];
	maxs[0] = container[2];
	maxs[1] = container[2];
	maxs[2] = container[1];

	if (BoxTraceTestSides(0, start, forward, mins, maxs, result))
		return qtrue;
	if (BoxTraceTestSides(1, start, forward, mins, maxs, result))
		return qtrue;
	if (BoxTraceTestSides(2, start, forward, mins, maxs, result))
		return qtrue;
	return qfalse;
}