@Override
  protected void update() {
    // update world, run managers
    checkControl();
    switch (state) {
      case PLAYING:
        UpdateManager.update();
        CollisionManager.update();
        break;
      default:
        break;
    }
    // System.out.println(mouse.getWorldX() + " " + mouse.getWorldY());

    // playing, control hero
    if (state == State.PLAYING) {
      if (menuActive) {
        world.menu.active(false);
        menuActive = false;
      }
      hero.moveTo(mouse.getWorldX(), mouse.getWorldY());

      if ((keyboard.isButtonDown(KeyEvent.VK_F)) || (mouse.isButtonDown(1))) {
        hero.currentWeapon.fire();
      }
    }
    // deactive menu if BEGIN state
    else if (state == State.BEGIN) {
      if (menuActive) {
        world.menu.active(false);
        menuActive = false;
      }
      if (endMenuActive) {
        world.endMenu.active(false);
        endMenuActive = false;
      }
      if (!world.start.isShown()) {
        world.start.showScreen(true);
      }
    } else if (state == State.PAUSED) {
      if (menuActive) {
        world.menu.active(false);
        menuActive = false;
      }
    }
    // state menu, activate menu
    else if (state == State.MENU) {
      if (!menuActive) {
        world.menu.active(true);
        menuActive = true;
      } else {
        if (mouse.isButtonTapped(1)) {
          world.menu.select(mouse.getWorldX(), mouse.getWorldY(), true);
        } else {
          world.menu.select(mouse.getWorldX(), mouse.getWorldY(), false);
        }
      }
    }
    // state GAMEOVER, activate end menu
    else if (state == State.GAMEOVER) {
      if (menuActive) {
        world.menu.active(false);
        menuActive = false;
      }
      if (!endMenuActive) {
        if (GameState.RemainingLives <= 0) {
          world.endMenu.setMenu(false);
        } else {
          world.endMenu.setMenu(true);
        }
        world.endMenu.active(true);
        endMenuActive = true;
      } else {
        if (mouse.isButtonTapped(1)) {
          world.endMenu.select(mouse.getWorldX(), mouse.getWorldY(), true);
        } else {
          world.endMenu.select(mouse.getWorldX(), mouse.getWorldY(), false);
        }
      }
    }
  }