Pets and plant are loaded from text files.

Card creation is an issue now.
This commit is contained in:
Maxmtg
2012-03-18 18:09:02 +00:00
parent dcc09a060e
commit 69acd4dc11
89 changed files with 829 additions and 1783 deletions

51
.gitattributes vendored
View File

@@ -11678,42 +11678,37 @@ src/main/java/forge/properties/Preferences.java svneol=native#text/plain
src/main/java/forge/properties/SavePreferencesListener.java svneol=native#text/plain
src/main/java/forge/properties/package-info.java svneol=native#text/plain
src/main/java/forge/quest/BoosterUtils.java svneol=native#text/plain
src/main/java/forge/quest/QuestChallenge.java svneol=native#text/plain
src/main/java/forge/quest/QuestController.java -text
src/main/java/forge/quest/QuestDeckMap.java -text
src/main/java/forge/quest/QuestDuel.java svneol=native#text/plain
src/main/java/forge/quest/QuestEvent.java -text
src/main/java/forge/quest/QuestEventChallenge.java svneol=native#text/plain
src/main/java/forge/quest/QuestEventDifficulty.java -text
src/main/java/forge/quest/QuestEventDuel.java svneol=native#text/plain
src/main/java/forge/quest/QuestEventManager.java svneol=native#text/plain
src/main/java/forge/quest/QuestStallManager.java svneol=native#text/plain
src/main/java/forge/quest/QuestMode.java -text
src/main/java/forge/quest/QuestStartPool.java -text
src/main/java/forge/quest/QuestUtil.java svneol=native#text/plain
src/main/java/forge/quest/QuestUtilCards.java -text
src/main/java/forge/quest/SellRules.java -text
src/main/java/forge/quest/bazaar/IQuestBazaarItem.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestBazaarManager.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestItemBasic.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestItemElixir.java -text
src/main/java/forge/quest/bazaar/QuestItemEstates.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestItemPoundFlesh.java -text
src/main/java/forge/quest/bazaar/QuestItemType.java -text
src/main/java/forge/quest/bazaar/QuestItemZeppelin.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestPetController.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/QuestPetStats.java -text
src/main/java/forge/quest/bazaar/QuestPetStorage.java -text
src/main/java/forge/quest/bazaar/QuestStallDefinition.java svneol=native#text/plain
src/main/java/forge/quest/bazaar/package-info.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestAchievements.java -text
src/main/java/forge/quest/data/QuestAssets.java -text
src/main/java/forge/quest/data/QuestData.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestDuelDifficulty.java -text
src/main/java/forge/quest/data/QuestItemCondition.java -text
src/main/java/forge/quest/data/QuestMode.java -text
src/main/java/forge/quest/data/QuestPreferences.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestStallDefinition.java svneol=native#text/plain
src/main/java/forge/quest/data/QuestStartPool.java -text
src/main/java/forge/quest/data/item/IQuestStallPurchasable.java svneol=native#text/plain
src/main/java/forge/quest/data/item/QuestItemElixir.java -text
src/main/java/forge/quest/data/item/QuestItemEstates.java svneol=native#text/plain
src/main/java/forge/quest/data/item/QuestItemPassive.java svneol=native#text/plain
src/main/java/forge/quest/data/item/QuestItemPoundFlesh.java -text
src/main/java/forge/quest/data/item/QuestItemType.java -text
src/main/java/forge/quest/data/item/QuestItemZeppelin.java svneol=native#text/plain
src/main/java/forge/quest/data/item/package-info.java svneol=native#text/plain
src/main/java/forge/quest/data/package-info.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetAbstract.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetBird.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetCrocodile.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetHound.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetManager.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetPlant.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/QuestPetWolf.java svneol=native#text/plain
src/main/java/forge/quest/data/pet/package-info.java svneol=native#text/plain
src/main/java/forge/quest/io/PreconReader.java -text
src/main/java/forge/quest/io/QuestDataIO.java svneol=native#text/plain
src/main/java/forge/quest/io/ReadPriceList.java svneol=native#text/plain
@@ -11731,6 +11726,9 @@ src/main/java/forge/util/IItemSerializer.java -text
src/main/java/forge/util/IStorage.java -text
src/main/java/forge/util/IStorageView.java -text
src/main/java/forge/util/IgnoringXStream.java -text
src/main/java/forge/util/Lambda.java svneol=native#text/plain
src/main/java/forge/util/Lambda0.java -text
src/main/java/forge/util/Lambda1.java svneol=native#text/plain
src/main/java/forge/util/LineReader.java -text
src/main/java/forge/util/MyRandom.java svneol=native#text/plain
src/main/java/forge/util/Predicate.java -text
@@ -11772,13 +11770,6 @@ src/main/java/net/slightlymagic/braids/util/generator/FindNonDirectoriesSkipDotD
src/main/java/net/slightlymagic/braids/util/generator/GeneratorFromArray.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/generator/GeneratorFunctions.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/generator/package-info.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/Lambda.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/Lambda0.java -text
src/main/java/net/slightlymagic/braids/util/lambda/Lambda1.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/Lambda2.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/Lambda3.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/Thunk.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/lambda/package-info.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/package-info.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/progress_monitor/BaseProgressMonitor.java svneol=native#text/plain
src/main/java/net/slightlymagic/braids/util/progress_monitor/BraidsProgressMonitor.java svneol=native#text/plain

View File

@@ -21,11 +21,11 @@ import java.util.List;
import net.slightlymagic.braids.util.UtilFunctions;
import net.slightlymagic.braids.util.generator.GeneratorFunctions;
import net.slightlymagic.braids.util.lambda.Lambda1;
import com.google.code.jyield.Generator;
import forge.card.EditionInfo;
import forge.util.Lambda1;
/**
* <p>

View File

@@ -25,7 +25,6 @@ import java.util.StringTokenizer;
import java.util.TreeMap;
import net.slightlymagic.braids.util.generator.GeneratorFunctions;
import net.slightlymagic.braids.util.lambda.Lambda1;
import com.google.code.jyield.Generator;
import com.google.code.jyield.YieldUtils;
@@ -34,6 +33,7 @@ import forge.card.spellability.SpellAbility;
import forge.error.ErrorViewer;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.util.Lambda1;
/**
* <p>

View File

@@ -2,9 +2,9 @@ package forge.card;
import forge.item.CardPrinted;
import forge.util.FileSection;
import forge.util.Lambda1;
import forge.util.Predicate;
import forge.util.StorageReaderFile;
import net.slightlymagic.braids.util.lambda.Lambda1;
/**
* The Class BoosterData.

View File

@@ -24,10 +24,10 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.item.CardDb;
import forge.item.CardPrinted;
import forge.item.ItemPoolView;
import forge.util.Lambda1;
import forge.util.MyRandom;
import forge.util.Predicate;

View File

@@ -20,8 +20,8 @@ package forge.card;
import java.util.ArrayList;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.item.CardPrinted;
import forge.util.Lambda1;
import forge.util.Predicate;
import forge.util.StorageReaderFile;

View File

@@ -17,10 +17,10 @@
*/
package forge.card;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.Singletons;
import forge.game.GameFormat;
import forge.util.FileSection;
import forge.util.Lambda1;
import forge.util.Predicate;
import forge.util.StorageReaderFile;

View File

@@ -1,7 +1,7 @@
package forge.card;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.util.FileSection;
import forge.util.Lambda1;
import forge.util.StorageReaderFile;
/**

View File

@@ -2,8 +2,8 @@ package forge.card;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.item.CardPrinted;
import forge.util.Lambda1;
/**
* TODO: Write javadoc for this type.

View File

@@ -450,20 +450,9 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
return result;
}
/**
* <p>
* getCard2.
* </p>
*
* @param cardName
* a {@link java.lang.String} object.
* @param owner
* a {@link forge.Player} object.
* @return a {@link forge.Card} object.
*/
protected Card getCard2(final String cardName, final Player owner) {
// o should be Card object
final Object o = this.map.get(cardName);
final Card o = this.map.get(cardName);
if (o == null) {
final StringBuilder sb = new StringBuilder();
sb.append("CardFactory : getCard() invalid card name - ").append(cardName);

View File

@@ -113,6 +113,7 @@ public interface CardFactoryInterface extends Iterable<Card> {
* blankCard
*/
Card getCard(String cardName, Player owner);
//Card getCard2(final String cardName, final Card o, final Player owner);
/**
* Fetch a random combination of cards without any duplicates.

View File

@@ -4089,7 +4089,7 @@ public class CardFactoryUtil {
* a {@link java.lang.Object} object.
* @return a {@link forge.Card} object.
*/
public static Card copyStats(final Object o) {
public static Card copyStats(final Card o) {
final Card sim = (Card) o;
final Card c = new Card();

View File

@@ -9,7 +9,7 @@ import javax.swing.SwingUtilities;
import com.google.common.collect.Iterables;
import forge.gui.toolbox.FLabel;
import forge.quest.QuestStallManager;
import forge.quest.bazaar.QuestBazaarManager;
import forge.view.ViewBazaarUI;
/**
@@ -19,14 +19,14 @@ import forge.view.ViewBazaarUI;
public class ControlBazaarUI {
private final ViewBazaarUI view;
private final ComponentListener cadResize;
private final QuestStallManager model;
private final QuestBazaarManager model;
/**
* Controls top-level instance of bazaar.
* @param v0 &emsp; {@link forge.view.ViewBazaarUI}
* @param bazaar
*/
public ControlBazaarUI(ViewBazaarUI v0, QuestStallManager bazaar0) {
public ControlBazaarUI(ViewBazaarUI v0, QuestBazaarManager bazaar0) {
view = v0;
model = bazaar0;

View File

@@ -38,7 +38,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.game.GamePlayerRating;
import forge.quest.QuestController;
import forge.quest.data.item.QuestItemType;
import forge.quest.bazaar.QuestItemType;
/**
* <p>
* InputMulligan class.

View File

@@ -28,7 +28,6 @@ import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.slightlymagic.braids.util.lambda.Lambda1;
import org.apache.commons.lang3.StringUtils;
@@ -39,6 +38,7 @@ import forge.item.CardPrinted;
import forge.item.ItemPoolView;
import forge.util.FileSection;
import forge.util.FileUtil;
import forge.util.Lambda1;
/**
* <p>

View File

@@ -20,10 +20,10 @@ package forge.deck;
import java.util.ArrayList;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.item.CardPrinted;
import forge.item.ItemPoolView;
import forge.util.Lambda1;
/**
* TODO: Write javadoc for this type.

View File

@@ -20,9 +20,9 @@ package forge.game;
import java.util.Collections;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.card.CardRules;
import forge.item.CardPrinted;
import forge.util.Lambda1;
import forge.util.Predicate;
/**

View File

@@ -29,7 +29,6 @@ import java.util.TreeMap;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.UtilFunctions;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.Card;
import forge.CardList;
import forge.Constant;
@@ -48,6 +47,7 @@ import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.util.FileUtil;
import forge.util.HttpUtil;
import forge.util.Lambda1;
/**
*

View File

@@ -24,7 +24,6 @@ import java.util.List;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.UtilFunctions;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.AllZone;
import forge.Card;
import forge.CardList;
@@ -43,6 +42,7 @@ import forge.item.CardDb;
import forge.item.CardPrinted;
import forge.item.ItemPool;
import forge.util.FileUtil;
import forge.util.Lambda1;
import forge.util.MyRandom;
/**

View File

@@ -20,12 +20,12 @@ package forge.gui.deckeditor;
import java.awt.Component;
import java.util.ArrayList;
import net.slightlymagic.braids.util.lambda.Lambda0;
import org.apache.commons.lang3.StringUtils;
import forge.deck.DeckBase;
import forge.util.IStorage;
import forge.util.Lambda0;
/**
* TODO: Write javadoc for this type.

View File

@@ -36,7 +36,6 @@ import javax.swing.JCheckBox;
import javax.swing.JLabel;
import net.miginfocom.swing.MigLayout;
import net.slightlymagic.braids.util.lambda.Lambda0;
import forge.Command;
import forge.Singletons;
import forge.deck.Deck;
@@ -51,6 +50,7 @@ import forge.item.CardDb;
import forge.item.CardPrinted;
import forge.item.InventoryItem;
import forge.item.ItemPool;
import forge.util.Lambda0;
import forge.util.Predicate;
/**

View File

@@ -35,7 +35,6 @@ import javax.swing.JCheckBox;
import javax.swing.JLabel;
import net.miginfocom.swing.MigLayout;
import net.slightlymagic.braids.util.lambda.Lambda0;
import forge.Command;
import forge.deck.Deck;
import forge.deck.DeckGroup;
@@ -49,6 +48,7 @@ import forge.gui.deckeditor.elements.TableView;
import forge.item.CardPrinted;
import forge.item.InventoryItem;
import forge.util.IStorage;
import forge.util.Lambda0;
import forge.util.Predicate;
/**

View File

@@ -31,7 +31,6 @@ import java.util.List;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import net.slightlymagic.braids.util.lambda.Lambda0;
import forge.Command;
import forge.Constant;
import forge.deck.Deck;
@@ -47,6 +46,7 @@ import forge.item.CardPrinted;
import forge.item.InventoryItem;
import forge.item.ItemPool;
import forge.quest.QuestController;
import forge.util.Lambda0;
import forge.util.Predicate;
//import forge.quest.data.QuestBoosterPack;

View File

@@ -20,7 +20,6 @@ package forge.gui.deckeditor;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.Singletons;
import forge.card.CardColor;
import forge.card.CardEdition;
@@ -29,6 +28,7 @@ import forge.card.CardRarity;
import forge.item.CardPrinted;
import forge.item.InventoryItem;
import forge.item.InventoryItemFromSet;
import forge.util.Lambda1;
/**
* TODO: Write javadoc for this type.

View File

@@ -33,7 +33,6 @@ import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.Command;
import forge.deck.Deck;
import forge.deck.DeckBase;
@@ -55,6 +54,7 @@ import forge.item.PreconDeck;
import forge.item.TournamentPack;
import forge.quest.QuestController;
import forge.quest.io.ReadPriceList;
import forge.util.Lambda1;
import forge.util.Predicate;
/**

View File

@@ -21,7 +21,8 @@ import java.util.Map.Entry;
import javax.swing.table.TableCellRenderer;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.util.Lambda1;
/**
* Holds single column set up for TableModel. Contains name, width + functions

View File

@@ -20,8 +20,8 @@ package forge.gui.deckeditor.elements;
import java.util.Comparator;
import java.util.Map.Entry;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.item.CardPrinted;
import forge.util.Lambda1;
/**
* <p>

View File

@@ -14,8 +14,9 @@ import forge.gui.home.EMenuItem;
import forge.gui.home.ICSubmenu;
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
import forge.gui.toolbox.FLabel;
import forge.quest.QuestChallenge;
import forge.quest.QuestEventChallenge;
import forge.quest.QuestController;
import forge.quest.bazaar.QuestPetController;
import forge.view.ViewHomeUI;
/**
@@ -76,28 +77,18 @@ public enum CSubmenuChallenges implements ICSubmenu {
view.getCbPlant().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
quest.getAssets().getPetManager().setUsePlant(view.getCbPlant().isSelected());
}
});
view.getCbZep().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
quest.getAssets().getPetManager().setUsePlant(view.getCbZep().isSelected());
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
}
});
view.getCbxPet().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
final int SLOT = 1;
final int index = view.getCbxPet().getSelectedIndex();
if (index != -1 && index != 0) {
final String pet = ((String) view.getCbxPet().getSelectedItem());
quest.getAssets().getPetManager().setSelectedPet(pet.substring(7));
}
else {
quest.getAssets().getPetManager().setSelectedPet(null);
}
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(SLOT, quest.getAssets());
String petName = index <= 0 || index > pets.size() ? null : pets.get(index-1).getName();
quest.selectPet(SLOT, petName);
}
});
}
@@ -115,9 +106,9 @@ public enum CSubmenuChallenges implements ICSubmenu {
view.getLblTitle().setText("Challenges: " + AllZone.getQuest().getRank());
view.getPnlChallenges().removeAll();
final List<QuestChallenge> challenges = AllZone.getQuest().getEventManager().generateChallenges();
final List<QuestEventChallenge> challenges = AllZone.getQuest().getEventManager().generateChallenges();
for (final QuestChallenge c : challenges) {
for (final QuestEventChallenge c : challenges) {
final SelectablePanel temp = new SelectablePanel(c);
view.getPnlChallenges().add(temp, "w 96%!, h 86px!, gap 2% 0 5px 5px");
}

View File

@@ -10,7 +10,8 @@ import forge.gui.home.EMenuItem;
import forge.gui.home.ICSubmenu;
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
import forge.quest.QuestController;
import forge.quest.QuestDuel;
import forge.quest.QuestEventDuel;
import forge.quest.bazaar.QuestPetController;
import forge.view.ViewHomeUI;
/**
@@ -70,28 +71,18 @@ public enum CSubmenuDuels implements ICSubmenu {
view.getCbPlant().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
quest.getAssets().getPetManager().setUsePlant(view.getCbPlant().isSelected());
}
});
view.getCbZep().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
quest.getAssets().getPetManager().setUsePlant(view.getCbZep().isSelected());
quest.selectPet(0, view.getCbPlant().isSelected() ? "Plant" : null);
}
});
view.getCbxPet().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
final int SLOT = 1;
final int index = view.getCbxPet().getSelectedIndex();
if (index != -1 && index != 0) {
final String pet = ((String) view.getCbxPet().getSelectedItem());
quest.getAssets().getPetManager().setSelectedPet(pet.substring(7));
}
else {
quest.getAssets().getPetManager().setSelectedPet(null);
}
List<QuestPetController> pets = quest.getPetsStorage().getAvaliablePets(SLOT, quest.getAssets());
String petName = index <= 0 || index > pets.size() ? null : pets.get(index-1).getName();
quest.selectPet(SLOT, petName);
}
});
}
@@ -109,9 +100,9 @@ public enum CSubmenuDuels implements ICSubmenu {
view.getLblTitle().setText("Duels: " + AllZone.getQuest().getRank());
view.getPnlDuels().removeAll();
final List<QuestDuel> duels = AllZone.getQuest().getEventManager().generateDuels();
final List<QuestEventDuel> duels = AllZone.getQuest().getEventManager().generateDuels();
for (final QuestDuel d : duels) {
for (final QuestEventDuel d : duels) {
final SelectablePanel temp = new SelectablePanel(d);
view.getPnlDuels().add(temp, "w 96%!, h 86px!, gap 2% 0 5px 5px");
}

View File

@@ -8,10 +8,10 @@ import forge.gui.home.ICSubmenu;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.QuestController;
import forge.quest.QuestMode;
import forge.quest.QuestStartPool;
import forge.quest.data.QuestData;
import forge.quest.data.QuestMode;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.QuestStartPool;
import forge.quest.io.QuestDataIO;
import javax.swing.*;
@@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static forge.quest.data.QuestStartPool.*;
import static forge.quest.QuestStartPool.*;
/**
* TODO: Write javadoc for this type.

View File

@@ -16,24 +16,25 @@ import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FTextArea;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.QuestChallenge;
import forge.quest.QuestEventChallenge;
import forge.quest.QuestController;
import forge.quest.QuestEvent;
import forge.quest.QuestMode;
import forge.quest.QuestUtil;
import forge.quest.bazaar.QuestItemType;
import forge.quest.bazaar.QuestPetController;
import forge.quest.data.QuestAchievements;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestMode;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.item.QuestItemType;
import forge.quest.data.pet.QuestPetAbstract;
import net.miginfocom.swing.MigLayout;
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
import java.io.File;
import java.util.Set;
import java.util.List;
import static forge.quest.QuestEvent.QuestEventType.CHALLENGE;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
/**
* Utilities for the quest submenu, all over the MVC spectrum.
@@ -66,11 +67,47 @@ public class SubmenuQuestUtil {
return (delta > 0) ? delta : 0;
}
private static void updatePlantAndPetForView(final IStatsAndPet view, final QuestController qCtrl) {
for( int iSlot = 0; iSlot < QuestController.MAX_PET_SLOTS; iSlot++ ) {
final List<QuestPetController> petList = qCtrl.getPetsStorage().getAvaliablePets(iSlot, qCtrl.getAssets());
final String currentPetName = qCtrl.getSelectedPet(iSlot);
if ( iSlot == 0 ) { // Plant visiblity
if (petList.isEmpty()) {
view.getCbPlant().setVisible(false);
}
else {
view.getCbPlant().setVisible(true);
view.getCbPlant().setSelected(qCtrl.getSelectedPet(iSlot) != null);
}
}
if ( iSlot == 1 ) {
view.getCbxPet().removeAllItems();
// Pet list visibility
if (petList.size() > 0) {
view.getCbxPet().setEnabled(true);
view.getCbxPet().addItem("Don't summon a pet");
for (final QuestPetController pet : petList) {
String name = "Summon " + pet.getName();
view.getCbxPet().addItem(name);
if ( pet.getName().equals(currentPetName) )
view.getCbxPet().setSelectedItem(name);
}
} else {
view.getCbxPet().setVisible(false);
}
}
}
view.getCbZep().setVisible(qCtrl.getAssets().hasItem(QuestItemType.ZEPPELIN));
}
/** Updates stats, pets panels for both duels and challenges. */
public static void updateStatsAndPet() {
final QuestController qData = AllZone.getQuest();
final QuestAchievements qA = qData.getAchievements();
final QuestAssets qS = qData.getAssets();
final QuestController qCtrl = AllZone.getQuest();
final QuestAchievements qA = qCtrl.getAchievements();
final QuestAssets qS = qCtrl.getAssets();
if (qA == null) { return; }
@@ -88,7 +125,7 @@ public class SubmenuQuestUtil {
// Stats panel
view.getLblCredits().setText("Credits: " + qS.getCredits());
view.getLblLife().setText("Life: " + qS.getLife(qData.getMode()));
view.getLblLife().setText("Life: " + qS.getLife(qCtrl.getMode()));
view.getLblWins().setText("Wins: " + qA.getWin());
view.getLblLosses().setText("Losses: " + qA.getLost());
view.updateCurrentDeckStatus();
@@ -106,34 +143,8 @@ public class SubmenuQuestUtil {
+ " (Best:" + qA.getWinStreakBest() + ")");
// Start panel: pet, plant, zep.
if (qData.getMode() == QuestMode.Fantasy) {
final Set<String> petList = qS.getPetManager().getAvailablePetNames();
final QuestPetAbstract currentPet = qS.getPetManager().getSelectedPet();
view.getCbxPet().removeAllItems();
// Pet list visibility
if (petList.size() > 0) {
view.getCbxPet().setEnabled(true);
view.getCbxPet().addItem("Don't summon a pet");
for (final String pet : petList) {
view.getCbxPet().addItem("Summon " + pet);
}
if (currentPet != null) { view.getCbxPet().setSelectedItem("Summon " + currentPet.getName()); }
} else {
view.getCbxPet().setVisible(false);
}
// Plant visiblity
if (qS.getPetManager().getPlant().getLevel() == 0) {
view.getCbPlant().setVisible(false);
}
else {
view.getCbPlant().setVisible(true);
view.getCbPlant().setSelected(qS.getPetManager().shouldPlantBeUsed());
}
view.getCbZep().setVisible(qS.hasItem(QuestItemType.ZEPPELIN));
if (qCtrl.getMode() == QuestMode.Fantasy) {
updatePlantAndPetForView(view, qCtrl);
}
else {
// Classic mode display changes
@@ -215,8 +226,8 @@ public class SubmenuQuestUtil {
int baseLifeHuman = qData.getAssets().getLife(qData.getMode());
int extraLifeHuman = 0;
if (selectedOpponent.getEvent().getEventType() == CHALLENGE) {
lifeAI = ((QuestChallenge) event).getAILife();
if (selectedOpponent.getEvent() instanceof QuestEventChallenge) {
lifeAI = ((QuestEventChallenge) event).getAILife();
if (qData.getAssets().hasItem(QuestItemType.ZEPPELIN)
&& VSubmenuChallenges.SINGLETON_INSTANCE.getCbZep().isSelected()) {
@@ -227,7 +238,7 @@ public class SubmenuQuestUtil {
GameNew.newGame(
Constant.Runtime.HUMAN_DECK[0],
Constant.Runtime.COMPUTER_DECK[0],
QuestUtil.getHumanStartingCards(qData.getAssets(), event),
QuestUtil.getHumanStartingCards(qData, event),
QuestUtil.getComputerStartingCards(event),
baseLifeHuman + extraLifeHuman,
lifeAI,
@@ -295,10 +306,10 @@ public class SubmenuQuestUtil {
// Name
final FLabel lblName = new FLabel.Builder().hoverable(false).build();
if (event.getEventType() == CHALLENGE) {
if (event instanceof QuestEventChallenge) {
lblName.setText(event.getTitle() + ": "
+ StringUtils.capitalize(event.getDifficulty())
+ (((QuestChallenge) event).isRepeatable() ? ", Repeatable" : ""));
+ (((QuestEventChallenge) event).isRepeatable() ? ", Repeatable" : ""));
}
else {
lblName.setText(event.getTitle() + ": "

View File

@@ -18,11 +18,11 @@
package forge.item;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.ImageCache;
import forge.Singletons;
import forge.card.BoosterData;
import forge.card.CardEdition;
import forge.util.Lambda1;
/**
* TODO Write javadoc for this type.

View File

@@ -25,7 +25,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import net.slightlymagic.braids.util.lambda.Lambda1;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -35,6 +34,7 @@ import forge.Singletons;
import forge.card.CardInSet;
import forge.card.CardRules;
import forge.card.MtgDataParser;
import forge.util.Lambda1;
import forge.util.Predicate;
/**

View File

@@ -20,7 +20,6 @@ package forge.item;
import java.util.Arrays;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import org.apache.commons.lang3.ArrayUtils;
@@ -30,6 +29,7 @@ import forge.CardUtil;
import forge.Player;
import forge.card.CardRarity;
import forge.card.CardRules;
import forge.util.Lambda1;
import forge.util.Predicate;
import forge.util.PredicateString;

View File

@@ -20,11 +20,11 @@ package forge.item;
import java.util.ArrayList;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.ImageCache;
import forge.Singletons;
import forge.card.CardEdition;
import forge.card.FatPackData;
import forge.util.Lambda1;
/**
* TODO Write javadoc for this type.

View File

@@ -24,9 +24,9 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.CardList;
import forge.card.CardRules;
import forge.util.Lambda1;
/**
* <p>

View File

@@ -21,7 +21,6 @@ import java.io.File;
import java.util.List;
import java.util.Map;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.ImageCache;
import forge.Singletons;
@@ -29,6 +28,7 @@ import forge.deck.Deck;
import forge.quest.SellRules;
import forge.util.FileSection;
import forge.util.FileUtil;
import forge.util.Lambda1;
/**
* TODO: Write javadoc for this type.

View File

@@ -19,12 +19,12 @@ package forge.item;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.ImageCache;
import forge.Singletons;
import forge.card.BoosterData;
import forge.card.BoosterGenerator;
import forge.card.CardEdition;
import forge.util.Lambda1;
/**
* TODO Write javadoc for this type.

View File

@@ -58,57 +58,60 @@ public final class NewConstants {
/** Constant <code>CARD_PICTURES="card-pictures"</code>. */
public static final String CARD_PICTURES = "card-pictures";
/** Constant <code>CARD_PICTURES_A="card-pictures_a"</code>. */
public static final String CARD_PICTURES_A = "card-pictures_a";
/** Constant <code>CARD_PICTURES_B="card-pictures_b"</code>. */
public static final String CARD_PICTURES_B = "card-pictures_b";
/** Constant <code>CARD_PICTURES_C="card-pictures_c"</code>. */
public static final String CARD_PICTURES_C = "card-pictures_c";
/** Constant <code>CARD_PICTURES_D="card-pictures_d"</code>. */
public static final String CARD_PICTURES_D = "card-pictures_d";
/** Constant <code>CARD_PICTURES_E="card-pictures_e"</code>. */
public static final String CARD_PICTURES_E = "card-pictures_e";
/** Constant <code>CARD_PICTURES_F="card-pictures_f"</code>. */
public static final String CARD_PICTURES_F = "card-pictures_f";
/** Constant <code>CARD_PICTURES_G="card-pictures_g"</code>. */
public static final String CARD_PICTURES_G = "card-pictures_g";
/** Constant <code>CARD_PICTURES_H="card-pictures_h"</code>. */
public static final String CARD_PICTURES_H = "card-pictures_h";
/** Constant <code>CARD_PICTURES_I="card-pictures_i"</code>. */
public static final String CARD_PICTURES_I = "card-pictures_i";
/** Constant <code>CARD_PICTURES_J="card-pictures_j"</code>. */
public static final String CARD_PICTURES_J = "card-pictures_j";
/** Constant <code>CARD_PICTURES_K="card-pictures_k"</code>. */
public static final String CARD_PICTURES_K = "card-pictures_k";
/** Constant <code>CARD_PICTURES_L="card-pictures_l"</code>. */
public static final String CARD_PICTURES_L = "card-pictures_l";
/** Constant <code>CARD_PICTURES_M="card-pictures_m"</code>. */
public static final String CARD_PICTURES_M = "card-pictures_m";
/** Constant <code>CARD_PICTURES_N="card-pictures_n"</code>. */
public static final String CARD_PICTURES_N = "card-pictures_n";
/** Constant <code>CARD_PICTURES_O="card-pictures_o"</code>. */
public static final String CARD_PICTURES_O = "card-pictures_o";
/** Constant <code>CARD_PICTURES_P="card-pictures_p"</code>. */
public static final String CARD_PICTURES_P = "card-pictures_p";
/** Constant <code>CARD_PICTURES_Q="card-pictures_q"</code>. */
public static final String CARD_PICTURES_Q = "card-pictures_q";
/** Constant <code>CARD_PICTURES_R="card-pictures_r"</code>. */
public static final String CARD_PICTURES_R = "card-pictures_r";
/** Constant <code>CARD_PICTURES_S="card-pictures_s"</code>. */
public static final String CARD_PICTURES_S = "card-pictures_s";
/** Constant <code>CARD_PICTURES_T="card-pictures_t"</code>. */
public static final String CARD_PICTURES_T = "card-pictures_t";
/** Constant <code>CARD_PICTURES_U="card-pictures_u"</code>. */
public static final String CARD_PICTURES_U = "card-pictures_u";
/** Constant <code>CARD_PICTURES_V="card-pictures_v"</code>. */
public static final String CARD_PICTURES_V = "card-pictures_v";
/** Constant <code>CARD_PICTURES_W="card-pictures_w"</code>. */
public static final String CARD_PICTURES_W = "card-pictures_w";
/** Constant <code>CARD_PICTURES_X="card-pictures_x"</code>. */
public static final String CARD_PICTURES_X = "card-pictures_x";
/** Constant <code>CARD_PICTURES_Y="card-pictures_y"</code>. */
public static final String CARD_PICTURES_Y = "card-pictures_y";
/** Constant <code>CARD_PICTURES_Z="card-pictures_z"</code>. */
public static final String CARD_PICTURES_Z = "card-pictures_z";
public static final class CardPicturesByLetter {
public static final String CARD_PICTURES_A = "card-pictures_a";
/** Constant <code>CARD_PICTURES_B="card-pictures_b"</code>. */
public static final String CARD_PICTURES_B = "card-pictures_b";
/** Constant <code>CARD_PICTURES_C="card-pictures_c"</code>. */
public static final String CARD_PICTURES_C = "card-pictures_c";
/** Constant <code>CARD_PICTURES_D="card-pictures_d"</code>. */
public static final String CARD_PICTURES_D = "card-pictures_d";
/** Constant <code>CARD_PICTURES_E="card-pictures_e"</code>. */
public static final String CARD_PICTURES_E = "card-pictures_e";
/** Constant <code>CARD_PICTURES_F="card-pictures_f"</code>. */
public static final String CARD_PICTURES_F = "card-pictures_f";
/** Constant <code>CARD_PICTURES_G="card-pictures_g"</code>. */
public static final String CARD_PICTURES_G = "card-pictures_g";
/** Constant <code>CARD_PICTURES_H="card-pictures_h"</code>. */
public static final String CARD_PICTURES_H = "card-pictures_h";
/** Constant <code>CARD_PICTURES_I="card-pictures_i"</code>. */
public static final String CARD_PICTURES_I = "card-pictures_i";
/** Constant <code>CARD_PICTURES_J="card-pictures_j"</code>. */
public static final String CARD_PICTURES_J = "card-pictures_j";
/** Constant <code>CARD_PICTURES_K="card-pictures_k"</code>. */
public static final String CARD_PICTURES_K = "card-pictures_k";
/** Constant <code>CARD_PICTURES_L="card-pictures_l"</code>. */
public static final String CARD_PICTURES_L = "card-pictures_l";
/** Constant <code>CARD_PICTURES_M="card-pictures_m"</code>. */
public static final String CARD_PICTURES_M = "card-pictures_m";
/** Constant <code>CARD_PICTURES_N="card-pictures_n"</code>. */
public static final String CARD_PICTURES_N = "card-pictures_n";
/** Constant <code>CARD_PICTURES_O="card-pictures_o"</code>. */
public static final String CARD_PICTURES_O = "card-pictures_o";
/** Constant <code>CARD_PICTURES_P="card-pictures_p"</code>. */
public static final String CARD_PICTURES_P = "card-pictures_p";
/** Constant <code>CARD_PICTURES_Q="card-pictures_q"</code>. */
public static final String CARD_PICTURES_Q = "card-pictures_q";
/** Constant <code>CARD_PICTURES_R="card-pictures_r"</code>. */
public static final String CARD_PICTURES_R = "card-pictures_r";
/** Constant <code>CARD_PICTURES_S="card-pictures_s"</code>. */
public static final String CARD_PICTURES_S = "card-pictures_s";
/** Constant <code>CARD_PICTURES_T="card-pictures_t"</code>. */
public static final String CARD_PICTURES_T = "card-pictures_t";
/** Constant <code>CARD_PICTURES_U="card-pictures_u"</code>. */
public static final String CARD_PICTURES_U = "card-pictures_u";
/** Constant <code>CARD_PICTURES_V="card-pictures_v"</code>. */
public static final String CARD_PICTURES_V = "card-pictures_v";
/** Constant <code>CARD_PICTURES_W="card-pictures_w"</code>. */
public static final String CARD_PICTURES_W = "card-pictures_w";
/** Constant <code>CARD_PICTURES_X="card-pictures_x"</code>. */
public static final String CARD_PICTURES_X = "card-pictures_x";
/** Constant <code>CARD_PICTURES_Y="card-pictures_y"</code>. */
public static final String CARD_PICTURES_Y = "card-pictures_y";
/** Constant <code>CARD_PICTURES_Z="card-pictures_z"</code>. */
public static final String CARD_PICTURES_Z = "card-pictures_z";
}
/** Constant <code>CARD_PICTURES_OTHER="card-pictures_other"</code>. */
public static final String CARD_PICTURES_OTHER = "card-pictures_other";
/** Constant <code>CARD_PICTURES_TOKEN_HQ="card-pictures_token_hq"</code>. */
@@ -220,6 +223,7 @@ public final class NewConstants {
public static final String PRECONS = "quest/precons-dir";
public static final String BAZAAR = "quest/bazaar";
public static final String BAZAAR_DIR = "quest/bazaar-dir";
}
/**

View File

@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import net.slightlymagic.braids.util.lambda.Lambda1;
import forge.card.BoosterGenerator;
@@ -29,6 +28,7 @@ import forge.card.CardRules;
import forge.card.UnOpenedProduct;
import forge.item.CardDb;
import forge.item.CardPrinted;
import forge.util.Lambda1;
import forge.util.MyRandom;
import forge.util.Predicate;

View File

@@ -18,7 +18,9 @@
package forge.quest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import forge.Singletons;
import forge.deck.Deck;
@@ -26,12 +28,12 @@ import forge.item.CardPrinted;
import forge.item.PreconDeck;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.bazaar.QuestBazaarManager;
import forge.quest.bazaar.QuestPetStorage;
import forge.quest.data.QuestAchievements;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestData;
import forge.quest.data.QuestMode;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.QuestStartPool;
import forge.quest.io.PreconReader;
import forge.util.IStorage;
import forge.util.IStorageView;
@@ -70,7 +72,9 @@ public class QuestController {
private QuestEventManager eventManager = null;
private QuestStallManager bazaar = null;
private QuestBazaarManager bazaar = null;
private QuestPetStorage pets = null;
// This is used by shop. Had no idea where else to place this
private static transient IStorageView<PreconDeck> preconManager = new StorageView<PreconDeck>(new PreconReader(
@@ -88,6 +92,19 @@ public class QuestController {
"What Do You Do With The Other Hand?", "Freelance Sorcerer, Works Weekends",
"Should We Hire Commentators?", "Saltblasted For Your Talent", "Serra Angel Is Your Girlfriend", };
public static final int MAX_PET_SLOTS = 2;
private Map<Integer, String> selectedPets = new HashMap<Integer, String>();
public void selectPet(Integer slot, String name) {
selectedPets.put(slot, name);
}
public String getSelectedPet(Integer slot) {
return selectedPets.get(slot);
}
// Cards - class uses data from here
/**
* Gets the cards.
@@ -288,9 +305,9 @@ public class QuestController {
*
* @return the bazaar
*/
public final QuestStallManager getBazaar() {
public final QuestBazaarManager getBazaar() {
if (null == this.bazaar) {
this.bazaar = new QuestStallManager(ForgeProps.getFile(NewConstants.Quest.BAZAAR));
this.bazaar = new QuestBazaarManager(ForgeProps.getFile(NewConstants.Quest.BAZAAR));
}
return this.bazaar;
}
@@ -307,4 +324,12 @@ public class QuestController {
return this.eventManager;
}
public QuestPetStorage getPetsStorage() {
if ( this.pets == null ) {
this.pets = new QuestPetStorage(ForgeProps.getFile(NewConstants.Quest.BAZAAR));
}
return this.pets;
}
}

View File

@@ -27,12 +27,7 @@ import forge.deck.Deck;
* MODEL - A basic event instance in Quest mode. Can be extended for use in
* unique event types: battles, quests, and others.
*/
public class QuestEvent {
/** */
public enum QuestEventType { /** */
DUEL, /** */
CHALLENGE
}
public abstract class QuestEvent {
// Default vals if none provided in the event file.
/** The event deck. */
private Deck eventDeck = null;
@@ -52,9 +47,6 @@ public class QuestEvent {
/** The name. */
private String name = "Noname";
/** The event type. */
private QuestEventType eventType = null;
/**
* <p>
* getTitle.
@@ -99,17 +91,6 @@ public class QuestEvent {
return this.eventDeck;
}
/**
* <p>
* getEventDeck.
* </p>
*
* @return {@link forge.deck.Deck}
*/
public final QuestEventType getEventType() {
return this.eventType;
}
/**
* <p>
* getIconFilename.
@@ -132,16 +113,6 @@ public class QuestEvent {
return this.name;
}
/**
* Sets the event type.
*
* @param eventType0
* the eventType to set
*/
public void setEventType(final QuestEventType eventType0) {
this.eventType = eventType0;
}
/**
* Sets the name.
*

View File

@@ -32,7 +32,7 @@ import forge.item.CardPrinted;
* quest-specific properties.
*
*/
public class QuestChallenge extends QuestEvent {
public class QuestEventChallenge extends QuestEvent {
// ID (default -1, should be explicitly set at later time.)
/** The id. */
private int id = -1;
@@ -66,9 +66,8 @@ public class QuestChallenge extends QuestEvent {
/**
* Instantiates a new quest challenge.
*/
public QuestChallenge() {
public QuestEventChallenge() {
super();
this.setEventType(QuestEventType.CHALLENGE);
}
/**

View File

@@ -1,10 +1,10 @@
package forge.quest.data;
package forge.quest;
/**
* TODO: Write javadoc for this type.
*
*/
public enum QuestDuelDifficulty {
public enum QuestEventDifficulty {
EASY,
MEDIUM,
HARD,

View File

@@ -25,14 +25,13 @@ package forge.quest;
* MODEL - A single duel event data instance, including meta and deck.
*
*/
public class QuestDuel extends QuestEvent {
public class QuestEventDuel extends QuestEvent {
/**
* Instantiates a new quest duel.
*/
public QuestDuel() {
public QuestEventDuel() {
super();
this.setEventType(QuestEventType.DUEL);
}
}

View File

@@ -32,7 +32,6 @@ import forge.Singletons;
import forge.deck.Deck;
import forge.deck.io.DeckSerializer;
import forge.quest.data.QuestAchievements;
import forge.quest.data.QuestDuelDifficulty;
import forge.quest.data.QuestPreferences;
import forge.quest.data.QuestPreferences.QPref;
import forge.util.FileSection;
@@ -46,12 +45,12 @@ import forge.util.FileUtil;
*/
public class QuestEventManager {
private final Map<QuestDuelDifficulty, List<QuestDuel>> SortedDuels = new EnumMap<QuestDuelDifficulty, List<QuestDuel>>(QuestDuelDifficulty.class);
private final Map<QuestEventDifficulty, List<QuestEventDuel>> SortedDuels = new EnumMap<QuestEventDifficulty, List<QuestEventDuel>>(QuestEventDifficulty.class);
/** */
public final List<QuestDuel> ALL_DUELS = new ArrayList<QuestDuel>();
public final List<QuestEventDuel> ALL_DUELS = new ArrayList<QuestEventDuel>();
/** */
public final List<QuestChallenge> ALL_CHALLENGES = new ArrayList<QuestChallenge>();
public final List<QuestEventChallenge> ALL_CHALLENGES = new ArrayList<QuestEventChallenge>();
/** Instantiate all events and difficulty lists. */
public QuestEventManager(File dir) {
@@ -64,11 +63,11 @@ public class QuestEventManager {
if (contents.containsKey("quest")) {
tempEvent = readChallenge(contents.get("quest"));
ALL_CHALLENGES.add((QuestChallenge) tempEvent);
ALL_CHALLENGES.add((QuestEventChallenge) tempEvent);
}
else {
tempEvent = readDuel(contents.get("metadata"));
ALL_DUELS.add((QuestDuel) tempEvent);
ALL_DUELS.add((QuestEventDuel) tempEvent);
}
// Assemble metadata (may not be necessary later) and deck object.
@@ -93,7 +92,7 @@ public class QuestEventManager {
}
}
for (final QuestChallenge q : ALL_CHALLENGES) {
for (final QuestEventChallenge q : ALL_CHALLENGES) {
if (q.getName().equals(s0)) {
return q;
}
@@ -106,7 +105,7 @@ public class QuestEventManager {
*
* @return an array of {@link java.lang.String} objects.
*/
public final List<QuestDuel> generateDuels() {
public final List<QuestEventDuel> generateDuels() {
final QuestPreferences qpref = Singletons.getModel().getQuestPreferences();
if (AllZone.getQuest().getAchievements() == null) {
return null;
@@ -116,36 +115,36 @@ public class QuestEventManager {
final int cntWins = qCtrl.getAchievements().getWin();
final int index = qCtrl.getAchievements().getDifficulty();
final List<QuestDuel> duelOpponents = new ArrayList<QuestDuel>();
final List<QuestEventDuel> duelOpponents = new ArrayList<QuestEventDuel>();
if (cntWins < qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.EASY).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.EASY).get(1));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.EASY).get(2));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.EASY).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.EASY).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.EASY).get(2));
} else if (cntWins == qpref.getPreferenceInt(QPref.WINS_MEDIUMAI, index)) {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.EASY).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.EASY).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(1));
} else if (cntWins < qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(1));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(2));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(2));
}
else if (cntWins == qpref.getPreferenceInt(QPref.WINS_HARDAI, index)) {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.MEDIUM).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(1));
}
else if (cntWins < qpref.getPreferenceInt(QPref.WINS_EXPERTAI, index)) {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(1));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(2));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(2));
} else {
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.HARD).get(1));
duelOpponents.add(SortedDuels.get(QuestDuelDifficulty.EXPERT).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(0));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.HARD).get(1));
duelOpponents.add(SortedDuels.get(QuestEventDifficulty.EXPERT).get(0));
}
return duelOpponents;
@@ -155,8 +154,8 @@ public class QuestEventManager {
*
* @return a {@link java.util.List} object.
*/
public final List<QuestChallenge> generateChallenges() {
final List<QuestChallenge> challengeOpponents = new ArrayList<QuestChallenge>();
public final List<QuestEventChallenge> generateChallenges() {
final List<QuestEventChallenge> challengeOpponents = new ArrayList<QuestEventChallenge>();
final QuestController qCtrl = AllZone.getQuest();
final QuestAchievements qData = qCtrl.getAchievements();
@@ -171,7 +170,7 @@ public class QuestEventManager {
final List<Integer> unlockedChallengeIds = new ArrayList<Integer>();
final List<Integer> availableChallengeIds = new ArrayList<Integer>();
for (final QuestChallenge qc : ALL_CHALLENGES) {
for (final QuestEventChallenge qc : ALL_CHALLENGES) {
if ((qc.getWinsReqd() <= qData.getWin())
&& !qData.getCompletedChallenges().contains(qc.getId())) {
unlockedChallengeIds.add(qc.getId());
@@ -207,8 +206,8 @@ public class QuestEventManager {
* @param contents
* @param qd
*/
private QuestDuel readDuel(final List<String> contents) {
final QuestDuel qd = new QuestDuel();
private QuestEventDuel readDuel(final List<String> contents) {
final QuestEventDuel qd = new QuestEventDuel();
int eqpos;
String key, value;
@@ -240,11 +239,11 @@ public class QuestEventManager {
* @param contents
* @param qc
*/
private QuestChallenge readChallenge(final List<String> contents) {
private QuestEventChallenge readChallenge(final List<String> contents) {
int eqpos;
String key, value;
final QuestChallenge qc = new QuestChallenge();
final QuestEventChallenge qc = new QuestEventChallenge();
// Unique properties
for (final String s : contents) {
if (StringUtils.isBlank(s)) {
@@ -346,23 +345,23 @@ public class QuestEventManager {
*/
private void assembleDuelDifficultyLists() {
SortedDuels.clear();
SortedDuels.put(QuestDuelDifficulty.EASY, new ArrayList<QuestDuel>());
SortedDuels.put(QuestDuelDifficulty.MEDIUM, new ArrayList<QuestDuel>());
SortedDuels.put(QuestDuelDifficulty.HARD, new ArrayList<QuestDuel>());
SortedDuels.put(QuestDuelDifficulty.EXPERT, new ArrayList<QuestDuel>());
SortedDuels.put(QuestEventDifficulty.EASY, new ArrayList<QuestEventDuel>());
SortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList<QuestEventDuel>());
SortedDuels.put(QuestEventDifficulty.HARD, new ArrayList<QuestEventDuel>());
SortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList<QuestEventDuel>());
String s;
for (final QuestDuel qd : ALL_DUELS) {
for (final QuestEventDuel qd : ALL_DUELS) {
s = qd.getDifficulty();
if (s.equalsIgnoreCase("easy")) {
SortedDuels.get(QuestDuelDifficulty.EASY).add(qd);
SortedDuels.get(QuestEventDifficulty.EASY).add(qd);
} else if (s.equalsIgnoreCase("medium")) {
SortedDuels.get(QuestDuelDifficulty.MEDIUM).add(qd);
SortedDuels.get(QuestEventDifficulty.MEDIUM).add(qd);
} else if (s.equalsIgnoreCase("hard")) {
SortedDuels.get(QuestDuelDifficulty.HARD).add(qd);
SortedDuels.get(QuestEventDifficulty.HARD).add(qd);
} else if (s.equalsIgnoreCase("very hard")) {
SortedDuels.get(QuestDuelDifficulty.EXPERT).add(qd);
SortedDuels.get(QuestEventDifficulty.EXPERT).add(qd);
}
}
}
@@ -370,10 +369,10 @@ public class QuestEventManager {
public void randomizeOpponents() {
long seed = new Random().nextLong();
Random r = new Random(seed);
Collections.shuffle(SortedDuels.get(QuestDuelDifficulty.EASY), r);
Collections.shuffle(SortedDuels.get(QuestDuelDifficulty.MEDIUM), r);
Collections.shuffle(SortedDuels.get(QuestDuelDifficulty.HARD), r);
Collections.shuffle(SortedDuels.get(QuestDuelDifficulty.EXPERT), r);
Collections.shuffle(SortedDuels.get(QuestEventDifficulty.EASY), r);
Collections.shuffle(SortedDuels.get(QuestEventDifficulty.MEDIUM), r);
Collections.shuffle(SortedDuels.get(QuestEventDifficulty.HARD), r);
Collections.shuffle(SortedDuels.get(QuestEventDifficulty.EXPERT), r);
}
/**
@@ -386,8 +385,8 @@ public class QuestEventManager {
* @param n
* @return
*/
private QuestChallenge getChallengeEventByNumber(final int n) {
for (final QuestChallenge qc : ALL_CHALLENGES) {
private QuestEventChallenge getChallengeEventByNumber(final int n) {
for (final QuestEventChallenge qc : ALL_CHALLENGES) {
if (qc.getId() == n) {
return qc;
}

View File

@@ -1,4 +1,4 @@
package forge.quest.data;
package forge.quest;
/**
* TODO: Write javadoc for this type.

View File

@@ -1,4 +1,4 @@
package forge.quest.data;
package forge.quest;
public enum QuestStartPool {
Complete,

View File

@@ -22,12 +22,10 @@ import forge.Card;
import forge.CardList;
import forge.CardUtil;
import forge.Player;
import forge.quest.data.QuestAssets;
import forge.quest.bazaar.QuestPetController;
import java.util.List;
import static forge.quest.QuestEvent.QuestEventType.CHALLENGE;
/**
* <p>
* QuestUtil class.
@@ -66,8 +64,8 @@ public class QuestUtil {
public static CardList getComputerStartingCards(final QuestEvent qe) {
final CardList list = new CardList();
if (qe.getEventType() == CHALLENGE) {
final List<String> extras = ((QuestChallenge) qe).getAIExtraCards();
if (qe instanceof QuestEventChallenge) {
final List<String> extras = ((QuestEventChallenge) qe).getAIExtraCards();
for (final String s : extras) {
list.add(QuestUtil.readExtraCard(s, AllZone.getComputerPlayer()));
@@ -87,15 +85,22 @@ public class QuestUtil {
* a {@link forge.quest.data.QuestData} object.
* @return a {@link forge.CardList} object.
*/
public static CardList getHumanStartingCards(final QuestAssets qd) {
public static CardList getHumanStartingCards(final QuestController qc) {
final CardList list = new CardList();
if (qd.getPetManager().shouldPetBeUsed()) {
list.add(qd.getPetManager().getSelectedPet().getPetCard());
}
if (qd.getPetManager().shouldPlantBeUsed()) {
list.add(qd.getPetManager().getPlant().getPetCard());
for( int iSlot = 0; iSlot < QuestController.MAX_PET_SLOTS; iSlot++ )
{
String petName = qc.getSelectedPet(iSlot);
QuestPetController pet = qc.getPetsStorage().getPet(petName);
if (pet != null) {
Card c = pet.getPetCard(qc.getAssets());
if ( c != null ){
Card petCard = AllZone.getCardFactory().copyCard(c);
petCard.addController(AllZone.getHumanPlayer());
petCard.setToken(true);
list.add(petCard);
}
}
}
return list;
@@ -114,11 +119,11 @@ public class QuestUtil {
* a {@link forge.quest.QuestEvent} object.
* @return a {@link forge.CardList} object.
*/
public static CardList getHumanStartingCards(final QuestAssets qa, final QuestEvent qe) {
final CardList list = QuestUtil.getHumanStartingCards(qa);
public static CardList getHumanStartingCards(final QuestController qc, final QuestEvent qe) {
final CardList list = QuestUtil.getHumanStartingCards(qc);
if (qe.getEventType() == CHALLENGE) {
final List<String> extras = ((QuestChallenge) qe).getHumanExtraCards();
if (qe instanceof QuestEventChallenge) {
final List<String> extras = ((QuestEventChallenge) qe).getHumanExtraCards();
for (final String s : extras) {
list.add(QuestUtil.readExtraCard(s, AllZone.getHumanPlayer()));

View File

@@ -23,14 +23,13 @@ import forge.card.CardEdition;
import forge.card.FormatCollection;
import forge.deck.Deck;
import forge.item.*;
import forge.quest.bazaar.QuestItemType;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestMode;
import forge.quest.data.QuestPreferences;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.item.QuestItemType;
import forge.util.Lambda1;
import forge.util.MyRandom;
import forge.util.Predicate;
import net.slightlymagic.braids.util.lambda.Lambda1;
import java.util.ArrayList;
import java.util.List;

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import javax.swing.ImageIcon;
@@ -27,7 +27,7 @@ import forge.quest.data.QuestAssets;
* @author Forge
* @version $Id$
*/
public interface IQuestStallPurchasable extends Comparable<Object> {
public interface IQuestBazaarItem extends Comparable<Object> {
/**
* <p>
* getPurchaseName.
@@ -53,7 +53,7 @@ public interface IQuestStallPurchasable extends Comparable<Object> {
*
* @return the name of the image that is displayed in the bazaar
*/
ImageIcon getIcon();
ImageIcon getIcon(QuestAssets qA);
/**
* <p>

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest;
package forge.quest.bazaar;
import java.io.File;
import java.io.IOException;
@@ -42,12 +42,8 @@ import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
import forge.AllZone;
import forge.quest.QuestController;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestStallDefinition;
import forge.quest.data.item.IQuestStallPurchasable;
import forge.quest.data.item.QuestItemPassive;
import forge.quest.data.item.QuestItemType;
import forge.quest.data.pet.QuestPetAbstract;
import forge.util.IgnoringXStream;
import forge.util.XmlUtil;
@@ -59,10 +55,10 @@ import forge.util.XmlUtil;
* @author Forge
* @version $Id$
*/
public class QuestStallManager {
public class QuestBazaarManager {
private final File xmlFile;
public QuestStallManager(File xmlFile0) {
public QuestBazaarManager(File xmlFile0) {
xmlFile = xmlFile0;
}
@@ -99,7 +95,7 @@ public class QuestStallManager {
Attr att = document.createAttribute("resolves-to");
att.setValue(qType.getBazaarControllerClass().getCanonicalName());
attrs.setNamedItem(att);
QuestItemPassive ctrl = (QuestItemPassive) xs.fromXML(XmlUtil.nodeToString(n));
QuestItemBasic ctrl = (QuestItemBasic) xs.fromXML(XmlUtil.nodeToString(n));
items.put(name, ctrl);
}
@@ -115,8 +111,8 @@ public class QuestStallManager {
/** Constant <code>stalls</code>. */
private final Map<String, QuestStallDefinition> stalls = new TreeMap<String, QuestStallDefinition>();
/** Constant <code>items</code>. */
private final Map<String, SortedSet<IQuestStallPurchasable>> itemsOnStalls = new TreeMap<String, SortedSet<IQuestStallPurchasable>>(String.CASE_INSENSITIVE_ORDER);
private final Map<String, IQuestStallPurchasable> items = new TreeMap<String, IQuestStallPurchasable>();
private final Map<String, SortedSet<IQuestBazaarItem>> itemsOnStalls = new TreeMap<String, SortedSet<IQuestBazaarItem>>(String.CASE_INSENSITIVE_ORDER);
private final Map<String, IQuestBazaarItem> items = new TreeMap<String, IQuestBazaarItem>();
/**
* <p>
@@ -125,7 +121,7 @@ public class QuestStallManager {
*
* @param stallName
* a {@link java.lang.String} object.
* @return a {@link forge.quest.data.QuestStallDefinition} object.
* @return a {@link forge.quest.bazaar.QuestStallDefinition} object.
*/
public QuestStallDefinition getStall(final String stallName) {
if (stalls.isEmpty()) {
@@ -140,19 +136,27 @@ public class QuestStallManager {
* and maps to appropriate merchant.
*/
public void buildItems() {
final Map<String, IQuestStallPurchasable> itemSet = new HashMap<String, IQuestStallPurchasable>();
final Map<String, IQuestBazaarItem> itemSet = new HashMap<String, IQuestBazaarItem>();
final QuestController qCtrl = AllZone.getQuest();
for ( int iSlot = 0; iSlot < QuestController.MAX_PET_SLOTS; iSlot++)
{
for( QuestPetController pet : qCtrl.getPetsStorage().getAllPets(iSlot)) {
//System.out.println("Pet: " + pet.getName());
itemSet.put(pet.getName(), pet);
}
}
final QuestAssets qA = AllZone.getQuest().getAssets();
for (QuestPetAbstract i : qA.getPetManager().getPetsAndPlants()) { itemSet.put(i.getName(), i); }
itemSet.putAll(items);
itemsOnStalls.clear();
for (QuestStallDefinition thisStall : stalls.values()) {
TreeSet<IQuestStallPurchasable> set = new TreeSet<IQuestStallPurchasable>();
TreeSet<IQuestBazaarItem> set = new TreeSet<IQuestBazaarItem>();
for (String itemName : thisStall.getItems()) {
IQuestStallPurchasable item = itemSet.get(itemName);
IQuestBazaarItem item = itemSet.get(itemName);
//System.out.println(itemName);
set.add(item);
}
itemsOnStalls.put(thisStall.getName(), set);
@@ -165,13 +169,13 @@ public class QuestStallManager {
* @param stallName &emsp; {@link java.lang.String}
* @return {@link java.util.List}.
*/
public List<IQuestStallPurchasable> getItems(final String stallName) {
public List<IQuestBazaarItem> getItems(final String stallName) {
buildItems();
final List<IQuestStallPurchasable> ret = new ArrayList<IQuestStallPurchasable>();
final List<IQuestBazaarItem> ret = new ArrayList<IQuestBazaarItem>();
QuestAssets qA = AllZone.getQuest().getAssets();
for (final IQuestStallPurchasable purchasable : itemsOnStalls.get(stallName)) {
for (final IQuestBazaarItem purchasable : itemsOnStalls.get(stallName)) {
if (purchasable.isAvailableForPurchase(qA)) {
ret.add(purchasable);
}

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import javax.swing.ImageIcon;
@@ -35,10 +35,10 @@ import forge.quest.data.QuestAssets;
* @author Forge
* @version $Id$
*/
public class QuestItemPassive implements IQuestStallPurchasable {
public class QuestItemBasic implements IQuestBazaarItem {
@XStreamAsAttribute
private final QuestItemType itemType;
private QuestItemType itemType;
/**
* Gets the item type.
@@ -50,14 +50,15 @@ public class QuestItemPassive implements IQuestStallPurchasable {
}
@XStreamAsAttribute
private final int maxLevel = 1;
private int maxLevel = 1;
@XStreamAsAttribute
private final String purchaseName = "Read this field from XML";
private final String description = "Read from XML";
private String purchaseName = null;
private String description = "Read from XML";
@XStreamAsAttribute
private final int basePrice = 1000;
private int basePrice = 1000;
/**
* Gets the base price.
@@ -78,7 +79,7 @@ public class QuestItemPassive implements IQuestStallPurchasable {
*
* @param type0 the type0
*/
protected QuestItemPassive(final QuestItemType type0) {
protected QuestItemBasic(final QuestItemType type0) {
this.itemType = type0;
}
@@ -168,7 +169,7 @@ public class QuestItemPassive implements IQuestStallPurchasable {
* @return a {@link java.lang.String} object.
*/
@Override
public ImageIcon getIcon() {
public ImageIcon getIcon(QuestAssets qA) {
return FSkin.getIcon(this.icon);
}
@@ -197,7 +198,7 @@ public class QuestItemPassive implements IQuestStallPurchasable {
/** {@inheritDoc} */
@Override
public final int compareTo(final Object o) {
final IQuestStallPurchasable q = (IQuestStallPurchasable) o;
final IQuestBazaarItem q = (IQuestBazaarItem) o;
return this.getPurchaseName().compareTo(q.getPurchaseName());
}
}

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import forge.quest.data.QuestAssets;
@@ -25,7 +25,7 @@ import forge.quest.data.QuestAssets;
* @author Forge
* @version $Id$
*/
public class QuestItemElixir extends QuestItemPassive {
public class QuestItemElixir extends QuestItemBasic {
/**
* <p>

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import forge.quest.data.QuestAssets;
@@ -27,7 +27,7 @@ import forge.quest.data.QuestAssets;
* @author Forge
* @version $Id$
*/
public class QuestItemEstates extends QuestItemPassive {
public class QuestItemEstates extends QuestItemBasic {
/**
* <p>
* Constructor for QuestItemEstates.

View File

@@ -15,10 +15,10 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import forge.quest.QuestMode;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestMode;
/**
* This item has special coding.
@@ -26,7 +26,7 @@ import forge.quest.data.QuestMode;
* @author Forge
* @version $Id: QuestItemElixir.java 13728 2012-02-01 11:13:34Z moomarc $
*/
public class QuestItemPoundFlesh extends QuestItemPassive {
public class QuestItemPoundFlesh extends QuestItemBasic {
/**
* <p>

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import forge.quest.data.QuestItemCondition;
@@ -26,14 +26,14 @@ import forge.quest.data.QuestItemCondition;
public enum QuestItemType {
/** The SLEIGHT. */
SLEIGHT("Sleight", QuestItemPassive.class, QuestItemCondition.class), /** The ESTATES. */
SLEIGHT("Sleight", QuestItemBasic.class, QuestItemCondition.class), /** The ESTATES. */
ESTATES("Estates", QuestItemEstates.class,
QuestItemCondition.class),
/** The LUCK y_ coin. */
LUCKY_COIN("Lucky Coin", QuestItemPassive.class, QuestItemCondition.class),
LUCKY_COIN("Lucky Coin", QuestItemBasic.class, QuestItemCondition.class),
/** The MAP. */
MAP(
"Map", QuestItemPassive.class, QuestItemCondition.class),
"Map", QuestItemBasic.class, QuestItemCondition.class),
/** The ZEPPELIN. */
ZEPPELIN("Zeppelin", QuestItemZeppelin.class,
QuestItemCondition.class),
@@ -44,10 +44,10 @@ public enum QuestItemType {
"Pound of Flesh", QuestItemPoundFlesh.class, QuestItemCondition.class);
private final String saveFileKey;
private final Class<? extends QuestItemPassive> bazaarControllerClass;
private final Class<? extends QuestItemBasic> bazaarControllerClass;
private final Class<? extends QuestItemCondition> modelClass;
private QuestItemType(final String key, final Class<? extends QuestItemPassive> controllerClass0,
private QuestItemType(final String key, final Class<? extends QuestItemBasic> controllerClass0,
final Class<? extends QuestItemCondition> modelClass0) {
this.saveFileKey = key;
this.bazaarControllerClass = controllerClass0;
@@ -68,7 +68,7 @@ public enum QuestItemType {
*
* @return the bazaar controller class
*/
public Class<? extends QuestItemPassive> getBazaarControllerClass() {
public Class<? extends QuestItemBasic> getBazaarControllerClass() {
return this.bazaarControllerClass;
}

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.item;
package forge.quest.bazaar;
import forge.quest.data.QuestAssets;
@@ -27,7 +27,7 @@ import forge.quest.data.QuestAssets;
* @author Forge
* @version $Id$
*/
public class QuestItemZeppelin extends QuestItemPassive {
public class QuestItemZeppelin extends QuestItemBasic {
/**
* <p>
* Constructor for QuestItemZeppelin.

View File

@@ -15,30 +15,52 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
package forge.quest.bazaar;
import javax.swing.ImageIcon;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import java.io.File;
import java.util.List;
import java.util.ArrayList;
import forge.Card;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.data.QuestAssets;
import forge.quest.data.item.IQuestStallPurchasable;
/**
* <p>
* Abstract QuestPetAbstract class.
* </p>
*
* It's not good to store in a single class pets properties and bazaar sellable - such is a tradeoff for speed of development
* @author Forge
* @version $Id$
*/
public abstract class QuestPetAbstract implements IQuestStallPurchasable {
public class QuestPetController implements IQuestBazaarItem {
/** The level. */
private int level;
private final int maxLevel;
// transient here ?
@XStreamAsAttribute()
private int maxLevel;
private final List<QuestPetStats> levels = new ArrayList<QuestPetStats>();
@XStreamAsAttribute()
private final String name;
@XStreamAlias(value="desc")
private final String description;
@XStreamAsAttribute()
private final String saveFileKey;
@XStreamAsAttribute()
private int slot;
protected int getPetLevel(QuestAssets qA) {
int level = qA.getPetLevel(saveFileKey);
return level < 0 ? 0 : level > maxLevel ? maxLevel : level;
}
/**
* <p>
@@ -47,16 +69,11 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*
* @return a {@link forge.Card} object.
*/
public abstract Card getPetCard();
/**
* <p>
* getAllUpgradePrices.
* </p>
*
* @return an array of int.
*/
public abstract int[] getAllUpgradePrices();
public Card getPetCard(QuestAssets qA) {
return this.levels.get(getPetLevel(qA)).getCard();
}
/**
* <p>
@@ -67,24 +84,18 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*/
@Override
public final int getBuyingPrice(QuestAssets qA) {
return this.getAllUpgradePrices()[this.level];
int level = getPetLevel(qA);
// we'll buy next level
return level >= maxLevel ? -1 /* cannot buy */ : this.levels.get(level + 1).getCost();
}
/** {@inheritDoc} */
@Override
public final int getSellingPrice(QuestAssets qA) {
return 0;
}
/**
* <p>
* getAllUpgradeDescriptions.
* </p>
*
* @return an array of {@link java.lang.String} objects.
*/
public abstract String[] getAllUpgradeDescriptions();
/**
* <p>
* getUpgradeDescription.
@@ -92,19 +103,10 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*
* @return a {@link java.lang.String} object.
*/
public final String getUpgradeDescription() {
return this.getAllUpgradeDescriptions()[this.level];
public final String getUpgradeDescription(QuestAssets qA) {
return this.levels.get(getPetLevel(qA)).getNextLevel();
}
/**
* <p>
* getAllImageNames.
* </p>
*
* @return an array of {@link java.lang.String} objects.
*/
public abstract ImageIcon[] getAllIcons();
/**
* <p>
* getIcon.
@@ -113,19 +115,12 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
* @return a {@link java.lang.String} object.
*/
@Override
public final ImageIcon getIcon() {
return this.getAllIcons()[this.level];
public final ImageIcon getIcon(QuestAssets qA) {
String path = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
int level = getPetLevel(qA);
return new ImageIcon( path + levels.get(level < maxLevel ? level + 1 : level ).getPicture() + ".jpg");
}
/**
* <p>
* getAllStats.
* </p>
*
* @return an array of {@link java.lang.String} objects.
*/
public abstract String[] getAllStats();
/**
* <p>
* getStats.
@@ -133,8 +128,8 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*
* @return a {@link java.lang.String} object.
*/
public final String getStats() {
return this.getAllStats()[this.level];
public final String getStats(QuestAssets qA) {
return this.levels.get(getPetLevel(qA)).getStats();
}
/**
@@ -144,30 +139,9 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*
* @return a {@link java.lang.String} object.
*/
public final String getUpgradedStats() {
return this.getAllStats()[this.level + 1];
}
/**
* <p>
* Getter for the field <code>level</code>.
* </p>
*
* @return a int.
*/
public final int getLevel() {
return this.level;
}
/**
* <p>
* incrementLevel.
* </p>
*/
public final void incrementLevel() {
if (this.level < this.maxLevel) {
this.level++;
}
public final String getUpgradedStats(QuestAssets qA) {
int level = getPetLevel(qA);
return level >= maxLevel ? "N/A" : this.levels.get(level+1).getStats();
}
/**
@@ -181,35 +155,14 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
return this.maxLevel;
}
/**
* <p>
* Constructor for QuestPetAbstract.
* </p>
*
* @param name
* a {@link java.lang.String} object.
* @param description
* a {@link java.lang.String} object.
* @param maxLevel
* a int.
*/
protected QuestPetAbstract(final String name, final String description, final int maxLevel) {
this.description = description;
this.name = name;
this.maxLevel = maxLevel;
// Never to be called, instances will be read from xml
private QuestPetController() {
this.description = null;
this.name = null;
this.maxLevel = 0;
this.saveFileKey = null;
}
/**
* <p>
* Setter for the field <code>level</code>.
* </p>
*
* @param level
* a int.
*/
public final void setLevel(final int level) {
this.level = level;
}
/**
* <p>
@@ -221,8 +174,8 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
@Override
public final String getPurchaseDescription(QuestAssets qA) {
return this.getDescription()
+ "\n\nCurrent stats: " + this.getStats() + "\nUpgraded stats: "
+ this.getUpgradedStats();
+ "\n\nCurrent stats: " + this.getStats(qA) + "\nUpgraded stats: "
+ this.getUpgradedStats(qA);
}
@@ -287,11 +240,7 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*/
@Override
public boolean isAvailableForPurchase(QuestAssets qA) {
final QuestPetAbstract pet = qA.getPetManager().getPet(this.name);
if (pet == null) {
return true;
}
return pet.level < pet.getMaxLevel();
return getPetLevel(qA) < getMaxLevel();
}
/**
@@ -301,6 +250,18 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable {
*/
@Override
public void onPurchase(QuestAssets qA) {
qA.getPetManager().addPetLevel(this.name);
qA.setPetLevel(saveFileKey, getPetLevel(qA) + 1);
}
public String getSaveFileKey() {
return saveFileKey;
}
/**
* TODO: Write javadoc for this method.
* @return
*/
public int getSlot() {
return slot;
}
}

View File

@@ -0,0 +1,84 @@
package forge.quest.bazaar;
import java.io.File;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import forge.AllZone;
import forge.Card;
import forge.CardReader;
import forge.card.cardfactory.CardFactoryUtil;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.util.FileUtil;
/**
* TODO: Write javadoc for this type.
*
*/
@XStreamAlias(value="level")
public class QuestPetStats {
@XStreamAsAttribute()
@XStreamAlias(value = "value")
private int levelValue;
@XStreamAsAttribute()
@XStreamAlias(value = "pic")
private final String picture;
@XStreamAsAttribute()
private final String stats;
@XStreamAsAttribute()
private final String cardFile;
@XStreamAsAttribute()
private int cost;
@XStreamAsAttribute()
private final String nextLevel;
private transient Card petCard;
public QuestPetStats()
{
picture = null;
stats = null;
cardFile = null;
nextLevel = null;
}
public final int getLevelValue() {
return levelValue;
}
public final String getPicture() {
return picture;
}
public final String getStats() {
return stats;
}
public final Card getCard() {
if ( petCard == null ) {
List<String> cardLines = FileUtil.readFile(new File(ForgeProps.getFile(NewConstants.Quest.BAZAAR_DIR), cardFile));
petCard = CardReader.readCard(cardLines);
petCard.setImageFilename(picture);
petCard.setToken(true);
petCard.setOwner(AllZone.getHumanPlayer());
}
return petCard;
}
public final int getCost() {
return cost;
}
public final String getNextLevel() {
return nextLevel;
}
}

View File

@@ -0,0 +1,114 @@
package forge.quest.bazaar;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
import forge.quest.data.QuestAssets;
import forge.util.IgnoringXStream;
import forge.util.XmlUtil;
/**
* TODO: Write javadoc for this type.
*
*/
public class QuestPetStorage {
Map<Integer, List<QuestPetController>> petsBySlot = new HashMap<Integer, List<QuestPetController>>();
Map<String, QuestPetController> petsByName = new HashMap<String, QuestPetController>();
/**
* TODO: Write javadoc for Constructor.
* @param file
*/
public QuestPetStorage(File file) {
DocumentBuilder builder;
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final Document document = builder.parse(file);
XStream xs = new IgnoringXStream();
xs.autodetectAnnotations(true);
NodeList xmlPets = document.getElementsByTagName("pets").item(0).getChildNodes();
for (int iN = 0; iN < xmlPets.getLength(); iN++) {
Node n = xmlPets.item(iN);
if (n.getNodeType() != Node.ELEMENT_NODE) { continue; }
Attr att = document.createAttribute("resolves-to");
att.setValue(QuestPetController.class.getCanonicalName());
n.getAttributes().setNamedItem(att);
String sXml = XmlUtil.nodeToString(n);
QuestPetController petCtrl = (QuestPetController) xs.fromXML(sXml);
addToMap(petCtrl);
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
/**
* TODO: Write javadoc for this method.
* @param petCtrl
*/
private void addToMap(QuestPetController petCtrl) {
int iSlot = petCtrl.getSlot();
List<QuestPetController> list = petsBySlot.get(Integer.valueOf(iSlot));
if ( null == list ) {
list = new ArrayList<QuestPetController>();
petsBySlot.put(Integer.valueOf(iSlot), list);
}
petsByName.put(petCtrl.getName(), petCtrl);
list.add(petCtrl);
}
/**
* TODO: Write javadoc for this method.
* @param petName
* @return
*/
public QuestPetController getPet(String petName) {
return petsByName.get(petName);
}
/**
* TODO: Write javadoc for this method.
* @param i
* @param qA
* @return
*/
public List<QuestPetController> getAvaliablePets(int iSlot, QuestAssets qA) {
List<QuestPetController> result = new ArrayList<QuestPetController>();
List<QuestPetController> allPossible = petsBySlot.get(Integer.valueOf(iSlot));
if ( null != allPossible ) for(QuestPetController c : allPossible) if( qA.getPetLevel(c.getSaveFileKey()) > 0 ) result.add(c);
return result;
}
public List<QuestPetController> getAllPets(int iSlot) {
List<QuestPetController> result = new ArrayList<QuestPetController>();
List<QuestPetController> allPossible = petsBySlot.get(Integer.valueOf(iSlot));
if ( null != allPossible ) for(QuestPetController c : allPossible) result.add(c);
return result;
}
}

View File

@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data;
package forge.quest.bazaar;
import java.util.ArrayList;
import java.util.List;

View File

@@ -0,0 +1,3 @@
/** Forge Card Game. */
package forge.quest.bazaar;

View File

@@ -28,10 +28,10 @@ import forge.item.InventoryItem;
import forge.item.ItemPool;
import forge.item.ItemPoolView;
import forge.quest.QuestDeckMap;
import forge.quest.QuestMode;
import forge.quest.QuestUtilCards;
import forge.quest.bazaar.QuestItemType;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.item.QuestItemType;
import forge.quest.data.pet.QuestPetManager;
/**
* TODO: Write javadoc for this type.
@@ -60,13 +60,12 @@ public class QuestAssets {
final ItemPool<InventoryItem> shopList = new ItemPool<InventoryItem>(InventoryItem.class); // the
// gadgets
/** The pet manager. */
final QuestPetManager petManager = new QuestPetManager(); // pets
/** The inventory items. */
final Map<QuestItemType, QuestItemCondition> inventoryItems = new EnumMap<QuestItemType, QuestItemCondition>(
QuestItemType.class);
// Much the same like other map, but keyed by string (to support a lot of custom pets)
final Map<String, QuestItemCondition> combatPets = new HashMap<String, QuestItemCondition>();
/**
* Checks for item.
*
@@ -98,6 +97,7 @@ public class QuestAssets {
return this.inventoryItems.get(itemType);
}
/**
* Sets the item level.
*
@@ -120,6 +120,24 @@ public class QuestAssets {
cond.setLevel(level);
}
public final int getPetLevel(final String name) {
final QuestItemCondition state = this.combatPets.get(name);
return state == null ? 0 : state.getLevel();
}
public final QuestItemCondition getPetCondition(final String name) {
return this.combatPets.get(name);
}
public final void setPetLevel(final String name, final int level) {
QuestItemCondition cond = this.combatPets.get(name);
if (null == cond) {
cond = new QuestItemCondition(); // pets have only level that should be serialized for now
this.combatPets.put(name, cond);
}
cond.setLevel(level);
}
/**
* Instantiates a new quest assets.
*/
@@ -179,14 +197,7 @@ public class QuestAssets {
this.credits = credits0;
}
/**
* Gets the pet manager.
*
* @return the pet manager
*/
public QuestPetManager getPetManager() {
return this.petManager;
}
// Credits
/**

View File

@@ -17,6 +17,7 @@
*/
package forge.quest.data;
import forge.quest.QuestMode;
import forge.quest.io.QuestDataIO;
//when you create QuestDataOld and AFTER you copy the AI decks over
@@ -33,9 +34,8 @@ import forge.quest.io.QuestDataIO;
*/
public final class QuestData {
// This field holds the version of the Quest Data
/** Constant <code>CURRENT_VERSION_NUMBER=2</code>. */
public static final int CURRENT_VERSION_NUMBER = 4;
/** Holds the latest version of the Quest Data */
public static final int CURRENT_VERSION_NUMBER = 5;
// This field places the version number into QD instance,
// but only when the object is created through the constructor

View File

@@ -1,3 +0,0 @@
/** Forge Card Game. */
package forge.quest.data.item;

View File

@@ -1,119 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.io.File;
import javax.swing.ImageIcon;
import forge.AllZone;
import forge.Card;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* QuestPetBird class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetBird extends QuestPetAbstract {
/** {@inheritDoc} */
@Override
public final Card getPetCard() {
final Card petCard = new Card();
petCard.setName("Bird Pet");
petCard.addController(AllZone.getHumanPlayer());
petCard.setOwner(AllZone.getHumanPlayer());
petCard.addColor("W");
petCard.setToken(true);
petCard.addType("Creature");
petCard.addType("Bird");
petCard.addType("Pet");
petCard.addIntrinsicKeyword("Flying");
if (this.getLevel() == 1) {
petCard.setImageName("W 0 1 Bird Pet");
petCard.setBaseAttack(0);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 2) {
petCard.setImageName("W 1 1 Bird Pet");
petCard.setBaseAttack(1);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 3) {
petCard.setImageName("W 2 1 Bird Pet");
petCard.setBaseAttack(2);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 4) {
petCard.setImageName("W 2 1 Bird Pet First Strike");
petCard.setBaseAttack(2);
petCard.setBaseDefense(1);
petCard.addIntrinsicKeyword("First Strike");
}
return petCard;
}
/**
* <p>
* Constructor for QuestPetBird.
* </p>
*/
public QuestPetBird() {
super("Bird", "Unmatched in speed, agility and awareness, this trained hawk makes a fantastic hunter.", 4);
}
/** {@inheritDoc} */
@Override
public final int[] getAllUpgradePrices() {
return new int[] { 200, 300, 450, 400 };
}
/** {@inheritDoc} */
@Override
public final String[] getAllUpgradeDescriptions() {
return new String[] { "Purchase Bird", "Improve the attack power of your bird.",
"Improve the attack power of your bird.", "Give First Strike to your bird.",
"You cannot train your bird any further" };
}
/** {@inheritDoc} */
@Override
public final String[] getAllStats() {
return new String[] { "You do not own a bird", "0/1, W, Flying", "1/1, W, Flying", "2/1, W, Flying",
"2/1, W, Flying, First Strike" };
}
/** {@inheritDoc} */
@Override
public final ImageIcon[] getAllIcons() {
final String address = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
return new ImageIcon[] {
new ImageIcon(address + "w_0_1_bird_pet.jpg"),
new ImageIcon(address + "w_1_1_bird_pet.jpg"),
new ImageIcon(address + "w_2_1_bird_pet.jpg"),
new ImageIcon(address + "w_2_1_bird_pet_first_strike.jpg") };
}
}

View File

@@ -1,115 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.io.File;
import javax.swing.ImageIcon;
import forge.AllZone;
import forge.Card;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* QuestPetCrocodile class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetCrocodile extends QuestPetAbstract {
/** {@inheritDoc} */
@Override
public final Card getPetCard() {
final Card petCard = new Card();
petCard.setName("Crocodile Pet");
petCard.addController(AllZone.getHumanPlayer());
petCard.setOwner(AllZone.getHumanPlayer());
petCard.addColor("B");
petCard.setToken(true);
petCard.addType("Creature");
petCard.addType("Crocodile");
petCard.addType("Pet");
if (this.getLevel() == 1) {
petCard.setImageName("B 1 1 Crocodile Pet");
petCard.setBaseAttack(1);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 2) {
petCard.setImageName("B 2 1 Crocodile Pet");
petCard.setBaseAttack(2);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 3) {
petCard.setImageName("B 3 1 Crocodile Pet");
petCard.setBaseAttack(3);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 4) {
petCard.setImageName("B 3 1 Crocodile Pet Swampwalk");
petCard.setBaseAttack(3);
petCard.setBaseDefense(1);
petCard.addIntrinsicKeyword("Swampwalk");
}
return petCard;
}
/**
* <p>
* Constructor for QuestPetCrocodile.
* </p>
*/
public QuestPetCrocodile() {
super("Crocodile", "With its razor sharp teeth, this swamp-dwelling monster is extremely dangerous.", 4);
}
/** {@inheritDoc} */
@Override
public final int[] getAllUpgradePrices() {
return new int[] { 250, 300, 450, 600 };
}
/** {@inheritDoc} */
@Override
public final String[] getAllUpgradeDescriptions() {
return new String[] { "Purchase Crocodile", "Improve the attack power of your crocodile.",
"Improve the attack power of your crocodile.", "Give Swampwalking to your crocodile.",
"You cannot train your crocodile any further" };
}
/** {@inheritDoc} */
@Override
public final String[] getAllStats() {
return new String[] { "You do not own a crocodile", "1/1, B", "2/1, B", "3/1, B", "3/1, B, Swampwalking" };
}
/** {@inheritDoc} */
@Override
public final ImageIcon[] getAllIcons() {
final String address = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
return new ImageIcon[] {
new ImageIcon(address + "b_1_1_crocodile_pet.jpg"),
new ImageIcon(address + "b_2_1_crocodile_pet.jpg"),
new ImageIcon(address + "b_3_1_crocodile_pet.jpg"),
new ImageIcon(address + "b_3_1_crocodile_pet_swampwalk.jpg") };
}
}

View File

@@ -1,131 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.io.File;
import javax.swing.ImageIcon;
import forge.AllZone;
import forge.Card;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* QuestPetHound class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetHound extends QuestPetAbstract {
/**
* <p>
* Constructor for QuestPetHound.
* </p>
*/
public QuestPetHound() {
super("Hound", "Dogs are said to be man's best friend. Definitely not this one.", 4);
}
/** {@inheritDoc} */
@Override
public final Card getPetCard() {
final Card petCard = new Card();
petCard.setName("Hound Pet");
petCard.addController(AllZone.getHumanPlayer());
petCard.setOwner(AllZone.getHumanPlayer());
petCard.addColor("R");
petCard.setToken(true);
petCard.addType("Creature");
petCard.addType("Hound");
petCard.addType("Pet");
if (this.getLevel() == 1) {
petCard.setImageName("R 1 1 Hound Pet");
petCard.setBaseAttack(1);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 2) {
petCard.setImageName("R 1 1 Hound Pet Haste");
petCard.setBaseAttack(1);
petCard.setBaseDefense(1);
petCard.addIntrinsicKeyword("Haste");
} else if (this.getLevel() == 3) {
petCard.setImageName("R 2 1 Hound Pet");
petCard.setBaseAttack(2);
petCard.setBaseDefense(1);
petCard.addIntrinsicKeyword("Haste");
} else if (this.getLevel() == 4) {
petCard.setImageName("R 2 1 Hound Pet Alone");
petCard.setBaseAttack(2);
petCard.setBaseDefense(1);
petCard.addIntrinsicKeyword("Haste");
final Trigger myTrigger = TriggerHandler
.parseTrigger(
"Mode$ Attacks | ValidCard$ Card.Self | Alone$ True | TriggerDescription$ Whenever CARDNAME attacks alone, it gets +2/+0 until end of turn.",
petCard, true);
final AbilityFactory af = new AbilityFactory();
myTrigger.setOverridingAbility(af.getAbility("AB$Pump | Cost$ 0 | Defined$ Self | NumAtt$ 2", petCard));
petCard.addTrigger(myTrigger);
}
return petCard;
}
/** {@inheritDoc} */
@Override
public final int[] getAllUpgradePrices() {
return new int[] { 200, 350, 450, 750 };
}
/** {@inheritDoc} */
@Override
public final String[] getAllUpgradeDescriptions() {
return new String[] { "Purchase hound", "Give Haste to your hound.", "Improve the attack power of your hound.",
"Greatly improves your hound's attack power if it attacks alone.",
"You cannot train your hound any further" };
}
/** {@inheritDoc} */
@Override
public final String[] getAllStats() {
return new String[] { "You do not own a hound", "1/1, R", "1/1, R, Haste", "2/1, R, Haste",
"2/1, R, Haste, Whenever this creature attacks alone, it gets +2/+0 until end of turn." };
}
/** {@inheritDoc} */
@Override
public final ImageIcon[] getAllIcons() {
final String address = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
return new ImageIcon[] {
new ImageIcon(address + "r_1_1_hound_pet.jpg"),
new ImageIcon(address + "r_1_1_hound_pet_haste.jpg"),
new ImageIcon(address + "r_2_1_hound_pet.jpg"),
new ImageIcon(address + "r_2_1_hound_pet_alone.jpg") };
}
}

View File

@@ -1,264 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* <p>
* QuestPetManager class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetManager {
/** The pets. */
private final Map<String, QuestPetAbstract> pets = new HashMap<String, QuestPetAbstract>();
/** The selected pet. */
private QuestPetAbstract selectedPet;
/** The plant. */
private QuestPetAbstract plant;
/** The use plant. */
private boolean usePlant;
/**
* <p>
* Constructor for QuestPetManager.
* </p>
*/
public QuestPetManager() {
this.plant = new QuestPetPlant();
for (final QuestPetAbstract pet : QuestPetManager.getAllPets()) {
this.addPet(pet);
}
}
/**
* <p>
* Setter for the field <code>selectedPet</code>.
* </p>
*
* @param pet
* a {@link java.lang.String} object.
*/
public final void setSelectedPet(final String pet) {
this.selectedPet = (pet == null) ? null : this.getPet(pet);
}
/**
* <p>
* Getter for the field <code>selectedPet</code>.
* </p>
*
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public final QuestPetAbstract getSelectedPet() {
return this.selectedPet;
}
/**
* <p>
* Getter for the field <code>plant</code>.
* </p>
*
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public final QuestPetAbstract getPlant() {
return this.plant;
}
/**
* <p>
* addPlantLevel.
* </p>
*/
public final void addPlantLevel() {
if (this.plant == null) {
this.plant = new QuestPetPlant();
} else {
this.plant.incrementLevel();
}
}
/**
* <p>
* getPet.
* </p>
*
* @param petName
* a {@link java.lang.String} object.
* @return a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public final QuestPetAbstract getPet(final String petName) {
return this.pets.get(petName);
}
/**
* <p>
* addPet.
* </p>
*
* @param newPet
* a {@link forge.quest.data.pet.QuestPetAbstract} object.
*/
public final void addPet(final QuestPetAbstract newPet) {
this.pets.put(newPet.getName(), newPet);
}
/**
* <p>
* getPetNames.
* </p>
*
* @return a {@link java.util.Set} object.
*/
public final Set<String> getPetNames() {
return this.pets.keySet();
}
/**
* <p>
* addPetLevel.
* </p>
*
* @param s
* a {@link java.lang.String} object.
*/
public final void addPetLevel(final String s) {
this.pets.get(s).incrementLevel();
}
/**
* <p>
* shouldPlantBeUsed.
* </p>
*
* @return a boolean.
*/
public final boolean shouldPlantBeUsed() {
return this.isUsePlant();
}
/**
* <p>
* shouldPetBeUsed.
* </p>
*
* @return a boolean.
*/
public final boolean shouldPetBeUsed() {
return this.selectedPet != null;
}
/**
* <p>
* getAllPets.
* </p>
*
* @return a {@link java.util.Set} object.
*/
private static Set<QuestPetAbstract> getAllPets() {
final SortedSet<QuestPetAbstract> set = new TreeSet<QuestPetAbstract>();
set.add(new QuestPetBird());
set.add(new QuestPetCrocodile());
set.add(new QuestPetHound());
set.add(new QuestPetWolf());
return set;
}
/**
* <p>
* getAvailablePetNames.
* </p>
*
* @return a {@link java.util.Set} object.
*/
public final Set<String> getAvailablePetNames() {
final SortedSet<String> set = new TreeSet<String>();
for (final Map.Entry<String, QuestPetAbstract> pet : this.pets.entrySet()) {
if (pet.getValue().getLevel() > 0) {
set.add(pet.getKey());
}
}
return set;
}
/**
* <p>
* getPetsAndPlants.
* </p>
*
* @return a {@link java.util.Collection} object.
*/
public final Collection<QuestPetAbstract> getPetsAndPlants() {
final Set<QuestPetAbstract> petsAndPlants = new HashSet<QuestPetAbstract>(this.pets.values());
petsAndPlants.add(this.plant);
return petsAndPlants;
}
// Magic to support added pet types when reading saves.
/**
* <p>
* readResolve.
* </p>
*
* @return a {@link java.lang.Object} object.
*/
private Object readResolve() {
for (final QuestPetAbstract pet : QuestPetManager.getAllPets()) {
if (!this.pets.containsKey(pet.getName())) {
this.addPet(pet);
}
}
return this;
}
/**
* Checks if is use plant.
*
* @return the usePlant
*/
public boolean isUsePlant() {
return this.usePlant;
}
/**
* Sets the use plant.
*
* @param usePlant0
* the usePlant to set
*/
public void setUsePlant(final boolean usePlant0) {
this.usePlant = usePlant0;
}
}

View File

@@ -1,188 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.io.File;
import javax.swing.ImageIcon;
import forge.AllZone;
import forge.Card;
import forge.Constant;
import forge.Singletons;
import forge.card.cost.Cost;
import forge.card.spellability.AbilityActivated;
import forge.card.spellability.SpellAbility;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.data.QuestAssets;
/**
* <p>
* QuestPetPlant class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetPlant extends QuestPetAbstract {
/**
* QuestPetPlant.
*
* @return Card
*/
@Override
public final Card getPetCard() {
final Card petCard = new Card();
petCard.setName("Plant Wall");
petCard.addController(AllZone.getHumanPlayer());
petCard.setOwner(AllZone.getHumanPlayer());
petCard.addColor("G");
petCard.setToken(true);
petCard.addType("Creature");
petCard.addType("Plant");
petCard.addType("Wall");
petCard.addIntrinsicKeyword("Defender");
if (this.getLevel() == 1) {
petCard.setImageName("G 0 1 Plant Wall");
petCard.setBaseAttack(0);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 2) {
petCard.setImageName("G 0 2 Plant Wall");
petCard.setBaseAttack(0);
petCard.setBaseDefense(2);
} else if (this.getLevel() == 3) {
petCard.setImageName("G 0 3 Plant Wall");
petCard.setBaseAttack(0);
petCard.setBaseDefense(3);
} else if (this.getLevel() == 4) {
petCard.setImageName("G 1 3 Plant Wall");
petCard.setBaseAttack(1);
petCard.setBaseDefense(3);
// petCard.addIntrinsicKeyword("First Strike");
} else if (this.getLevel() == 5) {
petCard.setImageName("G 1 3 Plant Wall Deathtouch");
petCard.setBaseAttack(1);
petCard.setBaseDefense(3);
petCard.addIntrinsicKeyword("Deathtouch");
} else if (this.getLevel() == 6) {
petCard.setImageName("G 1 4 Plant Wall");
petCard.setBaseAttack(1);
petCard.setBaseDefense(4);
petCard.addIntrinsicKeyword("Deathtouch");
// A:AB$ GainLife | Cost$ T | LifeAmount$ 1 | SpellDescription$ You gain 1 life.
final Cost abCost = new Cost("T", petCard.getName(), true);
final SpellAbility ability = new AbilityActivated(petCard, abCost, null) {
private static final long serialVersionUID = 7546242087593613719L;
@Override
public boolean canPlayAI() {
return Singletons.getModel().getGameState().getPhaseHandler().getPhase().equals(Constant.Phase.MAIN2);
}
@Override
public void resolve() {
petCard.getController().gainLife(1, petCard);
}
};
petCard.addSpellAbility(ability);
ability.setDescription("tap: You gain 1 life.");
final StringBuilder sb = new StringBuilder();
sb.append("Plant Wall - ").append(petCard.getController()).append(" gains 1 life.");
ability.setStackDescription(sb.toString());
petCard.setText("tap: You gain 1 life.");
}
return petCard;
}
/**
* <p>
* Constructor for QuestPetPlant.
* </p>
*/
public QuestPetPlant() {
super("Plant", "Start each of your battles with this lush, verdant plant on your side."
+ "\nExcellent at blocking the nastiest of critters!", 6);
}
/** {@inheritDoc} */
@Override
public final int[] getAllUpgradePrices() {
return new int[] { 100, 150, 200, 300, 750, 1000 };
}
/** {@inheritDoc} */
@Override
public final String[] getAllUpgradeDescriptions() {
return new String[] { "Purchase Plant", "Improve the defense power of your plant.",
"Improve the defense power of your plant.", "Improve the defense power of your plant.",
"Grow venomous thorns on your plant.",
"Improve the defense power of your plant and your plant will have healing properties",
"You cannot train your plant any further" };
}
/** {@inheritDoc} */
@Override
public final String[] getAllStats() {
return new String[] { "You do not own a plant", "0/1, G, Defender", "0/2, G, Defender", "0/3, G, Defender",
"1/3, G, Defender", "1/3, G, Defender, Deathtouch", "1/4, G, Defender, Deathtouch, T: Gain 1 life" };
}
/** {@inheritDoc} */
@Override
public final ImageIcon[] getAllIcons() {
final String address = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
return new ImageIcon[] {
new ImageIcon(address + "g_0_1_plant_wall.jpg"),
new ImageIcon(address + "g_0_2_plant_wall.jpg"),
new ImageIcon(address + "g_0_3_plant_wall.jpg"),
new ImageIcon(address + "g_1_3_plant_wall.jpg"),
new ImageIcon(address + "g_1_3_plant_wall_deathtouch.jpg"),
new ImageIcon(address + "g_1_4_plant_wall.jpg") };
}
/** {@inheritDoc} */
// @Override
// public final String getStallName() {
// return QuestStallManager.NURSERY;
// }
/** {@inheritDoc} */
@Override
public final void onPurchase(QuestAssets qA) {
qA.getPetManager().addPlantLevel();
}
/** {@inheritDoc} */
@Override
public final boolean isAvailableForPurchase(QuestAssets qA) {
final QuestPetPlant plant = (QuestPetPlant) qA.getPetManager().getPlant();
return (plant == null) || (plant.getLevel() < plant.getMaxLevel());
}
}

View File

@@ -1,116 +0,0 @@
/*
* Forge: Play Magic: the Gathering.
* Copyright (C) 2011 Forge Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.quest.data.pet;
import java.io.File;
import javax.swing.ImageIcon;
import forge.AllZone;
import forge.Card;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
/**
* <p>
* QuestPetWolf class.
* </p>
*
* @author Forge
* @version $Id$
*/
public class QuestPetWolf extends QuestPetAbstract {
/** {@inheritDoc} */
@Override
public final Card getPetCard() {
final Card petCard = new Card();
petCard.setName("Wolf Pet");
petCard.addController(AllZone.getHumanPlayer());
petCard.setOwner(AllZone.getHumanPlayer());
petCard.addColor("G");
petCard.setToken(true);
petCard.addType("Creature");
petCard.addType("Wolf");
petCard.addType("Pet");
if (this.getLevel() == 1) {
petCard.setImageName("G 1 1 Wolf Pet");
petCard.setBaseAttack(1);
petCard.setBaseDefense(1);
} else if (this.getLevel() == 2) {
petCard.setImageName("G 1 2 Wolf Pet");
petCard.setBaseAttack(1);
petCard.setBaseDefense(2);
} else if (this.getLevel() == 3) {
petCard.setImageName("G 2 2 Wolf Pet");
petCard.setBaseAttack(2);
petCard.setBaseDefense(2);
} else if (this.getLevel() == 4) {
petCard.setImageName("G 2 2 Wolf Pet Flanking");
petCard.setBaseAttack(2);
petCard.setBaseDefense(2);
petCard.addIntrinsicKeyword("Flanking");
}
return petCard;
}
/**
* <p>
* Constructor for QuestPetWolf.
* </p>
*/
public QuestPetWolf() {
super("Wolf", "This ferocious animal may have been raised in captivity, but it has been trained to kill.", 4);
}
/** {@inheritDoc} */
@Override
public final int[] getAllUpgradePrices() {
return new int[] { 250, 250, 500, 550 };
}
/** {@inheritDoc} */
@Override
public final String[] getAllUpgradeDescriptions() {
return new String[] { "Purchase Wolf", "Improve the attack power of your wolf.",
"Improve the defense power of your wolf.", "Give Flanking to your wolf.",
"You cannot train your wolf any further" };
}
/** {@inheritDoc} */
@Override
public final String[] getAllStats() {
return new String[] { "You do not own a wolf", "1/1, G", "1/2, G", "2/2, G", "2/2, G, Flanking" };
}
/** {@inheritDoc} */
@Override
public final ImageIcon[] getAllIcons() {
final String address = ForgeProps.getFile(NewConstants.IMAGE_TOKEN).getAbsolutePath() + File.separator;
return new ImageIcon[] {
new ImageIcon(address + "g_1_1_wolf_pet.jpg"),
new ImageIcon(address + "g_1_2_wolf_pet.jpg"),
new ImageIcon(address + "g_2_2_wolf_pet.jpg"),
new ImageIcon(address + "g_2_2_wolf_pet_flanking.jpg") };
}
}

View File

@@ -1,3 +0,0 @@
/** Forge Card Game. */
package forge.quest.data.pet;

View File

@@ -34,6 +34,7 @@ import java.util.zip.GZIPOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Attr;
@@ -42,6 +43,7 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.Converter;
@@ -66,11 +68,11 @@ import forge.item.TournamentPack;
import forge.properties.ForgeProps;
import forge.properties.NewConstants;
import forge.quest.QuestController;
import forge.quest.bazaar.QuestItemType;
import forge.quest.data.QuestAchievements;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestData;
import forge.quest.data.item.QuestItemType;
import forge.quest.data.pet.QuestPetManager;
import forge.quest.data.QuestItemCondition;
import forge.util.IgnoringXStream;
import forge.util.XmlUtil;
@@ -131,7 +133,11 @@ public class QuestDataIO {
data = (QuestData) QuestDataIO.getSerializer(true).fromXML(xml.toString());
if (data.getVersionNumber() != QuestData.CURRENT_VERSION_NUMBER) {
QuestDataIO.updateSaveFile(data, xml.toString());
try {
QuestDataIO.updateSaveFile(data, xml.toString());
} catch (final Exception e) {
forge.error.ErrorViewer.showError(e);
}
}
return data;
@@ -158,150 +164,148 @@ public class QuestDataIO {
* a {@link forge.quest.data.QuestData} object.
* @param input
* a {@link java.lang.String} object.
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
private static void updateSaveFile(final QuestData newData, final String input) {
try {
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final InputSource is = new InputSource();
is.setCharacterStream(new StringReader(input));
final Document document = builder.parse(is);
private static void updateSaveFile(final QuestData newData, final String input) throws ParserConfigurationException, SAXException, IOException, IllegalAccessException, NoSuchFieldException {
final int saveVersion = newData.getVersionNumber();
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final InputSource is = new InputSource();
is.setCharacterStream(new StringReader(input));
final Document document = builder.parse(is);
if (saveVersion < 3) {
QuestDataIO.setFinalField(QuestData.class, "assets", newData, new QuestAssets());
final int saveVersion = newData.getVersionNumber();
final int diffIdx = Integer.parseInt(document.getElementsByTagName("diffIndex").item(0)
.getTextContent());
QuestDataIO.setFinalField(QuestData.class, "achievements", newData, new QuestAchievements(diffIdx));
if (saveVersion < 3) {
QuestDataIO.setFinalField(QuestData.class, "assets", newData, new QuestAssets());
final int diffIdx = Integer.parseInt(document.getElementsByTagName("diffIndex").item(0).getTextContent());
QuestDataIO.setFinalField(QuestData.class, "achievements", newData, new QuestAchievements(diffIdx));
}
if (saveVersion < 4) {
QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(), new EnumMap<QuestItemType, Integer>(QuestItemType.class));
}
if (saveVersion < 5) {
QuestDataIO.setFinalField(QuestAssets.class, "combatPets", newData.getAssets(), new HashMap<String, QuestItemCondition>() );
}
final QuestAssets qS = newData.getAssets();
switch (saveVersion) {
// There should be a fall-through b/w the cases so that each
// version's changes get applied progressively
case 0:
// First beta release with new file format,
// inventory needs to be migrated
QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(), new EnumMap<QuestItemType, Integer>(QuestItemType.class));
qS.setItemLevel(QuestItemType.ESTATES, Integer.parseInt(document.getElementsByTagName("estatesLevel").item(0).getTextContent()));
qS.setItemLevel(QuestItemType.LUCKY_COIN, Integer.parseInt(document.getElementsByTagName("luckyCoinLevel").item(0).getTextContent()));
qS.setItemLevel(QuestItemType.SLEIGHT, Integer.parseInt(document.getElementsByTagName("sleightOfHandLevel").item(0).getTextContent()));
final int gearLevel = Integer.parseInt(document.getElementsByTagName("gearLevel").item(0).getTextContent());
if (gearLevel >= 1) {
newData.getAssets().setItemLevel(QuestItemType.MAP, 1);
}
if (gearLevel == 2) {
newData.getAssets().setItemLevel(QuestItemType.ZEPPELIN, 1);
}
// fall-through
case 1:
// nothing to do here, everything is managed by CardPoolToXml
// deserializer
case 2:
// questdata was divided into assets and achievements
if (StringUtils.isBlank(newData.getName())) {
QuestDataIO.setFinalField(QuestData.class, "name", newData, "questData");
}
if (saveVersion < 4) {
QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(),
new EnumMap<QuestItemType, Integer>(QuestItemType.class));
final QuestAchievements qA = newData.getAchievements();
QuestDataIO.setFinalField(QuestAchievements.class, "win", qA, Integer.parseInt(document.getElementsByTagName("win").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "lost", qA, Integer.parseInt(document.getElementsByTagName("lost").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "winstreakBest", qA, Integer.parseInt(document.getElementsByTagName("winstreakBest").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "winstreakCurrent", qA, Integer.parseInt(document.getElementsByTagName("winstreakCurrent").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "challengesPlayed", qA, Integer.parseInt(document.getElementsByTagName("challengesPlayed").item(0).getTextContent()));
final ArrayList<Integer> completedChallenges = new ArrayList<Integer>();
QuestDataIO.setFinalField(QuestAchievements.class, "completedChallenges", qA, completedChallenges);
final NodeList ccs = document.getElementsByTagName("completedChallenges").item(0).getChildNodes();
for (int iN = 0; iN < ccs.getLength(); iN++) {
final Node n = ccs.item(iN);
if (n.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
completedChallenges.add(Integer.parseInt(n.getTextContent()));
}
final QuestAssets qS = newData.getAssets();
final XStream xs = QuestDataIO.getSerializer(true);
switch (saveVersion) {
// There should be a fall-through b/w the cases so that each
// version's changes get applied progressively
case 0:
// First beta release with new file format,
// inventory needs to be migrated
QuestDataIO.setFinalField(QuestAssets.class, "inventoryItems", newData.getAssets(),
new EnumMap<QuestItemType, Integer>(QuestItemType.class));
NodeList elements = document.getElementsByTagName("estatesLevel");
qS.setItemLevel(QuestItemType.ESTATES, Integer.parseInt(elements.item(0).getTextContent()));
elements = document.getElementsByTagName("luckyCoinLevel");
qS.setItemLevel(QuestItemType.LUCKY_COIN, Integer.parseInt(elements.item(0).getTextContent()));
elements = document.getElementsByTagName("sleightOfHandLevel");
qS.setItemLevel(QuestItemType.SLEIGHT, Integer.parseInt(elements.item(0).getTextContent()));
elements = document.getElementsByTagName("gearLevel");
QuestDataIO.setFinalField(QuestAssets.class, "credits", qS, Integer.parseInt(document.getElementsByTagName("credits").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAssets.class, "cardPool", qS, QuestDataIO.readAsset(xs, document, "cardPool", ItemPool.class));
QuestDataIO.setFinalField(QuestAssets.class, "myDecks", qS, QuestDataIO.readAsset(xs, document, "myDecks", HashMap.class));
QuestDataIO.setFinalField(QuestAssets.class, "shopList", qS, QuestDataIO.readAsset(xs, document, "shopList", ItemPool.class));
QuestDataIO.setFinalField(QuestAssets.class, "newCardList", qS, QuestDataIO.readAsset(xs, document, "newCardList", ItemPool.class));
final int gearLevel = Integer.parseInt(elements.item(0).getTextContent());
if (gearLevel >= 1) {
newData.getAssets().setItemLevel(QuestItemType.MAP, 1);
}
if (gearLevel == 2) {
newData.getAssets().setItemLevel(QuestItemType.ZEPPELIN, 1);
}
// fall-through
case 1:
// nothing to do here, everything is managed by CardPoolToXml
// deserializer
case 2:
// questdata was divided into assets and achievements
if (StringUtils.isBlank(newData.getName())) {
QuestDataIO.setFinalField(QuestData.class, "name", newData, "questData");
}
final QuestAchievements qA = newData.getAchievements();
QuestDataIO.setFinalField(QuestAchievements.class, "win", qA,
Integer.parseInt(document.getElementsByTagName("win").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "lost", qA,
Integer.parseInt(document.getElementsByTagName("lost").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "winstreakBest", qA,
Integer.parseInt(document.getElementsByTagName("winstreakBest").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "winstreakCurrent", qA,
Integer.parseInt(document.getElementsByTagName("winstreakCurrent").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAchievements.class, "challengesPlayed", qA,
Integer.parseInt(document.getElementsByTagName("challengesPlayed").item(0).getTextContent()));
final ArrayList<Integer> completedChallenges = new ArrayList<Integer>();
QuestDataIO.setFinalField(QuestAchievements.class, "completedChallenges", qA, completedChallenges);
final NodeList ccs = document.getElementsByTagName("completedChallenges").item(0).getChildNodes();
for (int iN = 0; iN < ccs.getLength(); iN++) {
final Node n = ccs.item(iN);
if (n.getNodeType() != Node.ELEMENT_NODE) {
case 3:
// QuestInventory class no longer exists - KV pairs of
// QuestItemPair => level moved to assets
final Node oldInventory = saveVersion > 0 ? document.getElementsByTagName("inventory").item(1) : null;
if ( null != oldInventory) {
for (int iN = 0; iN < oldInventory.getChildNodes().getLength(); iN++) {
final Node _n = oldInventory.getChildNodes().item(iN);
if (_n.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
completedChallenges.add(Integer.parseInt(n.getTextContent()));
}
final XStream xs = QuestDataIO.getSerializer(true);
QuestDataIO.setFinalField(QuestAssets.class, "credits", qS,
Integer.parseInt(document.getElementsByTagName("credits").item(0).getTextContent()));
QuestDataIO.setFinalField(QuestAssets.class, "cardPool", qS,
QuestDataIO.readAsset(xs, document, "cardPool", ItemPool.class));
QuestDataIO.setFinalField(QuestAssets.class, "myDecks", qS,
QuestDataIO.readAsset(xs, document, "myDecks", HashMap.class));
QuestDataIO.setFinalField(QuestAssets.class, "petManager", qS,
QuestDataIO.readAsset(xs, document, "petManager", QuestPetManager.class));
QuestDataIO.setFinalField(QuestAssets.class, "shopList", qS,
QuestDataIO.readAsset(xs, document, "shopList", ItemPool.class));
QuestDataIO.setFinalField(QuestAssets.class, "newCardList", qS,
QuestDataIO.readAsset(xs, document, "newCardList", ItemPool.class));
case 3:
// QuestInventory class no longer exists - KV pairs of
// QuestItemPair => level moved to assets
if (saveVersion > 0) {
final Node oldInventory = document.getElementsByTagName("inventory").item(1);
if (null != oldInventory) {
for (int iN = 0; iN < oldInventory.getChildNodes().getLength(); iN++) {
final Node _n = oldInventory.getChildNodes().item(iN);
if (_n.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
final Element n = (Element) _n;
final String name = n.getElementsByTagName("string").item(0).getTextContent();
final QuestItemType qType = QuestItemType.valueFromSaveKey(name);
int level = 0;
for (int iX = 0; iX < n.getChildNodes().getLength(); iX++) {
final Node _x = n.getChildNodes().item(iX);
if (_x.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
final Element x = (Element) _x;
if (!x.getTagName().startsWith("forge.quest.data.")) {
continue;
}
final String sLevel = x.getElementsByTagName("level").item(0).getTextContent();
if (StringUtils.isNotBlank(sLevel)) {
level = Integer.parseInt(sLevel);
}
}
qS.setItemLevel(qType, level);
final Element n = (Element) _n;
final String name = n.getElementsByTagName("string").item(0).getTextContent();
final QuestItemType qType = QuestItemType.valueFromSaveKey(name);
int level = 0;
for (int iX = 0; iX < n.getChildNodes().getLength(); iX++) {
final Node _x = n.getChildNodes().item(iX);
if (_x.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
final Element x = (Element) _x;
if (!x.getTagName().startsWith("forge.quest.data.")) {
continue;
}
final String sLevel = x.getElementsByTagName("level").item(0).getTextContent();
if (StringUtils.isNotBlank(sLevel)) {
level = Integer.parseInt(sLevel);
}
}
qS.setItemLevel(qType, level);
}
case 4:
// pet manager will be re-engineered here
default:
break;
}
// mark the QD as the latest version
newData.setVersionNumber(QuestData.CURRENT_VERSION_NUMBER);
case 4:
if (saveVersion > 0 ) {
NodeList pets = document.getElementsByTagName("pets").item(0).getChildNodes();
for (int i = 0; i < pets.getLength(); i++) {
if ( pets.item(i).getNodeType() != Node.ELEMENT_NODE ) continue;
final Element entry = (Element) pets.item(i);
String name = entry.getElementsByTagName("string").item(0).getTextContent();
String sLevel = entry.getElementsByTagName("level").item(0).getTextContent();
qS.setPetLevel(name, Integer.parseInt(sLevel));
}
} catch (final Exception e) {
forge.error.ErrorViewer.showError(e);
}
// pet manager will be re-engineered here
default:
break;
}
// mark the QD as the latest version
newData.setVersionNumber(QuestData.CURRENT_VERSION_NUMBER);
}
@SuppressWarnings("unchecked")

View File

@@ -18,7 +18,7 @@
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
package forge.util;
/**
* The Interface Lambda.

View File

@@ -18,7 +18,8 @@
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
package forge.util;
/**
* The Class Lambda1.

View File

@@ -18,7 +18,8 @@
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
package forge.util;
/**
* The Class Lambda1.

View File

@@ -22,7 +22,6 @@ import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import net.slightlymagic.braids.util.lambda.Lambda1;
/**
* Predicate class allows to select items or type <U>, which are or contain an

View File

@@ -23,7 +23,6 @@ import java.util.TreeMap;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.lambda.Lambda1;
import org.apache.commons.lang3.StringUtils;

View File

@@ -28,7 +28,6 @@ import java.util.TreeMap;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.lambda.Lambda1;
import org.apache.commons.lang3.StringUtils;

View File

@@ -10,7 +10,7 @@ import forge.control.ControlBazaarUI;
import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FSkin;
import forge.quest.QuestStallManager;
import forge.quest.bazaar.QuestBazaarManager;
import forge.view.bazaar.ViewStall;
@@ -22,12 +22,12 @@ public class ViewBazaarUI extends FPanel {
private final ViewStall pnlSingleStall;
private final ControlBazaarUI control;
private FLabel previousSelected;
private final QuestStallManager bazaar;
private final QuestBazaarManager bazaar;
/** Lays out containers and borders for resizeable layout and
* instantiates top-level controller for bazaar UI.
* @param bazaar0 */
public ViewBazaarUI(QuestStallManager bazaar0) {
public ViewBazaarUI(QuestBazaarManager bazaar0) {
super();
// Final inits

View File

@@ -12,15 +12,15 @@ import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FTextArea;
import forge.quest.bazaar.IQuestBazaarItem;
import forge.quest.data.QuestAssets;
import forge.quest.data.item.IQuestStallPurchasable;
/** An update-able panel instance representing a single item. */
@SuppressWarnings("serial")
public class ViewItem extends FPanel {
private final FLabel lblIcon, lblName, lblPrice, btnPurchase;
private final FTextArea tarDesc;
private IQuestStallPurchasable item;
private IQuestBazaarItem item;
/** An update-able panel instance representing a single item. */
public ViewItem() {
@@ -48,7 +48,7 @@ public class ViewItem extends FPanel {
public void execute() {
final QuestAssets qA = AllZone.getQuest().getAssets();
final int cost = ViewItem.this.getItem().getBuyingPrice(qA);
if ((qA.getCredits() - cost) >= 0) {
if ( cost >= 0 && (qA.getCredits() - cost) >= 0) {
qA.subtractCredits(cost);
qA.addCredits(ViewItem.this.getItem().getSellingPrice(qA));
ViewItem.this.getItem().onPurchase(qA);
@@ -61,14 +61,14 @@ public class ViewItem extends FPanel {
/**
* @param i0
* &emsp; {@link forge.quest.data.item.IQuestStallPurchasable}
* &emsp; {@link forge.quest.bazaar.IQuestBazaarItem}
*/
public void setItem(final IQuestStallPurchasable i0) {
public void setItem(final IQuestBazaarItem i0) {
this.item = i0;
}
/** @return {@link forge.quest.data.item.IQuestStallPurchasable} */
public IQuestStallPurchasable getItem() {
/** @return {@link forge.quest.bazaar.IQuestBazaarItem} */
public IQuestBazaarItem getItem() {
return this.item;
}
@@ -78,13 +78,15 @@ public class ViewItem extends FPanel {
@Override
public void run() {
final QuestAssets qA = AllZone.getQuest().getAssets();
ViewItem.this.lblIcon.setIcon(ViewItem.this.getItem().getIcon());
ViewItem.this.lblName.setText(ViewItem.this.getItem().getPurchaseName());
ViewItem.this.lblPrice.setText("Cost: " + String.valueOf(ViewItem.this.getItem().getBuyingPrice(qA))
+ " credits");
ViewItem.this.tarDesc.setText(ViewItem.this.getItem().getPurchaseDescription(qA));
IQuestBazaarItem bazaarItem = ViewItem.this.getItem();
if (qA.getCredits() < ViewItem.this.getItem().getBuyingPrice(qA)) {
ViewItem.this.lblIcon.setIcon(bazaarItem.getIcon(qA));
ViewItem.this.lblName.setText(bazaarItem.getPurchaseName());
ViewItem.this.lblPrice.setText("Cost: " + String.valueOf(bazaarItem.getBuyingPrice(qA)) + " credits");
String desc = bazaarItem.getPurchaseDescription(qA);
ViewItem.this.tarDesc.setText(desc);
if (qA.getCredits() < bazaarItem.getBuyingPrice(qA)) {
ViewItem.this.btnPurchase.setEnabled(false);
}

View File

@@ -36,9 +36,9 @@ import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FScrollPane;
import forge.gui.toolbox.FSkin;
import forge.quest.QuestController;
import forge.quest.bazaar.IQuestBazaarItem;
import forge.quest.bazaar.QuestStallDefinition;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestStallDefinition;
import forge.quest.data.item.IQuestStallPurchasable;
import forge.view.ViewBazaarUI;
/**
@@ -137,7 +137,7 @@ public class ViewStall extends JPanel {
/**
* @param q0
* &emsp; {@link forge.quest.data.QuestStallDefinition}
* &emsp; {@link forge.quest.bazaar.QuestStallDefinition}
*/
public void setStall(final QuestStallDefinition q0) {
this.stall = q0;
@@ -156,7 +156,7 @@ public class ViewStall extends JPanel {
final QuestAssets qS = qData.getAssets();
this.lblStats.setText("Credits: " + qS.getCredits() + " Life: " + qS.getLife(qData.getMode()));
final List<IQuestStallPurchasable> items = AllZone.getQuest().getBazaar().getItems(this.stall.getName());
final List<IQuestBazaarItem> items = AllZone.getQuest().getBazaar().getItems(this.stall.getName());
this.lblStallName.setText(this.stall.getDisplayName());
this.tpnFluff.setText(this.stall.getFluff());

View File

@@ -31,14 +31,14 @@ import forge.gui.toolbox.FSkin;
import forge.item.CardPrinted;
import forge.model.FMatchState;
import forge.properties.ForgePreferences.FPref;
import forge.quest.QuestChallenge;
import forge.quest.QuestEventChallenge;
import forge.quest.QuestController;
import forge.quest.QuestEvent;
import forge.quest.QuestMode;
import forge.quest.QuestUtil;
import forge.quest.bazaar.QuestItemType;
import forge.quest.data.QuestAssets;
import forge.quest.data.QuestMode;
import forge.quest.data.QuestPreferences.QPref;
import forge.quest.data.item.QuestItemType;
import forge.util.MyRandom;
import net.slightlymagic.braids.util.UtilFunctions;
@@ -48,8 +48,6 @@ import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import static forge.quest.QuestEvent.QuestEventType.CHALLENGE;
/**
* <p>
* QuestWinLoseHandler.
@@ -108,19 +106,19 @@ public class QuestWinLoseHandler extends ControlWinLose {
if (qData.getMode() == QuestMode.Fantasy) {
int extraLife = 0;
if (qEvent.getEventType() == CHALLENGE) {
if (qEvent instanceof QuestEventChallenge ) {
if (qa.hasItem(QuestItemType.ZEPPELIN)) {
extraLife = 3;
}
}
final CardList humanList = QuestUtil.getHumanStartingCards(qa, qEvent);
final CardList humanList = QuestUtil.getHumanStartingCards(qData, qEvent);
final CardList computerList = QuestUtil.getComputerStartingCards(qEvent);
final int humanLife = qa.getLife(qData.getMode()) + extraLife;
int computerLife = 20;
if (qEvent.getEventType() == CHALLENGE) {
computerLife = ((QuestChallenge) qEvent).getAILife();
if (qEvent instanceof QuestEventChallenge) {
computerLife = ((QuestEventChallenge) qEvent).getAILife();
}
GameNew.newGame(Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0],
@@ -182,7 +180,7 @@ public class QuestWinLoseHandler extends ControlWinLose {
this.awardEventCredits();
// Challenge reward credits
if (qEvent.getEventType() == CHALLENGE) {
if (qEvent instanceof QuestEventChallenge) {
this.awardChallengeWin();
}
@@ -277,8 +275,8 @@ public class QuestWinLoseHandler extends ControlWinLose {
qData.getCards().clearShopList();
if (qEvent.getEventType() == CHALLENGE && !((QuestChallenge) qEvent).isRepeatable()) {
qData.getAchievements().addCompletedChallenge(((QuestChallenge) qEvent).getId());
if (qEvent instanceof QuestEventChallenge && !((QuestEventChallenge) qEvent).isRepeatable()) {
qData.getAchievements().addCompletedChallenge(((QuestEventChallenge) qEvent).getId());
}
if (qData.getAvailableChallenges() != null) {
@@ -560,8 +558,8 @@ public class QuestWinLoseHandler extends ControlWinLose {
// used for "wins before next challenge"
qData.getAchievements().addChallengesPlayed();
final List<CardPrinted> cardsWon = ((QuestChallenge) qEvent).getCardRewardList();
final long questRewardCredits = ((QuestChallenge) qEvent).getCreditsReward();
final List<CardPrinted> cardsWon = ((QuestEventChallenge) qEvent).getCardRewardList();
final long questRewardCredits = ((QuestEventChallenge) qEvent).getCreditsReward();
final StringBuilder sb = new StringBuilder();
sb.append("<html>Challenge completed.<br><br>");
@@ -571,7 +569,7 @@ public class QuestWinLoseHandler extends ControlWinLose {
// Generate Swing components and attach.
this.icoTemp = GuiUtils.getResizedIcon(FSkin.getIcon(FSkin.QuestIcons.ICO_BOX), 0.5);
this.lblTemp1 = new TitleLabel("Challenge Rewards for \"" + ((QuestChallenge) qEvent).getTitle()
this.lblTemp1 = new TitleLabel("Challenge Rewards for \"" + ((QuestEventChallenge) qEvent).getTitle()
+ "\"");
this.lblTemp2 = new JLabel(sb.toString());

View File

@@ -23,12 +23,13 @@ package net.slightlymagic.braids.util.generator;
import java.util.ArrayList;
import java.util.NoSuchElementException;
import net.slightlymagic.braids.util.lambda.Lambda1;
import com.google.code.jyield.Generator;
import com.google.code.jyield.YieldUtils;
import com.google.code.jyield.Yieldable;
import forge.util.Lambda1;
/**
* For documentation on Java-Yield and its generators, see.
*

View File

@@ -1,65 +0,0 @@
/*
* The files in the directory "net/slightlymagic/braids" and in all subdirectories of it (the "Files") are
* Copyright 2011 Braids Cabal-Conjurer. They are available under either Forge's
* main license (the GNU Public License; see LICENSE.txt in Forge's top directory)
* or under the Apache License, as explained below.
*
* The Files are additionally licensed under the Apache License, Version 2.0 (the
* "Apache License"); you may not use the files in this directory except in
* compliance with one of its two licenses. You may obtain a copy of the Apache
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Apache License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Apache License for the specific language governing permissions and
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
/**
* The Class Lambda2.
*
* @param <R>
* the generic type
* @param <A1>
* the generic type
* @param <A2>
* the generic type
*/
public abstract class Lambda2<R, A1, A2> implements Lambda<R> {
/**
* Apply.
*
* @param arg1
* the arg1
* @param arg2
* the arg2
* @return the r
*/
public abstract R apply(A1 arg1, A2 arg2);
/*
* (non-Javadoc)
*
* @see
* net.slightlymagic.braids.util.lambda.Lambda#apply(java.lang.Object[])
*/
// TODO @Override
/**
* Apply.
*
* @param args Object[]
* @return R
*/
@SuppressWarnings("unchecked")
public final R apply(final Object[] args) {
return apply((A1) args[0], (A2) args[1]);
}
}

View File

@@ -1,69 +0,0 @@
/*
* The files in the directory "net/slightlymagic/braids" and in all subdirectories of it (the "Files") are
* Copyright 2011 Braids Cabal-Conjurer. They are available under either Forge's
* main license (the GNU Public License; see LICENSE.txt in Forge's top directory)
* or under the Apache License, as explained below.
*
* The Files are additionally licensed under the Apache License, Version 2.0 (the
* "Apache License"); you may not use the files in this directory except in
* compliance with one of its two licenses. You may obtain a copy of the Apache
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Apache License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Apache License for the specific language governing permissions and
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
/**
* The Class Lambda3.
*
* @param <R>
* the generic type
* @param <A1>
* the generic type
* @param <A2>
* the generic type
* @param <A3>
* the generic type
*/
public abstract class Lambda3<R, A1, A2, A3> implements Lambda<R> {
/**
* Apply.
*
* @param arg1
* the arg1
* @param arg2
* the arg2
* @param arg3
* the arg3
* @return the r
*/
public abstract R apply(A1 arg1, A2 arg2, A3 arg3);
/*
* (non-Javadoc)
*
* @see
* net.slightlymagic.braids.util.lambda.Lambda#apply(java.lang.Object[])
*/
// TODO @Override
/**
* Apply.
*
* @param args Object[]
* @return R
*/
@SuppressWarnings("unchecked")
public final R apply(final Object[] args) {
return apply((A1) args[0], (A2) args[1], (A3) args[2]);
}
}

View File

@@ -1,37 +0,0 @@
/*
* The files in the directory "net/slightlymagic/braids" and in all subdirectories of it (the "Files") are
* Copyright 2011 Braids Cabal-Conjurer. They are available under either Forge's
* main license (the GNU Public License; see LICENSE.txt in Forge's top directory)
* or under the Apache License, as explained below.
*
* The Files are additionally licensed under the Apache License, Version 2.0 (the
* "Apache License"); you may not use the files in this directory except in
* compliance with one of its two licenses. You may obtain a copy of the Apache
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Apache License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Apache License for the specific language governing permissions and
* limitations under the Apache License.
*
*/
package net.slightlymagic.braids.util.lambda;
/**
* The Interface Thunk.
*
* @param <T>
* the generic type
*/
public interface Thunk<T> {
/**
* Apply.
*
* @return the t
*/
T apply();
}

View File

@@ -1,2 +0,0 @@
/** Forge Card Game. */
package net.slightlymagic.braids.util.lambda;