overlapBox method
List<SimOverlapHit>
overlapBox(
- Vector3 center,
- Vector3 halfExtents,
- Quaternion rotation, {
- int layerMask = 0xFFFFFFFF,
- bool includeFixed = true,
- bool includeKinematic = true,
- bool includeDynamic = true,
- 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;
}