protected void updateChildren(Vector3f camCell) {

        int dx = 0;
        int dy = 0;
        if (currentCamCell != null) {
            dx = (int) (camCell.x - currentCamCell.x);
            dy = (int) (camCell.z - currentCamCell.z);
        }

        int xMin = 0;
        int xMax = 4;
        int yMin = 0;
        int yMax = 4;
        if (dx == -1) { // camera moved to -X direction
            xMax = 3;
        } else if (dx == 1) { // camera moved to +X direction
            xMin = 1;
        }

        if (dy == -1) { // camera moved to -Y direction
            yMax = 3;
        } else if (dy == 1) { // camera moved to +Y direction
            yMin = 1;
        }

        // Touch the items in the cache that we are and will be interested in.
        // We activate cells in the direction we are moving. If we didn't move 
        // either way in one of the axes (say X or Y axis) then they are all touched.
        for (int i = yMin; i < yMax; i++) {
            for (int j = xMin; j < xMax; j++) {
                cache.get(camCell.add(quadIndex[i * 4 + j]));
            }
        }
        
        // ---------------------------------------------------
        // ---------------------------------------------------

        if (cacheExecutor == null) {
            // use the same executor as the LODControl
            cacheExecutor = createExecutorService();
        }

        cacheExecutor.submit(new UpdateQuadCache(camCell));

        this.currentCamCell = camCell;
    }
Called when the camera has moved into a new cell. We need to
update what quads are in the scene now.

Step 1: touch cache
LRU cache is used, so elements that need to remain
should be touched.

Step 2: load new quads in background thread
if the camera has moved into a new cell, we load in new quads
@param camCell the cell the camera is in
jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainGrid.java