From 3a9bc7233373efb1627eba88a229e109478aece2 Mon Sep 17 00:00:00 2001 From: Doublestrike Date: Sun, 4 Mar 2012 00:05:24 +0000 Subject: [PATCH] Refactored QuestEventManager to be a static factory. --- src/main/java/forge/control/FControl.java | 1 - .../gui/home/limited/CSubmenuConstructed.java | 9 +- .../gui/home/quest/CSubmenuChallenges.java | 39 +-- .../forge/gui/home/quest/CSubmenuDuels.java | 5 +- src/main/java/forge/model/FModel.java | 12 - .../forge/quest/data/QuestEventManager.java | 319 ++++++++---------- 6 files changed, 143 insertions(+), 242 deletions(-) diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index f8767fab8d1..440ca88d637 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -113,7 +113,6 @@ public enum FControl { this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts(); this.display = Singletons.getView().getLayeredContentPane(); - Singletons.getModel().getQuestEventManager().assembleAllEvents(); //Singletons.getView().initialize(); diff --git a/src/main/java/forge/gui/home/limited/CSubmenuConstructed.java b/src/main/java/forge/gui/home/limited/CSubmenuConstructed.java index ca1c6a5dfa7..b81ef6d9130 100644 --- a/src/main/java/forge/gui/home/limited/CSubmenuConstructed.java +++ b/src/main/java/forge/gui/home/limited/CSubmenuConstructed.java @@ -38,6 +38,7 @@ import forge.item.CardPrinted; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.quest.data.QuestEvent; +import forge.quest.data.QuestEventManager; import forge.util.IStorage; import forge.view.toolbox.FLabel; import forge.view.toolbox.FOverlay; @@ -279,11 +280,11 @@ public enum CSubmenuConstructed implements ICSubmenu { final List eventNames = new ArrayList(); - for (final QuestEvent e : Singletons.getModel().getQuestEventManager().getAllChallenges()) { + for (final QuestEvent e : QuestEventManager.ALL_DUELS) { eventNames.add(e.getEventDeck().getName()); } - for (final QuestEvent e : Singletons.getModel().getQuestEventManager().getAllDuels()) { + for (final QuestEvent e : QuestEventManager.ALL_CHALLENGES) { eventNames.add(e.getEventDeck().getName()); } @@ -405,7 +406,7 @@ public enum CSubmenuConstructed implements ICSubmenu { deck.getMain().add(cards); } else if (lst0.getName().equals(ESubmenuConstructedTypes.QUESTEVENTS.toString())) { - deck = Singletons.getModel().getQuestEventManager().getEvent(selection[0]).getEventDeck(); + deck = QuestEventManager.getEvent(selection[0]).getEventDeck(); } // Custom deck else if (lst0.getName().equals(ESubmenuConstructedTypes.CUSTOM.toString())) { @@ -430,7 +431,7 @@ public enum CSubmenuConstructed implements ICSubmenu { deck = Singletons.getModel().getDecks().getConstructed().get(deckName); } else { - deck = Singletons.getModel().getQuestEventManager().getEvent(deckName).getEventDeck(); + deck = QuestEventManager.getEvent(deckName).getEventDeck(); } // Dump into map and display. diff --git a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java index f6768e912df..e2ca3ea799a 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java @@ -10,11 +10,11 @@ import javax.swing.border.EmptyBorder; import forge.AllZone; import forge.Command; -import forge.Singletons; import forge.gui.home.EMenuItem; import forge.gui.home.ICSubmenu; import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel; import forge.quest.data.QuestChallenge; +import forge.quest.data.QuestEventManager; import forge.view.ViewHomeUI; import forge.view.toolbox.FLabel; @@ -84,7 +84,7 @@ public enum CSubmenuChallenges implements ICSubmenu { view.getPnlChallenges().removeAll(); final List challenges = - Singletons.getModel().getQuestEventManager().generateChallenges(AllZone.getQuestData()); + QuestEventManager.generateChallenges(); for (final QuestChallenge c : challenges) { final SelectablePanel temp = new SelectablePanel(c); @@ -103,39 +103,4 @@ public enum CSubmenuChallenges implements ICSubmenu { } } } - - /* (non-Javadoc) - * @see forge.control.home.IControlSubmenu#update() - */ - /* @Override - public void update() { - SubmenuQuestUtil.updateStatsAndPet(); - - final VSubmenuChallenges view = VSubmenuChallenges.SINGLETON_INSTANCE; - VSubmenuChallenges.SINGLETON_INSTANCE.getBtnStart().setEnabled(false); - - if (AllZone.getQuestData() != null) { - VSubmenuChallenges.SINGLETON_INSTANCE.getLblTitle().setText("Challenges: " + AllZone.getQuestData().getRank()); - - view.getPnlChallenges().removeAll(); - final List challenges = - Singletons.getModel().getQuestEventManager().generateChallenges(AllZone.getQuestData()); - - for (final QuestChallenge c : challenges) { - final SelectablePanel temp = new SelectablePanel(c); - view.getPnlChallenges().add(temp, "w 96%!, h 86px!, gap 2% 0 5px 5px"); - } - - if (challenges.size() == 0) { - final FLabel lbl = new FLabel.Builder() - .text(VSubmenuChallenges.SINGLETON_INSTANCE.getLblNextChallengeInWins().getText()) - .fontAlign(SwingConstants.CENTER).build(); - lbl.setForeground(Color.red); - lbl.setBackground(Color.white); - lbl.setBorder(new EmptyBorder(10, 10, 10, 10)); - lbl.setOpaque(true); - view.getPnlChallenges().add(lbl, "w 50%!, h 30px!, gap 25% 0 50px 0"); - } - } - }*/ } diff --git a/src/main/java/forge/gui/home/quest/CSubmenuDuels.java b/src/main/java/forge/gui/home/quest/CSubmenuDuels.java index 7fa69b31224..bff49b78867 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuDuels.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuDuels.java @@ -6,11 +6,11 @@ import java.util.List; import forge.AllZone; import forge.Command; -import forge.Singletons; import forge.gui.home.EMenuItem; import forge.gui.home.ICSubmenu; import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel; import forge.quest.data.QuestDuel; +import forge.quest.data.QuestEventManager; import forge.view.ViewHomeUI; /** @@ -78,8 +78,7 @@ public enum CSubmenuDuels implements ICSubmenu { view.getLblTitle().setText("Duels: " + AllZone.getQuestData().getRank()); view.getPnlDuels().removeAll(); - final List duels = - Singletons.getModel().getQuestEventManager().generateDuels(); + final List duels = QuestEventManager.generateDuels(); for (final QuestDuel d : duels) { final SelectablePanel temp = new SelectablePanel(d); diff --git a/src/main/java/forge/model/FModel.java b/src/main/java/forge/model/FModel.java index e5d0f4468ae..05960aa01e3 100644 --- a/src/main/java/forge/model/FModel.java +++ b/src/main/java/forge/model/FModel.java @@ -47,7 +47,6 @@ import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; import forge.properties.ForgeProps; import forge.properties.NewConstants; -import forge.quest.data.QuestEventManager; import forge.quest.data.QuestPreferences; import forge.util.FileUtil; import forge.util.HttpUtil; @@ -80,7 +79,6 @@ public enum FModel { private final GameAction gameAction; private final QuestPreferences questPreferences; private final ForgePreferences preferences; - private final QuestEventManager questEventManager; private final GameState gameState; private final FMatchState matchState; @@ -133,7 +131,6 @@ public enum FModel { this.gameState = new GameState(); this.matchState = new FMatchState(); this.questPreferences = new QuestPreferences(); - this.questEventManager = new QuestEventManager(); this.editions = new EditionCollection(); this.formats = new FormatCollection("res/blockdata/formats.txt"); @@ -333,15 +330,6 @@ public enum FModel { return this.questPreferences; } - /** - * Gets the quest preferences. - * - * @return {@link forge.quest.data.QuestEventManager} - */ - public final QuestEventManager getQuestEventManager() { - return this.questEventManager; - } - /** * Returns all player's decks for constructed, sealed and whatever. * diff --git a/src/main/java/forge/quest/data/QuestEventManager.java b/src/main/java/forge/quest/data/QuestEventManager.java index ae2b07a2ff7..de0e38a082c 100644 --- a/src/main/java/forge/quest/data/QuestEventManager.java +++ b/src/main/java/forge/quest/data/QuestEventManager.java @@ -38,45 +38,30 @@ import forge.util.FileSection; import forge.util.FileUtil; /** - *

* QuestEventManager. - *

- * MODEL - Manages collections of quest events (duelsquests, etc.) * * @author Forge * @version $Id$ */ -public class QuestEventManager { +public enum QuestEventManager { + /** */ + SINGLETON_INSTANCE; - /** The easy a iduels. */ - private final List easyAIduels = new ArrayList(); - - /** The medium a iduels. */ - private final List mediumAIduels = new ArrayList(); - - /** The hard a iduels. */ - private final List hardAIduels = new ArrayList(); - - /** The very hard a iduels. */ - private final List veryHardAIduels = new ArrayList(); - - /** The all duels. */ - private List allDuels = null; - - /** The all challenges. */ - private List allChallenges = null; - - /** - *

- * assembleAllEvents. - *

- * * Reads all duel and challenge files and instantiates all events, and - * difficulty lists accordingly. Should be used sparingly. - */ - public final void assembleAllEvents() { - this.allDuels = new ArrayList(); - this.allChallenges = new ArrayList(); + /** */ + private static final List EASY_DUELS = new ArrayList(); + /** */ + private static final List MEDIUM_DUELS = new ArrayList(); + /** */ + private static final List HARD_DUELS = new ArrayList(); + /** */ + private static final List EXPERT_DUELS = new ArrayList(); + /** */ + public static final List ALL_DUELS = new ArrayList(); + /** */ + public static final List ALL_CHALLENGES = new ArrayList(); + /** Instantiate all events and difficulty lists. */ + static { QuestEvent tempEvent; final File[] allFiles = ForgeProps.getFile(NewConstants.Quest.DECKS).listFiles(DeckSerializer.DCK_FILE_FILTER); @@ -85,21 +70,20 @@ public class QuestEventManager { final Map> contents = FileSection.parseSections(FileUtil.readFile(f)); if (contents.containsKey("quest")) { - tempEvent = this.readChallenge(contents.get("quest")); - this.allChallenges.add((QuestChallenge) tempEvent); - } // End if([quest]) + tempEvent = QuestEventManager.readChallenge(contents.get("quest")); + ALL_CHALLENGES.add((QuestChallenge) tempEvent); + } else { - tempEvent = this.readDuel(contents.get("metadata")); - this.allDuels.add((QuestDuel) tempEvent); + tempEvent = QuestEventManager.readDuel(contents.get("metadata")); + ALL_DUELS.add((QuestDuel) tempEvent); } // Assemble metadata (may not be necessary later) and deck object. - this.readMetadata(contents.get("metadata"), tempEvent); + QuestEventManager.readMetadata(contents.get("metadata"), tempEvent); tempEvent.setEventDeck(Deck.fromSections(contents)); } // End for(allFiles) - this.assembleDuelDifficultyLists(); - + QuestEventManager.assembleDuelDifficultyLists(); } // End assembleAllEvents() /** @@ -109,14 +93,14 @@ public class QuestEventManager { *   {@link java.lang.String} * @return {@link forge.data.QuestEvent} */ - public QuestEvent getEvent(final String s0) { - for (final QuestEvent q : this.allDuels) { + public static QuestEvent getEvent(final String s0) { + for (final QuestEvent q : ALL_DUELS) { if (q.getName().equals(s0)) { return q; } } - for (final QuestChallenge q : this.allChallenges) { + for (final QuestChallenge q : ALL_CHALLENGES) { if (q.getName().equals(s0)) { return q; } @@ -125,6 +109,98 @@ public class QuestEventManager { return null; } + /** Generates an array of new duel opponents based on current win conditions. + * + * @return an array of {@link java.lang.String} objects. + */ + public static final List generateDuels() { + final QuestPreferences qpref = Singletons.getModel().getQuestPreferences(); + if (AllZone.getQuestData() == null) { + return null; + } + + final int index = AllZone.getQuestData().getDifficultyIndex(); + final List duelOpponents = new ArrayList(); + + if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.EASY_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.EASY_DUELS, 1)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.EASY_DUELS, 2)); + } else if (AllZone.getQuestData().getWin() == qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.EASY_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 1)); + } else if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 1)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 2)); + } + + else if (AllZone.getQuestData().getWin() == qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.MEDIUM_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 1)); + } + + else if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_EXPERTAI, index)) { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 1)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 2)); + } else { + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 0)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.HARD_DUELS, 1)); + duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(QuestEventManager.EXPERT_DUELS, 2)); + } + + return duelOpponents; + } + + /** Generates an array of new challenge opponents based on current win conditions. + * + * @return a {@link java.util.List} object. + */ + public static final List generateChallenges() { + final List challengeOpponents = new ArrayList(); + final QuestData qData = AllZone.getQuestData(); + + int maxChallenges = qData.getWin() / 10; + if (maxChallenges > 5) { + maxChallenges = 5; + } + + // Generate IDs as needed. + if ((qData.getAvailableChallenges() == null) || (qData.getAvailableChallenges().size() < maxChallenges)) { + + final List unlockedChallengeIds = new ArrayList(); + final List availableChallengeIds = new ArrayList(); + + for (final QuestChallenge qc : QuestEventManager.ALL_CHALLENGES) { + if ((qc.getWinsReqd() <= qData.getWin()) + && !qData.getCompletedChallenges().contains(qc.getId())) { + unlockedChallengeIds.add(qc.getId()); + } + } + + Collections.shuffle(unlockedChallengeIds); + + maxChallenges = Math.min(maxChallenges, unlockedChallengeIds.size()); + + for (int i = 0; i < maxChallenges; i++) { + availableChallengeIds.add(unlockedChallengeIds.get(i)); + } + + qData.setAvailableChallenges(availableChallengeIds); + qData.saveData(); + } + + // Finally, pull challenge events from available IDs and return. + for (final int i : qData.getAvailableChallenges()) { + challengeOpponents.add(QuestEventManager.getChallengeEventByNumber(i)); + } + + return challengeOpponents; + } + /** *

* assembleDuelUniqueData. @@ -134,7 +210,7 @@ public class QuestEventManager { * @param contents * @param qd */ - private QuestDuel readDuel(final List contents) { + private static QuestDuel readDuel(final List contents) { final QuestDuel qd = new QuestDuel(); int eqpos; String key, value; @@ -167,7 +243,7 @@ public class QuestEventManager { * @param contents * @param qc */ - private QuestChallenge readChallenge(final List contents) { + private static QuestChallenge readChallenge(final List contents) { int eqpos; String key, value; @@ -236,7 +312,7 @@ public class QuestEventManager { * @param contents * @param qe */ - private void readMetadata(final List contents, final QuestEvent qe) { + private static void readMetadata(final List contents, final QuestEvent qe) { int eqpos; String key, value; @@ -265,54 +341,29 @@ public class QuestEventManager { } } - /** - *

- * getAllDuels. - *

- * Returns complete list of all duel objects. - * - * @return a {@link java.util.List} object. - */ - public final List getAllDuels() { - return this.allDuels; - } - - /** - *

- * getAllChallenges. - *

- * Returns complete list of all challenge objects. - * - * @return a {@link java.util.List} object. - */ - public final List getAllChallenges() { - return this.allChallenges; - } - /** *

* assembleDuelDifficultyLists. *

* Assemble duel deck difficulty lists */ - private void assembleDuelDifficultyLists() { - - this.easyAIduels.clear(); - this.mediumAIduels.clear(); - this.hardAIduels.clear(); - this.veryHardAIduels.clear(); + private static void assembleDuelDifficultyLists() { + EASY_DUELS.clear(); + MEDIUM_DUELS.clear(); + HARD_DUELS.clear(); + EXPERT_DUELS.clear(); String s; - for (final QuestDuel qd : this.allDuels) { + for (final QuestDuel qd : ALL_DUELS) { s = qd.getDifficulty(); if (s.equalsIgnoreCase("easy")) { - this.easyAIduels.add(qd); + EASY_DUELS.add(qd); } else if (s.equalsIgnoreCase("medium")) { - this.mediumAIduels.add(qd); + MEDIUM_DUELS.add(qd); } else if (s.equalsIgnoreCase("hard")) { - this.hardAIduels.add(qd); + HARD_DUELS.add(qd); } else if (s.equalsIgnoreCase("very hard")) { - this.veryHardAIduels.add(qd); + EXPERT_DUELS.add(qd); } } } @@ -348,114 +399,12 @@ public class QuestEventManager { * @param n * @return */ - private QuestChallenge getChallengeEventByNumber(final int n) { - for (final QuestChallenge qc : this.allChallenges) { + private static QuestChallenge getChallengeEventByNumber(final int n) { + for (final QuestChallenge qc : ALL_CHALLENGES) { if (qc.getId() == n) { return qc; } } return null; } - - /** - *

- * generateDuels. - *

- * Generates an array of new duel opponents based on current win conditions. - * - * @return an array of {@link java.lang.String} objects. - */ - public final List generateDuels() { - final QuestPreferences qpref = Singletons.getModel().getQuestPreferences(); - if (AllZone.getQuestData() == null) { - return null; - } - - final int index = AllZone.getQuestData().getDifficultyIndex(); - final List duelOpponents = new ArrayList(); - - if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.easyAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.easyAIduels, 1)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.easyAIduels, 2)); - } else if (AllZone.getQuestData().getWin() == qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.easyAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 1)); - } else if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 1)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 2)); - } - - else if (AllZone.getQuestData().getWin() == qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.mediumAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 1)); - } - - else if (AllZone.getQuestData().getWin() < qpref.getPreferenceInt(QPref.WINS_EXPERTAI, index)) { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 1)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 2)); - } else { - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 0)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.hardAIduels, 1)); - duelOpponents.add(QuestEventManager.getDuelOpponentByNumber(this.veryHardAIduels, 2)); - } - - return duelOpponents; - } - - /** - *

- * generateChallenges. - *

- * Generates an array of new challenge opponents based on current win - * conditions. - * - * @param questData the quest data - * @return a {@link java.util.List} object. - */ - public final List generateChallenges(final QuestData questData) { - final List challengeOpponents = new ArrayList(); - - int maxChallenges = questData.getWin() / 10; - if (maxChallenges > 5) { - maxChallenges = 5; - } - - // Generate IDs as needed. - if ((questData.getAvailableChallenges() == null) || (questData.getAvailableChallenges().size() < maxChallenges)) { - - final List unlockedChallengeIds = new ArrayList(); - final List availableChallengeIds = new ArrayList(); - - for (final QuestChallenge qc : this.allChallenges) { - if ((qc.getWinsReqd() <= questData.getWin()) - && !questData.getCompletedChallenges().contains(qc.getId())) { - unlockedChallengeIds.add(qc.getId()); - } - } - - Collections.shuffle(unlockedChallengeIds); - - maxChallenges = Math.min(maxChallenges, unlockedChallengeIds.size()); - - for (int i = 0; i < maxChallenges; i++) { - availableChallengeIds.add(unlockedChallengeIds.get(i)); - } - - questData.setAvailableChallenges(availableChallengeIds); - questData.saveData(); - } - - // Finally, pull challenge events from available IDs and return. - for (final int i : questData.getAvailableChallenges()) { - challengeOpponents.add(this.getChallengeEventByNumber(i)); - } - - return challengeOpponents; - } - }