@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
48 lines (37 loc) • 1.29 kB
JavaScript
/**
*
* @param {Vector3} result
* @param {number} distance
* @param {number} origin_x
* @param {number} source_y
* @param {number} source_z
* @param {number} direction_x
* @param {number} direction_y
* @param {number} direction_z
* @returns {boolean} true if displaced successfully, false if direction had 0 magnitude
*/
export function v3_displace_in_direction(
result,
distance,
origin_x, source_y, source_z,
direction_x, direction_y, direction_z
) {
if (distance === 0) {
result.set(origin_x, source_y, source_z);
return true;
}
// scale direction to have length equal to distance
const direction_length_sqr = direction_x * direction_x + direction_y * direction_y + direction_z * direction_z;
if (direction_length_sqr === 0) {
// direction vector is zero length, avoid division by zero, clamp to source instead
result.set(origin_x, source_y, source_z);
return false;
}
const direction_length = Math.sqrt(direction_length_sqr);
const m = distance / direction_length;
const x = origin_x + direction_x * m;
const y = source_y + direction_y * m;
const z = source_z + direction_z * m;
result.set(x, y, z);
return true;
}