raycastAll method

  1. @override
List<SimRaycastHit> raycastAll(
  1. Ray ray, {
  2. double maxDistance = double.infinity,
  3. int layerMask = 0xFFFFFFFF,
  4. bool includeFixed = true,
  5. bool includeKinematic = true,
  6. bool includeDynamic = true,
  7. bool includeTriggers = false,
})
override

Implementation

@override
List<SimRaycastHit> raycastAll(
  Ray ray, {
  double maxDistance = double.infinity,
  int layerMask = 0xFFFFFFFF,
  bool includeFixed = true,
  bool includeKinematic = true,
  bool includeDynamic = true,
  bool includeTriggers = false,
}) {
  final hits = <SimRaycastHit>[];
  _colliders.forEach((handle, collider) {
    if (!_passesFilters(
      collider,
      layerMask: layerMask,
      includeFixed: includeFixed,
      includeKinematic: includeKinematic,
      includeTriggers: includeTriggers,
    )) {
      return;
    }
    final hit = rayHitsShape(
      ray,
      collider.shape,
      _colliderWorldPose(collider),
      maxDistance,
    );
    if (hit == null) return;
    hits.add(
      SimRaycastHit(
        colliderHandle: handle,
        worldPoint: hit.worldPoint,
        worldNormal: hit.worldNormal,
        distance: hit.distance,
      ),
    );
  });
  hits.sort((a, b) => a.distance.compareTo(b.distance));
  return hits;
}