@Override
  public void act(float delta) {
    int acts = logic.advance2(delta);
    super.act(delta);

    boolean isGameOver = logic.isGameOver();
    if (isGameOver && !gameOverFired) {
      if (logic.isGameLost()) {
        gameOverFired = true;
        mGame.gameLost();
      } else {
        if (timeToFireWon > 0) timeToFireWon -= delta;
        else {
          gameOverFired = true;
          mGame.gameWon();
        }
      }
    } else if (!isGameOver && gameOverFired) {
      gameOverFired = false;
      timeToFireWon = TIME_TO_WAIT_FOR_WON;
    }

    sounds.act(delta, acts);
    // bangs.act(delta);
    snappers.act(delta);

    if (isHinting) hint.act(delta);

    if (isTutorialAvailable
        && !isHinting
        && !areSnappersTouched()
        && (System.currentTimeMillis() - logic.startTime) > WAIT_FOR_TUTORIAL) showHints(true);
  }