query method

  1. @override
Set<CollisionProspect<T>> query()
override

Implementation

@override
Set<CollisionProspect<T>> query() {
  _active.clear();
  _potentials.clear();
  items.sort((a, b) => (a.aabb.min.x - b.aabb.min.x).ceil());
  for (final item in items) {
    if (item.collisionType == CollisionType.inactive) {
      continue;
    }
    if (_active.isEmpty) {
      _active.add(item);
      continue;
    }
    final currentBox = item.aabb;
    final currentMin = currentBox.min.x;
    for (var i = _active.length - 1; i >= 0; i--) {
      final activeItem = _active[i];
      final activeBox = activeItem.aabb;
      if (activeBox.max.x >= currentMin) {
        if (item.collisionType == CollisionType.active ||
            activeItem.collisionType == CollisionType.active) {
          _potentials.add(CollisionProspect<T>(item, activeItem));
        }
      } else {
        _active.remove(activeItem);
      }
    }
    _active.add(item);
  }
  return _potentials;
}