rayDistance method
The ray parameter at which the ray enters the body's box grown by
inflate on every side: 0 when origin is inside, -1 when it misses.
Implementation
double rayDistance(Vector3 origin, Vector3 direction, [double inflate = 0.0]) {
final mn = position - Vector3(halfWidth + inflate, inflate, halfWidth + inflate);
final mx = position + Vector3(halfWidth + inflate, height + inflate, halfWidth + inflate);
var near = double.negativeInfinity;
var far = double.infinity;
for (var axis = 0; axis < 3; axis++) {
final d = direction[axis];
final inv = d != 0.0 ? 1.0 / d : double.infinity;
final a = (mn[axis] - origin[axis]) * inv;
final b = (mx[axis] - origin[axis]) * inv;
final lo = a < b ? a : b;
final hi = a > b ? a : b;
if (lo > near) near = lo;
if (hi < far) far = hi;
}
if (far < near || far < 0.0) return -1.0;
return near > 0.0 ? near : 0.0;
}