overlapBox method

  1. @override
List<SimOverlapHit> 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<SimOverlapHit> 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 probePose = Matrix4.compose(center, rotation, Vector3(1, 1, 1));
  final probeAabb = shapeWorldAabb(
    BoxShape(halfExtents: halfExtents),
    probePose,
  );
  final out = <SimOverlapHit>[];
  _colliders.forEach((handle, collider) {
    if (!_passesFilters(
      collider,
      layerMask: layerMask,
      includeFixed: includeFixed,
      includeKinematic: includeKinematic,
      includeTriggers: includeTriggers,
    )) {
      return;
    }
    final aabb = shapeWorldAabb(collider.shape, _colliderWorldPose(collider));
    if (!_aabbOverlap(probeAabb, aabb)) return;
    out.add(SimOverlapHit(colliderHandle: handle));
  });
  return out;
}