public final void dispose() {
   this.keySize = 0;
   if (batch != null) {
     batch.dispose();
     batch = null;
   }
   if (content != null) {
     content.dispose();
     content = null;
   }
   if (indexTile != null) {
     indexTile.dispose();
     indexTile = null;
   }
   if (objects != null) {
     objects.clear();
     objects = null;
   }
   if (pendingAdd != null) {
     pendingAdd.clear();
     pendingAdd = null;
   }
   if (pendingRemove != null) {
     pendingRemove.clear();
     pendingRemove = null;
   }
   tiles.clear();
   close();
 }
 public final void draw(GLEx g) {
   if (isOnLoadComplete()) {
     batch.begin();
     before(batch);
     for (TileMap tile : tiles) {
       tile.draw(g, batch, offset.x(), offset.y());
     }
     for (SpriteBatchObject o : objects) {
       objX = o.getX() + offset.x;
       objY = o.getY() + offset.y;
       if (contains(objX, objY)) {
         o.draw(batch, offset.x, offset.y);
       }
     }
     if (content.isVisible()) {
       content.drawNode(batch);
     }
     after(batch);
     batch.end();
   }
 }
  public final void alter(LTimerContext timer) {
    for (int i = 0; i < keySize; i++) {
      ActionKey act = (ActionKey) keyActions.get(i);
      if (act.isPressed()) {
        act.act(elapsedTime);
        if (act.isReturn) {
          return;
        }
      }
    }
    if (content.isVisible()) {
      processEvents();
      content.updateNode(timer.getMilliseconds());
    }
    if (follow != null) {
      for (TileMap tile : tiles) {
        float offsetX = getHalfWidth() - follow.getX();
        offsetX = MathUtils.min(offsetX, 0);
        offsetX = MathUtils.max(offsetX, getWidth() - tile.getWidth());

        float offsetY = getHalfHeight() - follow.getY();
        offsetY = MathUtils.min(offsetY, 0);
        offsetY = MathUtils.max(offsetY, getHeight() - tile.getHeight());

        setOffset(tile, offsetX, offsetY);
        tile.update(elapsedTime);
      }
    }
    for (SpriteBatchObject o : objects) {
      o.update(elapsedTime);
      if (updateListener != null) {
        updateListener.act(o, elapsedTime);
      }
    }
    update(elapsedTime);
    commits();
  }
 public void setOffset(TileMap tile, float sx, float sy) {
   offset.set(sx, sy);
   tile.setOffset(offset);
 }