protected WorldSections(World world, int resolution) {
    this.world = world ;
    this.resolution = resolution ;
    this.depth = depthFor(world.size / resolution) ;
    this.hierarchy = new Section[depth][][] ;
    //
    //  Next, we generate each level of the map, and initialise nodes for each-
    int gridSize = world.size / resolution, nodeSize = resolution, deep = 0 ;
    while (deep < depth) {
      hierarchy[deep] = new Section[gridSize][gridSize] ;
      for (Coord c : Visit.grid(0, 0, gridSize, gridSize, 1)) {
        final Section n = new Section(c.x, c.y, deep) ;
        hierarchy[deep][c.x][c.y] = n ;
        n.area.set(
          (c.x * nodeSize) - 0.5f,
          (c.y * nodeSize) - 0.5f,
          nodeSize,
          nodeSize
        ) ;
        //I.say("INIT AREA: "+n.area) ;
        //
        //  Along with references to child nodes-
        if (deep > 0) {
          final int d = n.depth - 1, x = c.x * 2, y = c.y * 2 ;
          n.kids = new Section[4] ;
          n.kids[0] = hierarchy[d][x    ][y    ] ;
          n.kids[1] = hierarchy[d][x + 1][y    ] ;
          n.kids[2] = hierarchy[d][x    ][y + 1] ;
          n.kids[3] = hierarchy[d][x + 1][y + 1] ;
          for (Section k : n.kids) k.parent = n ;
        }
      }
      deep++ ;
      gridSize /= 2 ;
      nodeSize *= 2 ;
    }
    this.root = hierarchy[deep - 1][0][0] ;
  }