private void Query(Box2 bounds, QuadNode node, List <T> results) { lock (syncLock) { if (node == null) { return; } if (bounds.Overlap(node.BBox)) { foreach (T quadObject in node.Objects) { if (bounds.Overlap(quadObject.GetBBox())) { results.Add(quadObject); } } foreach (QuadNode childNode in node.Nodes) { Query(bounds, childNode, results); } } } }