queryAABB method

void queryAABB(
  1. ParticleQueryCallback callback,
  2. AABB aabb
)

Implementation

void queryAABB(ParticleQueryCallback callback, AABB aabb) {
  if (proxyBuffer.isEmpty) {
    return;
  }

  final lowerBoundX = aabb.lowerBound.x;
  final lowerBoundY = aabb.lowerBound.y;
  final upperBoundX = aabb.upperBound.x;
  final upperBoundY = aabb.upperBound.y;
  final firstProxy = lowerBound(
    proxyBuffer,
    computeTag(
      inverseDiameter * lowerBoundX,
      inverseDiameter * lowerBoundY,
    ),
  );
  final lastProxy = upperBound(
    proxyBuffer,
    computeTag(
      inverseDiameter * upperBoundX,
      inverseDiameter * upperBoundY,
    ),
  );
  for (var i = firstProxy; i < lastProxy; ++i) {
    // TODO(spydon): Does this still work now when we don't rotate the
    // buffers?
    final particle = proxyBuffer[i].particle;
    final p = particle.position;
    if (lowerBoundX < p.x &&
        p.x < upperBoundX &&
        lowerBoundY < p.y &&
        p.y < upperBoundY) {
      if (!callback.reportParticle(particle)) {
        break;
      }
    }
  }
}