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(); } } } }); }