@Override
  public void tick(MouseButtons mouseButtons) {
    super.tick(mouseButtons);

    // show/hide save menu buttons
    if (updateButtons) {
      updateSaveButtons();
      updateButtons = false;
    }

    // lock buttons when save menu is visible
    if (saveMenuVisible) return;

    // update pencil location
    pencilX = (mouseButtons.getX() / 2) - (TILE_WIDTH / 2);
    pencilY = (mouseButtons.getY() / 2) - (TILE_HEIGHT / 2);

    // move level x with mouse
    if (mouseButtons.getX() - MENU_WIDTH > MENU_WIDTH) {
      if (pencilX + TILE_WIDTH > MojamComponent.GAME_WIDTH
          && -(mapX - MENU_WIDTH) < mapW - (MojamComponent.GAME_WIDTH - MENU_WIDTH) + TILE_HEIGHT) {
        mapX -= TILE_WIDTH / 2;
      } else if (pencilX < MENU_WIDTH && mapX < MENU_WIDTH + 32) {
        mapX += TILE_WIDTH / 2;
      }
    }

    // move level y with mouse
    if (pencilY + TILE_HEIGHT > MojamComponent.GAME_HEIGHT
        && -mapY < mapH - MojamComponent.GAME_HEIGHT + TILE_HEIGHT) {
      mapY -= TILE_HEIGHT / 2;
    } else if (pencilY < 0 && mapY < TILE_HEIGHT) {
      mapY += TILE_HEIGHT / 2;
    }

    // draw
    if (drawing || editorComponent.isPressed()) {
      int x = (((pencilX + TILE_WIDTH / 2) - mapX) / TILE_WIDTH);
      int y = (((pencilY + TILE_HEIGHT / 2) - mapY) / TILE_HEIGHT);
      draw(selectedButton.getTile(), x, y);
    }
  }