overlapBox method
List<OverlapHit>
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<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;
}