From db51734eaea26168dad3d39f5c2ac2690a80c33e Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 6 May 2013 20:41:57 +0000 Subject: [PATCH] Use specialized map in PreferencesStore, QuestUtilCards - use different booster templates for shop and awarded boosters QuestWinLose - simplified code --- .../java/forge/gui/match/QuestWinLose.java | 62 +++++-------------- .../forge/properties/ForgePreferences.java | 4 +- .../forge/properties/PreferencesStore.java | 9 +-- src/main/java/forge/quest/QuestUtilCards.java | 15 ++++- .../forge/quest/data/QuestPreferences.java | 2 +- 5 files changed, 37 insertions(+), 55 deletions(-) diff --git a/src/main/java/forge/gui/match/QuestWinLose.java b/src/main/java/forge/gui/match/QuestWinLose.java index 6dbca9d986d..1cb5586815b 100644 --- a/src/main/java/forge/gui/match/QuestWinLose.java +++ b/src/main/java/forge/gui/match/QuestWinLose.java @@ -34,6 +34,7 @@ import forge.Card; import forge.Singletons; import forge.card.BoosterTemplate; import forge.card.CardEdition; +import forge.card.IUnOpenedProduct; import forge.card.UnOpenedProduct; import forge.control.FControl; import forge.game.GameEndReason; @@ -398,13 +399,11 @@ public class QuestWinLose extends ControlWinLose { } // Mulligan to zero final int cntCardsHumanStartedWith = humanRating.getOpeningHandSize(); - final int mulliganReward = Singletons.getModel().getQuestPreferences() - .getPrefInt(QPref.REWARDS_MULLIGAN0); + final int mulliganReward = Singletons.getModel().getQuestPreferences().getPrefInt(QPref.REWARDS_MULLIGAN0); if (0 == cntCardsHumanStartedWith) { credGameplay += mulliganReward; - sb.append(String - .format("Mulliganed to zero and still won! " + "Bonus: %d credits.
", mulliganReward)); + sb.append(String.format("Mulliganed to zero and still won! " + "Bonus: %d credits.
", mulliganReward)); } // Early turn bonus @@ -578,56 +577,29 @@ public class QuestWinLose extends ControlWinLose { } } - List chooseSets = new ArrayList(); - int maxChoices = 1; - if (this.wonMatch) { maxChoices++; final int wins = qData.getAchievements().getWin(); - if (wins > 0 && (wins + 1) % 5 == 0) { maxChoices++; } - if (wins > 0 && (wins + 1) % 20 == 0) { maxChoices++; } - if (wins > 0 && (wins + 1) % 50 == 0) { maxChoices++; } + if (wins + 1 % 5 == 0) { maxChoices++; } + if (wins + 1 % 20 == 0) { maxChoices++; } + if (wins + 1 % 50 == 0) { maxChoices++; } } - if (sets.size() > maxChoices) { - if (maxChoices > 1) { - boolean[] choices = new boolean[sets.size()]; - for (int i = 0; i < sets.size(); i++) { - choices[i] = false; - } - - int toEnable = maxChoices; - - while (toEnable > 0) { - int index = MyRandom.getRandom().nextInt(sets.size()); - if (!choices[index]) { - choices[index] = true; - toEnable--; - } - } - - for (int i = 0; i < sets.size(); i++) { - if (choices[i]) { - chooseSets.add(sets.get(i)); - } - } - } else { - chooseSets.add(sets.get(MyRandom.getRandom().nextInt(sets.size()))); - } - - } else { - chooseSets.addAll(sets); + List options = new ArrayList(); + + while(!sets.isEmpty() && maxChoices > 0) { + int ix = MyRandom.getRandom().nextInt(sets.size()); + String set = sets.get(ix); + sets.remove(ix); + options.add(Singletons.getModel().getEditions().get(set)); + maxChoices--; } - final String setPrompt = "Choose bonus booster set:"; - List chooseEditions = new ArrayList(); - for (String ed : chooseSets) { - chooseEditions.add(Singletons.getModel().getEditions().get(ed)); - } - final CardEdition chooseEd = GuiChoose.one(setPrompt, chooseEditions); + final CardEdition chooseEd = GuiChoose.one("Choose bonus booster set:", options); - cardsWon = (new UnOpenedProduct(Singletons.getModel().getBoosters().get(chooseEd.getCode()))).get(); + IUnOpenedProduct product = new UnOpenedProduct(Singletons.getModel().getBoosters().get(chooseEd.getCode())); + cardsWon = product.get(); qData.getCards().addAllCards(cardsWon); this.lblTemp1 = new TitleLabel("Bonus " + chooseEd.getName() + " booster pack!"); } diff --git a/src/main/java/forge/properties/ForgePreferences.java b/src/main/java/forge/properties/ForgePreferences.java index 7cd1048b6be..4222f904f12 100644 --- a/src/main/java/forge/properties/ForgePreferences.java +++ b/src/main/java/forge/properties/ForgePreferences.java @@ -50,7 +50,7 @@ public class ForgePreferences extends PreferencesStore { UI_PREFERRED_AVATARS_ONLY ("false"), UI_TARGETING_OVERLAY ("false"), UI_ENABLE_SOUNDS ("true"), - UI_ALT_SOUND_SYSTEM ("false"), + UI_ALT_SOUND_SYSTEM ("false"), UI_RANDOM_CARD_ART ("false"), UI_CURRENT_AI_PROFILE (AiProfileUtil.AI_PROFILE_RANDOM_MATCH), UI_CLONE_MODE_SOURCE ("false"), /** */ @@ -138,7 +138,7 @@ public class ForgePreferences extends PreferencesStore { /** Instantiates a ForgePreferences object. */ public ForgePreferences() { - super(NewConstants.MAIN_PREFS_FILE); + super(NewConstants.MAIN_PREFS_FILE, FPref.class); } /** diff --git a/src/main/java/forge/properties/PreferencesStore.java b/src/main/java/forge/properties/PreferencesStore.java index b26fa4d8030..d4b71435972 100644 --- a/src/main/java/forge/properties/PreferencesStore.java +++ b/src/main/java/forge/properties/PreferencesStore.java @@ -20,7 +20,7 @@ package forge.properties; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -31,11 +31,12 @@ import forge.util.FileUtil; * Loads preferred values when instantiated. * If a requested value is not present, default is returned. */ -public abstract class PreferencesStore> { - private final Map preferenceValues = new HashMap(); +public abstract class PreferencesStore> { + private final Map preferenceValues; private final String filename; - public PreferencesStore(String filename0) { + public PreferencesStore(String filename0, Class clasz) { + preferenceValues = new EnumMap(clasz); filename = filename0; List lines = FileUtil.readFile(filename); diff --git a/src/main/java/forge/quest/QuestUtilCards.java b/src/main/java/forge/quest/QuestUtilCards.java index f75f6f1d15c..c1069c8045d 100644 --- a/src/main/java/forge/quest/QuestUtilCards.java +++ b/src/main/java/forge/quest/QuestUtilCards.java @@ -503,14 +503,23 @@ public final class QuestUtilCards { } @SuppressWarnings("unchecked") - private SealedProductTemplate getBoosterTemplate() { + private SealedProductTemplate getShopBoosterTemplate() { return new SealedProductTemplate(Lists.newArrayList( Pair.of(BoosterGenerator.COMMON, this.qpref.getPrefInt(QPref.SHOP_SINGLES_COMMON)), Pair.of(BoosterGenerator.UNCOMMON, this.qpref.getPrefInt(QPref.SHOP_SINGLES_UNCOMMON)), Pair.of(BoosterGenerator.RARE_MYTHIC, this.qpref.getPrefInt(QPref.SHOP_SINGLES_RARE)) )); } - + + @SuppressWarnings("unchecked") + private SealedProductTemplate getBoosterTemplate() { + return new SealedProductTemplate(Lists.newArrayList( + Pair.of(BoosterGenerator.COMMON, this.qpref.getPrefInt(QPref.BOOSTER_COMMONS)), + Pair.of(BoosterGenerator.UNCOMMON, this.qpref.getPrefInt(QPref.BOOSTER_UNCOMMONS)), + Pair.of(BoosterGenerator.RARE_MYTHIC, this.qpref.getPrefInt(QPref.BOOSTER_RARES)) + )); + } + /** * Generate cards in shop. */ @@ -526,7 +535,7 @@ public final class QuestUtilCards { final int totalPacks = Math.min(levelPacks + winPacks, maxPacks); - SealedProductTemplate tpl = getBoosterTemplate(); + SealedProductTemplate tpl = getShopBoosterTemplate(); UnOpenedProduct unopened = qc.getFormat() == null ? new UnOpenedProduct( tpl ) : new UnOpenedProduct( tpl, qc.getFormat().getFilterPrinted()); for (int i = 0; i < totalPacks; i++) { diff --git a/src/main/java/forge/quest/data/QuestPreferences.java b/src/main/java/forge/quest/data/QuestPreferences.java index b0bc06564eb..b94c27644a5 100644 --- a/src/main/java/forge/quest/data/QuestPreferences.java +++ b/src/main/java/forge/quest/data/QuestPreferences.java @@ -174,7 +174,7 @@ public class QuestPreferences extends PreferencesStore i /** Instantiates a QuestPreferences object. */ public QuestPreferences() { - super(NewConstants.QUEST_PREFS_FILE); + super(NewConstants.QUEST_PREFS_FILE, QPref.class); } protected QPref[] getEnumValues() {