@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
50 lines (38 loc) • 1.21 kB
JavaScript
import { fabsf } from "../../../math/fabsf.js";
/**
*
* @param {number} x0
* @param {number} y0
* @param {number} x1
* @param {number} y1
* @param {number} origin_x
* @param {number} origin_y
* @param {number} direction_x
* @param {number} direction_y
* @return {boolean} true if hit found and false otherwise
*/
export function aabb2_intersects_ray(
x0, y0,
x1, y1,
origin_x, origin_y,
direction_x, direction_y
) {
// Z Projection
const extents_x = (x1 - x0) * 0.5;
const center_x = x0 + extents_x;
const diff_x = origin_x - center_x;
if (diff_x * direction_x >= 0.0 && fabsf(diff_x) > extents_x) {
return false;
}
// Y projection
const extents_y = (y1 - y0) * 0.5;
const center_y = y0 + extents_y;
const diff_y = origin_y - center_y;
if (diff_y * direction_y >= 0.0 && fabsf(diff_y) > extents_y) {
return false;
}
const abs_direction_y = fabsf(direction_y);
const abs_direction_x = fabsf(direction_x);
const f2 = fabsf(direction_x * diff_y - direction_y * diff_x);
return f2 <= extents_x * abs_direction_y + extents_y * abs_direction_x;
}