rayDistance method

double rayDistance(
  1. Vector3 origin,
  2. Vector3 direction, [
  3. double inflate = 0.0
])

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;
}