public Batch <Coord> allNear(
    final World world, final Target t, final float radius
  ) {
    final Batch <Coord> near = new Batch <Coord> () ;
    final Vec3D tP = t.position(null) ;
    class Bound extends Box2D { float proximity ; }
    final Bound first = new Bound() ;
    first.set(-0.5f, -0.5f, size, size) ;
    first.proximity = first.distance(tP.x, tP.y) ;
    
    final Sorting <Bound> sorting = new Sorting <Bound> () {
      public int compare(Bound a, Bound b) {
        if (a == b) return 0 ;
        return a.proximity > b.proximity ? 1 : -1 ;
      }
    } ;
    sorting.add(first) ; while (sorting.size() > 0) {
      final Object closestRef = sorting.leastRef() ;
      final Bound closest = sorting.refValue(closestRef) ;
      sorting.deleteRef(closestRef) ;
      
      if (closest.proximity > radius) continue ;
      if (closest.xdim() < 2) {
        near.add(new Coord(
          (int) (closest.xpos() + 1),
          (int) (closest.ypos() + 1)
        )) ;
        continue ;
      }
      
      final float
        xp = closest.xpos(),
        yp = closest.ypos(),
        hw = closest.xdim() / 2f,
        hh = closest.ydim() / 2f ;
      final Bound
        kidA = new Bound(), kidB = new Bound(),
        kidC = new Bound(), kidD = new Bound() ;
      
      kidA.set(xp, yp, hw, hh) ;
      kidB.set(xp + hw, yp, hw, hh) ;
      kidC.set(xp, yp + hh, hw, hh) ;
      kidD.set(xp + hw, yp + hh, hw, hh) ;
      kidA.proximity = kidA.distance(tP.x, tP.y) ;
      kidB.proximity = kidB.distance(tP.x, tP.y) ;
      kidC.proximity = kidC.distance(tP.x, tP.y) ;
      kidD.proximity = kidD.distance(tP.x, tP.y) ;
      sorting.add(kidA) ;
      sorting.add(kidB) ;
      sorting.add(kidC) ;
      sorting.add(kidD) ;
    }
    return near ;
  }