Refactored QuestEventManager to be a static factory.

This commit is contained in:
Doublestrike
2012-03-04 00:05:24 +00:00
parent a4ce1b34ac
commit 3a9bc72333
6 changed files with 143 additions and 242 deletions

View File

@@ -113,7 +113,6 @@ public enum FControl {
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
this.display = Singletons.getView().getLayeredContentPane();
Singletons.getModel().getQuestEventManager().assembleAllEvents();
//Singletons.getView().initialize();

View File

@@ -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<String> eventNames = new ArrayList<String>();
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.

View File

@@ -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<QuestChallenge> 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<QuestChallenge> 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");
}
}
}*/
}

View File

@@ -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<QuestDuel> duels =
Singletons.getModel().getQuestEventManager().generateDuels();
final List<QuestDuel> duels = QuestEventManager.generateDuels();
for (final QuestDuel d : duels) {
final SelectablePanel temp = new SelectablePanel(d);

View File

@@ -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.
*

View File

@@ -38,45 +38,30 @@ import forge.util.FileSection;
import forge.util.FileUtil;
/**
* <p>
* QuestEventManager.
* </p>
* 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<QuestDuel> easyAIduels = new ArrayList<QuestDuel>();
/** The medium a iduels. */
private final List<QuestDuel> mediumAIduels = new ArrayList<QuestDuel>();
/** The hard a iduels. */
private final List<QuestDuel> hardAIduels = new ArrayList<QuestDuel>();
/** The very hard a iduels. */
private final List<QuestDuel> veryHardAIduels = new ArrayList<QuestDuel>();
/** The all duels. */
private List<QuestDuel> allDuels = null;
/** The all challenges. */
private List<QuestChallenge> allChallenges = null;
/**
* <p>
* assembleAllEvents.
* </p>
* * 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<QuestDuel>();
this.allChallenges = new ArrayList<QuestChallenge>();
/** */
private static final List<QuestDuel> EASY_DUELS = new ArrayList<QuestDuel>();
/** */
private static final List<QuestDuel> MEDIUM_DUELS = new ArrayList<QuestDuel>();
/** */
private static final List<QuestDuel> HARD_DUELS = new ArrayList<QuestDuel>();
/** */
private static final List<QuestDuel> EXPERT_DUELS = new ArrayList<QuestDuel>();
/** */
public static final List<QuestDuel> ALL_DUELS = new ArrayList<QuestDuel>();
/** */
public static final List<QuestChallenge> ALL_CHALLENGES = new ArrayList<QuestChallenge>();
/** 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<String, List<String>> 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 {
* &emsp; {@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<QuestDuel> generateDuels() {
final QuestPreferences qpref = Singletons.getModel().getQuestPreferences();
if (AllZone.getQuestData() == null) {
return null;
}
final int index = AllZone.getQuestData().getDifficultyIndex();
final List<QuestDuel> duelOpponents = new ArrayList<QuestDuel>();
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<QuestChallenge> generateChallenges() {
final List<QuestChallenge> challengeOpponents = new ArrayList<QuestChallenge>();
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<Integer> unlockedChallengeIds = new ArrayList<Integer>();
final List<Integer> availableChallengeIds = new ArrayList<Integer>();
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;
}
/**
* <p>
* assembleDuelUniqueData.
@@ -134,7 +210,7 @@ public class QuestEventManager {
* @param contents
* @param qd
*/
private QuestDuel readDuel(final List<String> contents) {
private static QuestDuel readDuel(final List<String> 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<String> contents) {
private static QuestChallenge readChallenge(final List<String> contents) {
int eqpos;
String key, value;
@@ -236,7 +312,7 @@ public class QuestEventManager {
* @param contents
* @param qe
*/
private void readMetadata(final List<String> contents, final QuestEvent qe) {
private static void readMetadata(final List<String> contents, final QuestEvent qe) {
int eqpos;
String key, value;
@@ -265,54 +341,29 @@ public class QuestEventManager {
}
}
/**
* <p>
* getAllDuels.
* </p>
* Returns complete list of all duel objects.
*
* @return a {@link java.util.List} object.
*/
public final List<QuestDuel> getAllDuels() {
return this.allDuels;
}
/**
* <p>
* getAllChallenges.
* </p>
* Returns complete list of all challenge objects.
*
* @return a {@link java.util.List} object.
*/
public final List<QuestChallenge> getAllChallenges() {
return this.allChallenges;
}
/**
* <p>
* assembleDuelDifficultyLists.
* </p>
* 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;
}
/**
* <p>
* generateDuels.
* </p>
* Generates an array of new duel opponents based on current win conditions.
*
* @return an array of {@link java.lang.String} objects.
*/
public final List<QuestDuel> generateDuels() {
final QuestPreferences qpref = Singletons.getModel().getQuestPreferences();
if (AllZone.getQuestData() == null) {
return null;
}
final int index = AllZone.getQuestData().getDifficultyIndex();
final List<QuestDuel> duelOpponents = new ArrayList<QuestDuel>();
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;
}
/**
* <p>
* generateChallenges.
* </p>
* 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<QuestChallenge> generateChallenges(final QuestData questData) {
final List<QuestChallenge> challengeOpponents = new ArrayList<QuestChallenge>();
int maxChallenges = questData.getWin() / 10;
if (maxChallenges > 5) {
maxChallenges = 5;
}
// Generate IDs as needed.
if ((questData.getAvailableChallenges() == null) || (questData.getAvailableChallenges().size() < maxChallenges)) {
final List<Integer> unlockedChallengeIds = new ArrayList<Integer>();
final List<Integer> availableChallengeIds = new ArrayList<Integer>();
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;
}
}