/*
   * Update game state
   */
  @Override
  public void update() throws SDLException {
    if (frame >= KEYACCEPTFRAME) {
      // Up
      if (NullpoMinoSDL.keyPressedState[SDLKey.SDLK_UP]) {
        ResourceHolderSDL.soundManager.play("cursor");
        keynum--;
        if (keynum < 4) keynum = 15;
        frame = 0;
      }
      // Down
      else if (NullpoMinoSDL.keyPressedState[SDLKey.SDLK_DOWN]) {
        ResourceHolderSDL.soundManager.play("cursor");
        keynum++;
        if (keynum > 15) keynum = 4;
        frame = 0;
      }
      // Delete
      else if (NullpoMinoSDL.keyPressedState[SDLKey.SDLK_DELETE]) {
        ResourceHolderSDL.soundManager.play("change");
        buttonmap[keynum] = -1;
        frame = 0;
      }
      // Backspace
      else if (NullpoMinoSDL.keyPressedState[SDLKey.SDLK_BACKSPACE]) {
        NullpoMinoSDL.enterState(NullpoMinoSDL.STATE_CONFIG_JOYSTICK_MAIN);
        return;
      }
      // Enter/Return
      else if (NullpoMinoSDL.keyPressedState[SDLKey.SDLK_RETURN]) {
        ResourceHolderSDL.soundManager.play("decide");

        for (int i = 0; i < GameKeySDL.MAX_BUTTON; i++) {
          GameKeySDL.gamekey[player].buttonmap[i] = buttonmap[i];
        }
        GameKeySDL.gamekey[player].saveConfig(NullpoMinoSDL.propConfig);
        NullpoMinoSDL.saveConfig();

        NullpoMinoSDL.enterState(NullpoMinoSDL.STATE_CONFIG_JOYSTICK_MAIN);
        return;
      }
      // Joystick input
      else if (previousJoyPressedState != null) {
        int key =
            getPressedKeyNumber(previousJoyPressedState, NullpoMinoSDL.joyPressedState[joyNumber]);

        if (key != -1) {
          ResourceHolderSDL.soundManager.play("change");
          buttonmap[keynum] = key;
          frame = 0;
        }
      }
    }

    if (previousJoyPressedState != null) {
      for (int i = 0; i < NullpoMinoSDL.joyPressedState.length; i++) {
        previousJoyPressedState[i] = NullpoMinoSDL.joyPressedState[joyNumber][i];
      }
    }
    frame++;
  }