queryAABB method
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;
}
}
}
}