overlapBox method

  1. @override
List<OverlapHit> overlapBox(
  1. Vector3 center,
  2. Vector3 halfExtents,
  3. Quaternion rotation, {
  4. int layerMask = 0xFFFFFFFF,
  5. bool includeFixed = true,
  6. bool includeKinematic = true,
  7. bool includeDynamic = true,
  8. bool includeTriggers = false,
})
override

Implementation

@override
List<OverlapHit> overlapBox(
  Vector3 center,
  Vector3 halfExtents,
  Quaternion rotation, {
  int layerMask = 0xFFFFFFFF,
  bool includeFixed = true,
  bool includeKinematic = true,
  bool includeDynamic = true,
  bool includeTriggers = false,
}) {
  // Conservative AABB-of-OBB approximation.
  // TODO(exact-obb-overlap): SAT-test the probe OBB against each
  // collider for exact results; the current AABB-of-OBB produces
  // false positives at corners when the probe is rotated.
  final r = Matrix4.compose(center, rotation, Vector3(1, 1, 1));
  final probeAabb = shapeWorldAabb(BoxShape(halfExtents: halfExtents), r);
  final out = <OverlapHit>[];
  for (final collider in _colliders) {
    if (!_passesFilters(
      collider,
      layerMask: layerMask,
      includeFixed: includeFixed,
      includeKinematic: includeKinematic,
      includeTriggers: includeTriggers,
    )) {
      continue;
    }
    final aabb = shapeWorldAabb(collider.shape, collider.worldPose);
    if (!_aabbOverlap(probeAabb, aabb)) continue;
    out.add(OverlapHit(node: collider.node, collider: collider));
  }
  return out;
}