コード例 #1
0
  public void showRewards() {
    view.getBtnRestart().setVisible(false);
    final QuestController qc = FModel.getQuest();

    // After the first game, reset the card shop pool to be able to buy back anted cards
    if (lastGame.getNumPlayedGamesInMatch() == 0) {
      qc.getCards().clearShopList();
      qc.getCards().getShopList();
    }

    final LobbyPlayer questLobbyPlayer = GamePlayerUtil.getQuestPlayer();
    PlayerView player = null;
    for (final PlayerView p : lastGame.getPlayers()) {
      if (p.isLobbyPlayer(questLobbyPlayer)) {
        player = p;
      }
    }
    final PlayerView questPlayer = player;

    final boolean matchIsNotOver = !lastGame.isMatchOver();
    if (matchIsNotOver) {
      view.getBtnQuit().setText("Quit (-15 Credits)");
    } else {
      view.getBtnContinue().setVisible(false);
      if (wonMatch) {
        view.getBtnQuit().setText("Great!");
      } else {
        view.getBtnQuit().setText("OK");
      }
    }

    // give controller a chance to run remaining logic on a separate thread
    view.showRewards(
        new Runnable() {
          @Override
          public void run() {
            if (isAnte) {
              // Won/lost cards should already be calculated (even in a draw)
              final GameOutcome.AnteResult anteResult = lastGame.getAnteResult(questPlayer);
              if (anteResult != null) {
                if (anteResult.wonCards != null) {
                  qc.getCards().addAllCards(anteResult.wonCards);
                }
                if (anteResult.lostCards != null) {
                  qc.getCards().loseCards(anteResult.lostCards);
                }
                anteReport(anteResult.wonCards, anteResult.lostCards);
              }
            }

            if (matchIsNotOver) {
              return;
            } // skip remaining logic if match isn't over yet

            // TODO: We don't have a enum for difficulty?
            final int difficulty = qData.getAchievements().getDifficulty();

            final int wins = qData.getAchievements().getWin();
            // Win case
            if (wonMatch) {
              // Standard event reward credits
              awardEventCredits();

              // Challenge reward credits
              if (qEvent instanceof QuestEventChallenge) {
                awardChallengeWin();
              } else {
                awardSpecialReward("Special bonus reward"); // If any
                // Random rare for winning against a very hard deck
                if (qEvent.getDifficulty() == QuestEventDifficulty.EXPERT) {
                  awardRandomRare("You've won a random rare for winning against a very hard deck.");
                }
              }

              awardWinStreakBonus();

              // Random rare given at 50% chance (65% with luck upgrade)
              if (getLuckyCoinResult()) {
                awardRandomRare("You've won a random rare.");
              }

              // Award jackpot every 80 games won (currently 10 rares)

              if ((wins > 0) && (((wins + 1) % 80) == 0)) {
                awardJackpot();
              }

            }
            // Lose case
            else {
              penalizeLoss();
            }

            // Grant booster on a win, or on a loss in easy mode
            if (wonMatch || difficulty == 0) {
              final int outcome = wonMatch ? wins : qData.getAchievements().getLost();
              final int winsPerBooster =
                  FModel.getQuestPreferences()
                      .getPrefInt(
                          DifficultyPrefs.WINS_BOOSTER, qData.getAchievements().getDifficulty());
              if (winsPerBooster > 0 && (outcome + 1) % winsPerBooster == 0) {
                awardBooster();
              }
            }
          }
        });
  }