diff --git a/.gitattributes b/.gitattributes index 4a319d89936..f17d93ce7e6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/src/main/java/forge/CardFilter.java b/src/main/java/forge/CardFilter.java index 58fa0a29e5e..17a559f0a2e 100644 --- a/src/main/java/forge/CardFilter.java +++ b/src/main/java/forge/CardFilter.java @@ -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; /** *

diff --git a/src/main/java/forge/NameChanger.java b/src/main/java/forge/NameChanger.java index f6e3e129bd2..a925c05eab3 100644 --- a/src/main/java/forge/NameChanger.java +++ b/src/main/java/forge/NameChanger.java @@ -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; /** *

diff --git a/src/main/java/forge/card/BoosterData.java b/src/main/java/forge/card/BoosterData.java index 65a68fd3970..2bc781ae332 100644 --- a/src/main/java/forge/card/BoosterData.java +++ b/src/main/java/forge/card/BoosterData.java @@ -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. diff --git a/src/main/java/forge/card/BoosterGenerator.java b/src/main/java/forge/card/BoosterGenerator.java index 5441f5e1d51..c537310354f 100644 --- a/src/main/java/forge/card/BoosterGenerator.java +++ b/src/main/java/forge/card/BoosterGenerator.java @@ -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; diff --git a/src/main/java/forge/card/CardBlock.java b/src/main/java/forge/card/CardBlock.java index 3c7ef258719..df877393612 100644 --- a/src/main/java/forge/card/CardBlock.java +++ b/src/main/java/forge/card/CardBlock.java @@ -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; diff --git a/src/main/java/forge/card/CardEdition.java b/src/main/java/forge/card/CardEdition.java index 39eb027d4b9..e4fcdebc77b 100644 --- a/src/main/java/forge/card/CardEdition.java +++ b/src/main/java/forge/card/CardEdition.java @@ -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; diff --git a/src/main/java/forge/card/FatPackData.java b/src/main/java/forge/card/FatPackData.java index 9830a74c111..6d1380edb2d 100644 --- a/src/main/java/forge/card/FatPackData.java +++ b/src/main/java/forge/card/FatPackData.java @@ -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; /** diff --git a/src/main/java/forge/card/UnOpenedProduct.java b/src/main/java/forge/card/UnOpenedProduct.java index c06b9713ced..15370099ea4 100644 --- a/src/main/java/forge/card/UnOpenedProduct.java +++ b/src/main/java/forge/card/UnOpenedProduct.java @@ -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. diff --git a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java index 8f213f93443..013ac4eb449 100644 --- a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java +++ b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java @@ -450,20 +450,9 @@ public abstract class AbstractCardFactory implements CardFactoryInterface { return result; } - /** - *

- * getCard2. - *

- * - * @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); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryInterface.java b/src/main/java/forge/card/cardfactory/CardFactoryInterface.java index 83970e0e6c7..567d366444b 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryInterface.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryInterface.java @@ -113,6 +113,7 @@ public interface CardFactoryInterface extends Iterable { * 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. diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 87bde462207..64c9e735733 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -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(); diff --git a/src/main/java/forge/control/ControlBazaarUI.java b/src/main/java/forge/control/ControlBazaarUI.java index eca1600456c..eda0db6840b 100644 --- a/src/main/java/forge/control/ControlBazaarUI.java +++ b/src/main/java/forge/control/ControlBazaarUI.java @@ -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   {@link forge.view.ViewBazaarUI} * @param bazaar */ - public ControlBazaarUI(ViewBazaarUI v0, QuestStallManager bazaar0) { + public ControlBazaarUI(ViewBazaarUI v0, QuestBazaarManager bazaar0) { view = v0; model = bazaar0; diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java index 39a76c7de1c..6d6fc2ecc5d 100644 --- a/src/main/java/forge/control/input/InputMulligan.java +++ b/src/main/java/forge/control/input/InputMulligan.java @@ -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; /** *

* InputMulligan class. diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index ed1d108b4e0..bc9756d1a2f 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -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; /** *

diff --git a/src/main/java/forge/deck/DeckGroup.java b/src/main/java/forge/deck/DeckGroup.java index 0bf2f5ff621..9386149ed34 100644 --- a/src/main/java/forge/deck/DeckGroup.java +++ b/src/main/java/forge/deck/DeckGroup.java @@ -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. diff --git a/src/main/java/forge/game/GameFormat.java b/src/main/java/forge/game/GameFormat.java index f9add3029af..aa91b9cd994 100644 --- a/src/main/java/forge/game/GameFormat.java +++ b/src/main/java/forge/game/GameFormat.java @@ -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; /** diff --git a/src/main/java/forge/game/limited/BoosterDraft.java b/src/main/java/forge/game/limited/BoosterDraft.java index 0969352fc93..5ea83ce1aea 100644 --- a/src/main/java/forge/game/limited/BoosterDraft.java +++ b/src/main/java/forge/game/limited/BoosterDraft.java @@ -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; /** * diff --git a/src/main/java/forge/game/limited/SealedDeck.java b/src/main/java/forge/game/limited/SealedDeck.java index e8921558b6a..1d0c638718d 100644 --- a/src/main/java/forge/game/limited/SealedDeck.java +++ b/src/main/java/forge/game/limited/SealedDeck.java @@ -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; /** diff --git a/src/main/java/forge/gui/deckeditor/DeckController.java b/src/main/java/forge/gui/deckeditor/DeckController.java index 721f0bbff74..1ca39dccb7d 100644 --- a/src/main/java/forge/gui/deckeditor/DeckController.java +++ b/src/main/java/forge/gui/deckeditor/DeckController.java @@ -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. diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorConstructed.java b/src/main/java/forge/gui/deckeditor/DeckEditorConstructed.java index 16381be3023..6b22dc13894 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorConstructed.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorConstructed.java @@ -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; /** diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java b/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java index 613725fe7e0..dbcb3455efa 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java @@ -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; /** diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java index b1bdb20a9eb..cf02f5d40ae 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java @@ -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; diff --git a/src/main/java/forge/gui/deckeditor/PresetColumns.java b/src/main/java/forge/gui/deckeditor/PresetColumns.java index e1af3a01f29..68f4944f389 100644 --- a/src/main/java/forge/gui/deckeditor/PresetColumns.java +++ b/src/main/java/forge/gui/deckeditor/PresetColumns.java @@ -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. diff --git a/src/main/java/forge/gui/deckeditor/QuestCardShop.java b/src/main/java/forge/gui/deckeditor/QuestCardShop.java index 5c41bb8db70..59a98c2f554 100644 --- a/src/main/java/forge/gui/deckeditor/QuestCardShop.java +++ b/src/main/java/forge/gui/deckeditor/QuestCardShop.java @@ -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; /** diff --git a/src/main/java/forge/gui/deckeditor/elements/TableColumnInfo.java b/src/main/java/forge/gui/deckeditor/elements/TableColumnInfo.java index aed38206eed..22aadfd6975 100644 --- a/src/main/java/forge/gui/deckeditor/elements/TableColumnInfo.java +++ b/src/main/java/forge/gui/deckeditor/elements/TableColumnInfo.java @@ -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 diff --git a/src/main/java/forge/gui/deckeditor/elements/TableSorter.java b/src/main/java/forge/gui/deckeditor/elements/TableSorter.java index f4ac07d146b..33534f4a0f6 100644 --- a/src/main/java/forge/gui/deckeditor/elements/TableSorter.java +++ b/src/main/java/forge/gui/deckeditor/elements/TableSorter.java @@ -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; /** *

diff --git a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java index f16e26580ad..146ae8ed1d0 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuChallenges.java @@ -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 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 challenges = AllZone.getQuest().getEventManager().generateChallenges(); + final List 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"); } diff --git a/src/main/java/forge/gui/home/quest/CSubmenuDuels.java b/src/main/java/forge/gui/home/quest/CSubmenuDuels.java index 3fe0739b57f..675998168fb 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuDuels.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuDuels.java @@ -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 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 duels = AllZone.getQuest().getEventManager().generateDuels(); + final List 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"); } diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java index b6b7c388c78..bd74b410d45 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java @@ -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. diff --git a/src/main/java/forge/gui/home/quest/SubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SubmenuQuestUtil.java index 37815ab3112..2892fe291cf 100644 --- a/src/main/java/forge/gui/home/quest/SubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SubmenuQuestUtil.java @@ -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 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 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() + ": " diff --git a/src/main/java/forge/item/BoosterPack.java b/src/main/java/forge/item/BoosterPack.java index f81e4da8f43..18a6ebcd60b 100644 --- a/src/main/java/forge/item/BoosterPack.java +++ b/src/main/java/forge/item/BoosterPack.java @@ -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. diff --git a/src/main/java/forge/item/CardDb.java b/src/main/java/forge/item/CardDb.java index 1897d55dfff..a899a9e719b 100644 --- a/src/main/java/forge/item/CardDb.java +++ b/src/main/java/forge/item/CardDb.java @@ -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; /** diff --git a/src/main/java/forge/item/CardPrinted.java b/src/main/java/forge/item/CardPrinted.java index 3c757905809..5271b133922 100644 --- a/src/main/java/forge/item/CardPrinted.java +++ b/src/main/java/forge/item/CardPrinted.java @@ -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; diff --git a/src/main/java/forge/item/FatPack.java b/src/main/java/forge/item/FatPack.java index 99d425aa92a..c247163a137 100644 --- a/src/main/java/forge/item/FatPack.java +++ b/src/main/java/forge/item/FatPack.java @@ -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. diff --git a/src/main/java/forge/item/ItemPoolView.java b/src/main/java/forge/item/ItemPoolView.java index c78baaf050f..423b57826f8 100644 --- a/src/main/java/forge/item/ItemPoolView.java +++ b/src/main/java/forge/item/ItemPoolView.java @@ -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; /** *

diff --git a/src/main/java/forge/item/PreconDeck.java b/src/main/java/forge/item/PreconDeck.java index 7893c6acdcc..42905283f18 100644 --- a/src/main/java/forge/item/PreconDeck.java +++ b/src/main/java/forge/item/PreconDeck.java @@ -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. diff --git a/src/main/java/forge/item/TournamentPack.java b/src/main/java/forge/item/TournamentPack.java index b91a7260ad3..44c0ed48884 100644 --- a/src/main/java/forge/item/TournamentPack.java +++ b/src/main/java/forge/item/TournamentPack.java @@ -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. diff --git a/src/main/java/forge/properties/NewConstants.java b/src/main/java/forge/properties/NewConstants.java index 0afdc9e2f0e..28f6c9dbc82 100644 --- a/src/main/java/forge/properties/NewConstants.java +++ b/src/main/java/forge/properties/NewConstants.java @@ -58,57 +58,60 @@ public final class NewConstants { /** Constant CARD_PICTURES="card-pictures". */ public static final String CARD_PICTURES = "card-pictures"; /** Constant CARD_PICTURES_A="card-pictures_a". */ - public static final String CARD_PICTURES_A = "card-pictures_a"; - /** Constant CARD_PICTURES_B="card-pictures_b". */ - public static final String CARD_PICTURES_B = "card-pictures_b"; - /** Constant CARD_PICTURES_C="card-pictures_c". */ - public static final String CARD_PICTURES_C = "card-pictures_c"; - /** Constant CARD_PICTURES_D="card-pictures_d". */ - public static final String CARD_PICTURES_D = "card-pictures_d"; - /** Constant CARD_PICTURES_E="card-pictures_e". */ - public static final String CARD_PICTURES_E = "card-pictures_e"; - /** Constant CARD_PICTURES_F="card-pictures_f". */ - public static final String CARD_PICTURES_F = "card-pictures_f"; - /** Constant CARD_PICTURES_G="card-pictures_g". */ - public static final String CARD_PICTURES_G = "card-pictures_g"; - /** Constant CARD_PICTURES_H="card-pictures_h". */ - public static final String CARD_PICTURES_H = "card-pictures_h"; - /** Constant CARD_PICTURES_I="card-pictures_i". */ - public static final String CARD_PICTURES_I = "card-pictures_i"; - /** Constant CARD_PICTURES_J="card-pictures_j". */ - public static final String CARD_PICTURES_J = "card-pictures_j"; - /** Constant CARD_PICTURES_K="card-pictures_k". */ - public static final String CARD_PICTURES_K = "card-pictures_k"; - /** Constant CARD_PICTURES_L="card-pictures_l". */ - public static final String CARD_PICTURES_L = "card-pictures_l"; - /** Constant CARD_PICTURES_M="card-pictures_m". */ - public static final String CARD_PICTURES_M = "card-pictures_m"; - /** Constant CARD_PICTURES_N="card-pictures_n". */ - public static final String CARD_PICTURES_N = "card-pictures_n"; - /** Constant CARD_PICTURES_O="card-pictures_o". */ - public static final String CARD_PICTURES_O = "card-pictures_o"; - /** Constant CARD_PICTURES_P="card-pictures_p". */ - public static final String CARD_PICTURES_P = "card-pictures_p"; - /** Constant CARD_PICTURES_Q="card-pictures_q". */ - public static final String CARD_PICTURES_Q = "card-pictures_q"; - /** Constant CARD_PICTURES_R="card-pictures_r". */ - public static final String CARD_PICTURES_R = "card-pictures_r"; - /** Constant CARD_PICTURES_S="card-pictures_s". */ - public static final String CARD_PICTURES_S = "card-pictures_s"; - /** Constant CARD_PICTURES_T="card-pictures_t". */ - public static final String CARD_PICTURES_T = "card-pictures_t"; - /** Constant CARD_PICTURES_U="card-pictures_u". */ - public static final String CARD_PICTURES_U = "card-pictures_u"; - /** Constant CARD_PICTURES_V="card-pictures_v". */ - public static final String CARD_PICTURES_V = "card-pictures_v"; - /** Constant CARD_PICTURES_W="card-pictures_w". */ - public static final String CARD_PICTURES_W = "card-pictures_w"; - /** Constant CARD_PICTURES_X="card-pictures_x". */ - public static final String CARD_PICTURES_X = "card-pictures_x"; - /** Constant CARD_PICTURES_Y="card-pictures_y". */ - public static final String CARD_PICTURES_Y = "card-pictures_y"; - /** Constant CARD_PICTURES_Z="card-pictures_z". */ - 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 CARD_PICTURES_B="card-pictures_b". */ + public static final String CARD_PICTURES_B = "card-pictures_b"; + /** Constant CARD_PICTURES_C="card-pictures_c". */ + public static final String CARD_PICTURES_C = "card-pictures_c"; + /** Constant CARD_PICTURES_D="card-pictures_d". */ + public static final String CARD_PICTURES_D = "card-pictures_d"; + /** Constant CARD_PICTURES_E="card-pictures_e". */ + public static final String CARD_PICTURES_E = "card-pictures_e"; + /** Constant CARD_PICTURES_F="card-pictures_f". */ + public static final String CARD_PICTURES_F = "card-pictures_f"; + /** Constant CARD_PICTURES_G="card-pictures_g". */ + public static final String CARD_PICTURES_G = "card-pictures_g"; + /** Constant CARD_PICTURES_H="card-pictures_h". */ + public static final String CARD_PICTURES_H = "card-pictures_h"; + /** Constant CARD_PICTURES_I="card-pictures_i". */ + public static final String CARD_PICTURES_I = "card-pictures_i"; + /** Constant CARD_PICTURES_J="card-pictures_j". */ + public static final String CARD_PICTURES_J = "card-pictures_j"; + /** Constant CARD_PICTURES_K="card-pictures_k". */ + public static final String CARD_PICTURES_K = "card-pictures_k"; + /** Constant CARD_PICTURES_L="card-pictures_l". */ + public static final String CARD_PICTURES_L = "card-pictures_l"; + /** Constant CARD_PICTURES_M="card-pictures_m". */ + public static final String CARD_PICTURES_M = "card-pictures_m"; + /** Constant CARD_PICTURES_N="card-pictures_n". */ + public static final String CARD_PICTURES_N = "card-pictures_n"; + /** Constant CARD_PICTURES_O="card-pictures_o". */ + public static final String CARD_PICTURES_O = "card-pictures_o"; + /** Constant CARD_PICTURES_P="card-pictures_p". */ + public static final String CARD_PICTURES_P = "card-pictures_p"; + /** Constant CARD_PICTURES_Q="card-pictures_q". */ + public static final String CARD_PICTURES_Q = "card-pictures_q"; + /** Constant CARD_PICTURES_R="card-pictures_r". */ + public static final String CARD_PICTURES_R = "card-pictures_r"; + /** Constant CARD_PICTURES_S="card-pictures_s". */ + public static final String CARD_PICTURES_S = "card-pictures_s"; + /** Constant CARD_PICTURES_T="card-pictures_t". */ + public static final String CARD_PICTURES_T = "card-pictures_t"; + /** Constant CARD_PICTURES_U="card-pictures_u". */ + public static final String CARD_PICTURES_U = "card-pictures_u"; + /** Constant CARD_PICTURES_V="card-pictures_v". */ + public static final String CARD_PICTURES_V = "card-pictures_v"; + /** Constant CARD_PICTURES_W="card-pictures_w". */ + public static final String CARD_PICTURES_W = "card-pictures_w"; + /** Constant CARD_PICTURES_X="card-pictures_x". */ + public static final String CARD_PICTURES_X = "card-pictures_x"; + /** Constant CARD_PICTURES_Y="card-pictures_y". */ + public static final String CARD_PICTURES_Y = "card-pictures_y"; + /** Constant CARD_PICTURES_Z="card-pictures_z". */ + public static final String CARD_PICTURES_Z = "card-pictures_z"; + } /** Constant CARD_PICTURES_OTHER="card-pictures_other". */ public static final String CARD_PICTURES_OTHER = "card-pictures_other"; /** Constant CARD_PICTURES_TOKEN_HQ="card-pictures_token_hq". */ @@ -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"; } /** diff --git a/src/main/java/forge/quest/BoosterUtils.java b/src/main/java/forge/quest/BoosterUtils.java index 1f9ff705c30..2ba653d0b5f 100644 --- a/src/main/java/forge/quest/BoosterUtils.java +++ b/src/main/java/forge/quest/BoosterUtils.java @@ -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; diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java index 950333a6c61..2c1cc10334a 100644 --- a/src/main/java/forge/quest/QuestController.java +++ b/src/main/java/forge/quest/QuestController.java @@ -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 preconManager = new StorageView(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 selectedPets = new HashMap(); + + 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; } @@ -306,5 +323,13 @@ 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; + } } diff --git a/src/main/java/forge/quest/QuestEvent.java b/src/main/java/forge/quest/QuestEvent.java index ee1eadcb66b..a3e7650eb5d 100644 --- a/src/main/java/forge/quest/QuestEvent.java +++ b/src/main/java/forge/quest/QuestEvent.java @@ -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; - /** *

* getTitle. @@ -99,17 +91,6 @@ public class QuestEvent { return this.eventDeck; } - /** - *

- * getEventDeck. - *

- * - * @return {@link forge.deck.Deck} - */ - public final QuestEventType getEventType() { - return this.eventType; - } - /** *

* 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. * diff --git a/src/main/java/forge/quest/QuestChallenge.java b/src/main/java/forge/quest/QuestEventChallenge.java similarity index 97% rename from src/main/java/forge/quest/QuestChallenge.java rename to src/main/java/forge/quest/QuestEventChallenge.java index e599c19f987..823b584eba0 100644 --- a/src/main/java/forge/quest/QuestChallenge.java +++ b/src/main/java/forge/quest/QuestEventChallenge.java @@ -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); } /** diff --git a/src/main/java/forge/quest/data/QuestDuelDifficulty.java b/src/main/java/forge/quest/QuestEventDifficulty.java similarity index 57% rename from src/main/java/forge/quest/data/QuestDuelDifficulty.java rename to src/main/java/forge/quest/QuestEventDifficulty.java index 10e36153005..9ec007f74ab 100644 --- a/src/main/java/forge/quest/data/QuestDuelDifficulty.java +++ b/src/main/java/forge/quest/QuestEventDifficulty.java @@ -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, diff --git a/src/main/java/forge/quest/QuestDuel.java b/src/main/java/forge/quest/QuestEventDuel.java similarity index 89% rename from src/main/java/forge/quest/QuestDuel.java rename to src/main/java/forge/quest/QuestEventDuel.java index 722c606b601..bcb2f97ba1e 100644 --- a/src/main/java/forge/quest/QuestDuel.java +++ b/src/main/java/forge/quest/QuestEventDuel.java @@ -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); } } diff --git a/src/main/java/forge/quest/QuestEventManager.java b/src/main/java/forge/quest/QuestEventManager.java index 1b0d10f45ea..1594be72727 100644 --- a/src/main/java/forge/quest/QuestEventManager.java +++ b/src/main/java/forge/quest/QuestEventManager.java @@ -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> SortedDuels = new EnumMap>(QuestDuelDifficulty.class); + private final Map> SortedDuels = new EnumMap>(QuestEventDifficulty.class); /** */ - public final List ALL_DUELS = new ArrayList(); + public final List ALL_DUELS = new ArrayList(); /** */ - public final List ALL_CHALLENGES = new ArrayList(); + public final List ALL_CHALLENGES = new ArrayList(); /** 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 generateDuels() { + public final List 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 duelOpponents = new ArrayList(); + final List duelOpponents = new ArrayList(); 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 generateChallenges() { - final List challengeOpponents = new ArrayList(); + public final List generateChallenges() { + final List challengeOpponents = new ArrayList(); final QuestController qCtrl = AllZone.getQuest(); final QuestAchievements qData = qCtrl.getAchievements(); @@ -171,7 +170,7 @@ public class QuestEventManager { final List unlockedChallengeIds = new ArrayList(); final List availableChallengeIds = new ArrayList(); - 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 contents) { - final QuestDuel qd = new QuestDuel(); + private QuestEventDuel readDuel(final List 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 contents) { + private QuestEventChallenge readChallenge(final List 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()); - SortedDuels.put(QuestDuelDifficulty.MEDIUM, new ArrayList()); - SortedDuels.put(QuestDuelDifficulty.HARD, new ArrayList()); - SortedDuels.put(QuestDuelDifficulty.EXPERT, new ArrayList()); + SortedDuels.put(QuestEventDifficulty.EASY, new ArrayList()); + SortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList()); + SortedDuels.put(QuestEventDifficulty.HARD, new ArrayList()); + SortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList()); 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; } diff --git a/src/main/java/forge/quest/data/QuestMode.java b/src/main/java/forge/quest/QuestMode.java similarity index 83% rename from src/main/java/forge/quest/data/QuestMode.java rename to src/main/java/forge/quest/QuestMode.java index fcb80d2126a..c0aa3f67e5e 100644 --- a/src/main/java/forge/quest/data/QuestMode.java +++ b/src/main/java/forge/quest/QuestMode.java @@ -1,4 +1,4 @@ -package forge.quest.data; +package forge.quest; /** * TODO: Write javadoc for this type. diff --git a/src/main/java/forge/quest/data/QuestStartPool.java b/src/main/java/forge/quest/QuestStartPool.java similarity index 76% rename from src/main/java/forge/quest/data/QuestStartPool.java rename to src/main/java/forge/quest/QuestStartPool.java index 69a4e65ccec..cf344f3d1df 100644 --- a/src/main/java/forge/quest/data/QuestStartPool.java +++ b/src/main/java/forge/quest/QuestStartPool.java @@ -1,4 +1,4 @@ -package forge.quest.data; +package forge.quest; public enum QuestStartPool { Complete, diff --git a/src/main/java/forge/quest/QuestUtil.java b/src/main/java/forge/quest/QuestUtil.java index dd3634be3b5..6cde05b2aca 100644 --- a/src/main/java/forge/quest/QuestUtil.java +++ b/src/main/java/forge/quest/QuestUtil.java @@ -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; - /** *

* 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 extras = ((QuestChallenge) qe).getAIExtraCards(); + if (qe instanceof QuestEventChallenge) { + final List 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 extras = ((QuestChallenge) qe).getHumanExtraCards(); + if (qe instanceof QuestEventChallenge) { + final List extras = ((QuestEventChallenge) qe).getHumanExtraCards(); for (final String s : extras) { list.add(QuestUtil.readExtraCard(s, AllZone.getHumanPlayer())); diff --git a/src/main/java/forge/quest/QuestUtilCards.java b/src/main/java/forge/quest/QuestUtilCards.java index c8d49bc6577..f8a78a3aad3 100644 --- a/src/main/java/forge/quest/QuestUtilCards.java +++ b/src/main/java/forge/quest/QuestUtilCards.java @@ -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; diff --git a/src/main/java/forge/quest/data/item/IQuestStallPurchasable.java b/src/main/java/forge/quest/bazaar/IQuestBazaarItem.java similarity index 94% rename from src/main/java/forge/quest/data/item/IQuestStallPurchasable.java rename to src/main/java/forge/quest/bazaar/IQuestBazaarItem.java index bdcb25497c4..97a052900f1 100644 --- a/src/main/java/forge/quest/data/item/IQuestStallPurchasable.java +++ b/src/main/java/forge/quest/bazaar/IQuestBazaarItem.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 { +public interface IQuestBazaarItem extends Comparable { /** *

* getPurchaseName. @@ -53,7 +53,7 @@ public interface IQuestStallPurchasable extends Comparable { * * @return the name of the image that is displayed in the bazaar */ - ImageIcon getIcon(); + ImageIcon getIcon(QuestAssets qA); /** *

diff --git a/src/main/java/forge/quest/QuestStallManager.java b/src/main/java/forge/quest/bazaar/QuestBazaarManager.java similarity index 78% rename from src/main/java/forge/quest/QuestStallManager.java rename to src/main/java/forge/quest/bazaar/QuestBazaarManager.java index 4a154e0c7d5..2d8e76dd510 100644 --- a/src/main/java/forge/quest/QuestStallManager.java +++ b/src/main/java/forge/quest/bazaar/QuestBazaarManager.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 stalls. */ private final Map stalls = new TreeMap(); /** Constant items. */ - private final Map> itemsOnStalls = new TreeMap>(String.CASE_INSENSITIVE_ORDER); - private final Map items = new TreeMap(); + private final Map> itemsOnStalls = new TreeMap>(String.CASE_INSENSITIVE_ORDER); + private final Map items = new TreeMap(); /** *

@@ -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 itemSet = new HashMap(); + final Map itemSet = new HashMap(); - final QuestAssets qA = AllZone.getQuest().getAssets(); - for (QuestPetAbstract i : qA.getPetManager().getPetsAndPlants()) { itemSet.put(i.getName(), i); } + 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); + } + } + itemSet.putAll(items); itemsOnStalls.clear(); for (QuestStallDefinition thisStall : stalls.values()) { - TreeSet set = new TreeSet(); + TreeSet set = new TreeSet(); 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   {@link java.lang.String} * @return {@link java.util.List}. */ - public List getItems(final String stallName) { + public List getItems(final String stallName) { buildItems(); - final List ret = new ArrayList(); + final List ret = new ArrayList(); 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); } diff --git a/src/main/java/forge/quest/data/item/QuestItemPassive.java b/src/main/java/forge/quest/bazaar/QuestItemBasic.java similarity index 89% rename from src/main/java/forge/quest/data/item/QuestItemPassive.java rename to src/main/java/forge/quest/bazaar/QuestItemBasic.java index a2719f03dfb..f6e33242020 100644 --- a/src/main/java/forge/quest/data/item/QuestItemPassive.java +++ b/src/main/java/forge/quest/bazaar/QuestItemBasic.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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()); } } diff --git a/src/main/java/forge/quest/data/item/QuestItemElixir.java b/src/main/java/forge/quest/bazaar/QuestItemElixir.java similarity index 94% rename from src/main/java/forge/quest/data/item/QuestItemElixir.java rename to src/main/java/forge/quest/bazaar/QuestItemElixir.java index e534e997281..1302dc83827 100644 --- a/src/main/java/forge/quest/data/item/QuestItemElixir.java +++ b/src/main/java/forge/quest/bazaar/QuestItemElixir.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 { /** *

diff --git a/src/main/java/forge/quest/data/item/QuestItemEstates.java b/src/main/java/forge/quest/bazaar/QuestItemEstates.java similarity index 94% rename from src/main/java/forge/quest/data/item/QuestItemEstates.java rename to src/main/java/forge/quest/bazaar/QuestItemEstates.java index 198ae52a06a..59c48177b79 100644 --- a/src/main/java/forge/quest/data/item/QuestItemEstates.java +++ b/src/main/java/forge/quest/bazaar/QuestItemEstates.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 { /** *

* Constructor for QuestItemEstates. diff --git a/src/main/java/forge/quest/data/item/QuestItemPoundFlesh.java b/src/main/java/forge/quest/bazaar/QuestItemPoundFlesh.java similarity index 90% rename from src/main/java/forge/quest/data/item/QuestItemPoundFlesh.java rename to src/main/java/forge/quest/bazaar/QuestItemPoundFlesh.java index 49758e12a6b..c581dec4704 100644 --- a/src/main/java/forge/quest/data/item/QuestItemPoundFlesh.java +++ b/src/main/java/forge/quest/bazaar/QuestItemPoundFlesh.java @@ -15,10 +15,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 { /** *

diff --git a/src/main/java/forge/quest/data/item/QuestItemType.java b/src/main/java/forge/quest/bazaar/QuestItemType.java similarity index 85% rename from src/main/java/forge/quest/data/item/QuestItemType.java rename to src/main/java/forge/quest/bazaar/QuestItemType.java index 37cd14451f7..25314b43631 100644 --- a/src/main/java/forge/quest/data/item/QuestItemType.java +++ b/src/main/java/forge/quest/bazaar/QuestItemType.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 bazaarControllerClass; + private final Class bazaarControllerClass; private final Class modelClass; - private QuestItemType(final String key, final Class controllerClass0, + private QuestItemType(final String key, final Class controllerClass0, final Class modelClass0) { this.saveFileKey = key; this.bazaarControllerClass = controllerClass0; @@ -68,7 +68,7 @@ public enum QuestItemType { * * @return the bazaar controller class */ - public Class getBazaarControllerClass() { + public Class getBazaarControllerClass() { return this.bazaarControllerClass; } diff --git a/src/main/java/forge/quest/data/item/QuestItemZeppelin.java b/src/main/java/forge/quest/bazaar/QuestItemZeppelin.java similarity index 93% rename from src/main/java/forge/quest/data/item/QuestItemZeppelin.java rename to src/main/java/forge/quest/bazaar/QuestItemZeppelin.java index 69e27c44220..9dd0001cacc 100644 --- a/src/main/java/forge/quest/data/item/QuestItemZeppelin.java +++ b/src/main/java/forge/quest/bazaar/QuestItemZeppelin.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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 { /** *

* Constructor for QuestItemZeppelin. diff --git a/src/main/java/forge/quest/data/pet/QuestPetAbstract.java b/src/main/java/forge/quest/bazaar/QuestPetController.java similarity index 56% rename from src/main/java/forge/quest/data/pet/QuestPetAbstract.java rename to src/main/java/forge/quest/bazaar/QuestPetController.java index 9257d5607f2..57f864222ae 100644 --- a/src/main/java/forge/quest/data/pet/QuestPetAbstract.java +++ b/src/main/java/forge/quest/bazaar/QuestPetController.java @@ -15,31 +15,53 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -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; /** *

* Abstract QuestPetAbstract class. *

- * + * 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 ? - private final String name; - private final String description; + @XStreamAsAttribute() + private int maxLevel; + + private final List levels = new ArrayList(); + @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; + } + /** *

* getPetCard. @@ -47,16 +69,11 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable { * * @return a {@link forge.Card} object. */ - public abstract Card getPetCard(); - - /** - *

- * getAllUpgradePrices. - *

- * - * @return an array of int. - */ - public abstract int[] getAllUpgradePrices(); + + + public Card getPetCard(QuestAssets qA) { + return this.levels.get(getPetLevel(qA)).getCard(); + } /** *

@@ -67,8 +84,11 @@ 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 @@ -76,15 +96,6 @@ public abstract class QuestPetAbstract implements IQuestStallPurchasable { return 0; } - /** - *

- * getAllUpgradeDescriptions. - *

- * - * @return an array of {@link java.lang.String} objects. - */ - public abstract String[] getAllUpgradeDescriptions(); - /** *

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

- * getAllImageNames. - *

- * - * @return an array of {@link java.lang.String} objects. - */ - public abstract ImageIcon[] getAllIcons(); - /** *

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

- * getAllStats. - *

- * - * @return an array of {@link java.lang.String} objects. - */ - public abstract String[] getAllStats(); - /** *

* 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]; - } - - /** - *

- * Getter for the field level. - *

- * - * @return a int. - */ - public final int getLevel() { - return this.level; - } - - /** - *

- * incrementLevel. - *

- */ - 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; } - /** - *

- * Constructor for QuestPetAbstract. - *

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

- * Setter for the field level. - *

- * - * @param level - * a int. - */ - public final void setLevel(final int level) { - this.level = level; - } /** *

@@ -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; } } diff --git a/src/main/java/forge/quest/bazaar/QuestPetStats.java b/src/main/java/forge/quest/bazaar/QuestPetStats.java new file mode 100644 index 00000000000..e58f79671dd --- /dev/null +++ b/src/main/java/forge/quest/bazaar/QuestPetStats.java @@ -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 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; + } +} diff --git a/src/main/java/forge/quest/bazaar/QuestPetStorage.java b/src/main/java/forge/quest/bazaar/QuestPetStorage.java new file mode 100644 index 00000000000..50fdd216eff --- /dev/null +++ b/src/main/java/forge/quest/bazaar/QuestPetStorage.java @@ -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> petsBySlot = new HashMap>(); + Map petsByName = new HashMap(); + + /** + * 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 list = petsBySlot.get(Integer.valueOf(iSlot)); + if ( null == list ) { + list = new ArrayList(); + 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 getAvaliablePets(int iSlot, QuestAssets qA) { + List result = new ArrayList(); + List 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 getAllPets(int iSlot) { + List result = new ArrayList(); + List allPossible = petsBySlot.get(Integer.valueOf(iSlot)); + if ( null != allPossible ) for(QuestPetController c : allPossible) result.add(c); + return result; + } + +} diff --git a/src/main/java/forge/quest/data/QuestStallDefinition.java b/src/main/java/forge/quest/bazaar/QuestStallDefinition.java similarity index 98% rename from src/main/java/forge/quest/data/QuestStallDefinition.java rename to src/main/java/forge/quest/bazaar/QuestStallDefinition.java index 5037bf84947..aab74324ddf 100644 --- a/src/main/java/forge/quest/data/QuestStallDefinition.java +++ b/src/main/java/forge/quest/bazaar/QuestStallDefinition.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package forge.quest.data; +package forge.quest.bazaar; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/forge/quest/bazaar/package-info.java b/src/main/java/forge/quest/bazaar/package-info.java new file mode 100644 index 00000000000..3721f2ec75f --- /dev/null +++ b/src/main/java/forge/quest/bazaar/package-info.java @@ -0,0 +1,3 @@ +/** Forge Card Game. */ +package forge.quest.bazaar; + diff --git a/src/main/java/forge/quest/data/QuestAssets.java b/src/main/java/forge/quest/data/QuestAssets.java index a9118d5563a..41832aed90f 100644 --- a/src/main/java/forge/quest/data/QuestAssets.java +++ b/src/main/java/forge/quest/data/QuestAssets.java @@ -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 shopList = new ItemPool(InventoryItem.class); // the // gadgets - /** The pet manager. */ - final QuestPetManager petManager = new QuestPetManager(); // pets - /** The inventory items. */ final Map inventoryItems = new EnumMap( QuestItemType.class); + // Much the same like other map, but keyed by string (to support a lot of custom pets) + final Map combatPets = new HashMap(); /** * Checks for item. * @@ -98,6 +97,7 @@ public class QuestAssets { return this.inventoryItems.get(itemType); } + /** * Sets the item level. * @@ -119,7 +119,25 @@ 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 /** diff --git a/src/main/java/forge/quest/data/QuestData.java b/src/main/java/forge/quest/data/QuestData.java index 4212b37f315..a55f3e2c71b 100644 --- a/src/main/java/forge/quest/data/QuestData.java +++ b/src/main/java/forge/quest/data/QuestData.java @@ -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 CURRENT_VERSION_NUMBER=2. */ - 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 diff --git a/src/main/java/forge/quest/data/item/package-info.java b/src/main/java/forge/quest/data/item/package-info.java deleted file mode 100644 index 60a7fac5c9a..00000000000 --- a/src/main/java/forge/quest/data/item/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ -/** Forge Card Game. */ -package forge.quest.data.item; - diff --git a/src/main/java/forge/quest/data/pet/QuestPetBird.java b/src/main/java/forge/quest/data/pet/QuestPetBird.java deleted file mode 100644 index c5512206d78..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetBird.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetBird class. - *

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

- * Constructor for QuestPetBird. - *

- */ - 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") }; - } -} diff --git a/src/main/java/forge/quest/data/pet/QuestPetCrocodile.java b/src/main/java/forge/quest/data/pet/QuestPetCrocodile.java deleted file mode 100644 index 56629245bbe..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetCrocodile.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetCrocodile class. - *

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

- * Constructor for QuestPetCrocodile. - *

- */ - 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") }; - } -} diff --git a/src/main/java/forge/quest/data/pet/QuestPetHound.java b/src/main/java/forge/quest/data/pet/QuestPetHound.java deleted file mode 100644 index 204edf6be04..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetHound.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetHound class. - *

- * - * @author Forge - * @version $Id$ - */ -public class QuestPetHound extends QuestPetAbstract { - /** - *

- * Constructor for QuestPetHound. - *

- */ - 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") }; - } -} diff --git a/src/main/java/forge/quest/data/pet/QuestPetManager.java b/src/main/java/forge/quest/data/pet/QuestPetManager.java deleted file mode 100644 index 726cea574f1..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetManager.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetManager class. - *

- * - * @author Forge - * @version $Id$ - */ -public class QuestPetManager { - - /** The pets. */ - private final Map pets = new HashMap(); - - /** The selected pet. */ - private QuestPetAbstract selectedPet; - - /** The plant. */ - private QuestPetAbstract plant; - - /** The use plant. */ - private boolean usePlant; - - /** - *

- * Constructor for QuestPetManager. - *

- */ - public QuestPetManager() { - this.plant = new QuestPetPlant(); - for (final QuestPetAbstract pet : QuestPetManager.getAllPets()) { - this.addPet(pet); - } - } - - /** - *

- * Setter for the field selectedPet. - *

- * - * @param pet - * a {@link java.lang.String} object. - */ - public final void setSelectedPet(final String pet) { - this.selectedPet = (pet == null) ? null : this.getPet(pet); - } - - /** - *

- * Getter for the field selectedPet. - *

- * - * @return a {@link forge.quest.data.pet.QuestPetAbstract} object. - */ - public final QuestPetAbstract getSelectedPet() { - return this.selectedPet; - } - - /** - *

- * Getter for the field plant. - *

- * - * @return a {@link forge.quest.data.pet.QuestPetAbstract} object. - */ - public final QuestPetAbstract getPlant() { - return this.plant; - } - - /** - *

- * addPlantLevel. - *

- */ - public final void addPlantLevel() { - if (this.plant == null) { - this.plant = new QuestPetPlant(); - } else { - this.plant.incrementLevel(); - } - } - - /** - *

- * getPet. - *

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

- * addPet. - *

- * - * @param newPet - * a {@link forge.quest.data.pet.QuestPetAbstract} object. - */ - public final void addPet(final QuestPetAbstract newPet) { - this.pets.put(newPet.getName(), newPet); - } - - /** - *

- * getPetNames. - *

- * - * @return a {@link java.util.Set} object. - */ - public final Set getPetNames() { - return this.pets.keySet(); - } - - /** - *

- * addPetLevel. - *

- * - * @param s - * a {@link java.lang.String} object. - */ - public final void addPetLevel(final String s) { - this.pets.get(s).incrementLevel(); - } - - /** - *

- * shouldPlantBeUsed. - *

- * - * @return a boolean. - */ - public final boolean shouldPlantBeUsed() { - return this.isUsePlant(); - } - - /** - *

- * shouldPetBeUsed. - *

- * - * @return a boolean. - */ - public final boolean shouldPetBeUsed() { - return this.selectedPet != null; - } - - /** - *

- * getAllPets. - *

- * - * @return a {@link java.util.Set} object. - */ - private static Set getAllPets() { - final SortedSet set = new TreeSet(); - - set.add(new QuestPetBird()); - set.add(new QuestPetCrocodile()); - set.add(new QuestPetHound()); - set.add(new QuestPetWolf()); - - return set; - } - - /** - *

- * getAvailablePetNames. - *

- * - * @return a {@link java.util.Set} object. - */ - public final Set getAvailablePetNames() { - final SortedSet set = new TreeSet(); - for (final Map.Entry pet : this.pets.entrySet()) { - if (pet.getValue().getLevel() > 0) { - set.add(pet.getKey()); - } - } - return set; - } - - /** - *

- * getPetsAndPlants. - *

- * - * @return a {@link java.util.Collection} object. - */ - public final Collection getPetsAndPlants() { - final Set petsAndPlants = new HashSet(this.pets.values()); - petsAndPlants.add(this.plant); - - return petsAndPlants; - } - - // Magic to support added pet types when reading saves. - /** - *

- * readResolve. - *

- * - * @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; - } -} diff --git a/src/main/java/forge/quest/data/pet/QuestPetPlant.java b/src/main/java/forge/quest/data/pet/QuestPetPlant.java deleted file mode 100644 index 5da98c06a37..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetPlant.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetPlant class. - *

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

- * Constructor for QuestPetPlant. - *

- */ - 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()); - } -} diff --git a/src/main/java/forge/quest/data/pet/QuestPetWolf.java b/src/main/java/forge/quest/data/pet/QuestPetWolf.java deleted file mode 100644 index 2e5cfb03520..00000000000 --- a/src/main/java/forge/quest/data/pet/QuestPetWolf.java +++ /dev/null @@ -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 . - */ -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; - -/** - *

- * QuestPetWolf class. - *

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

- * Constructor for QuestPetWolf. - *

- */ - 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") }; - } -} diff --git a/src/main/java/forge/quest/data/pet/package-info.java b/src/main/java/forge/quest/data/pet/package-info.java deleted file mode 100644 index 573f7790850..00000000000 --- a/src/main/java/forge/quest/data/pet/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ -/** Forge Card Game. */ -package forge.quest.data.pet; - diff --git a/src/main/java/forge/quest/io/QuestDataIO.java b/src/main/java/forge/quest/io/QuestDataIO.java index 68ca35f013b..2a3b2459bec 100644 --- a/src/main/java/forge/quest/io/QuestDataIO.java +++ b/src/main/java/forge/quest/io/QuestDataIO.java @@ -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.class)); + } + + if (saveVersion < 5) { + QuestDataIO.setFinalField(QuestAssets.class, "combatPets", newData.getAssets(), new HashMap() ); + } + + 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.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.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 completedChallenges = new ArrayList(); + 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.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 completedChallenges = new ArrayList(); - 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") diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda.java b/src/main/java/forge/util/Lambda.java similarity index 96% rename from src/main/java/net/slightlymagic/braids/util/lambda/Lambda.java rename to src/main/java/forge/util/Lambda.java index 071225dd92c..1d86fc7d949 100644 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda.java +++ b/src/main/java/forge/util/Lambda.java @@ -18,7 +18,7 @@ * limitations under the Apache License. * */ -package net.slightlymagic.braids.util.lambda; +package forge.util; /** * The Interface Lambda. diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda0.java b/src/main/java/forge/util/Lambda0.java similarity index 93% rename from src/main/java/net/slightlymagic/braids/util/lambda/Lambda0.java rename to src/main/java/forge/util/Lambda0.java index 00582a7d751..d2381ac5611 100644 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda0.java +++ b/src/main/java/forge/util/Lambda0.java @@ -18,7 +18,8 @@ * limitations under the Apache License. * */ -package net.slightlymagic.braids.util.lambda; +package forge.util; + /** * The Class Lambda1. diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda1.java b/src/main/java/forge/util/Lambda1.java similarity index 97% rename from src/main/java/net/slightlymagic/braids/util/lambda/Lambda1.java rename to src/main/java/forge/util/Lambda1.java index acd4b73f92d..a23fa9d9714 100644 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda1.java +++ b/src/main/java/forge/util/Lambda1.java @@ -18,7 +18,8 @@ * limitations under the Apache License. * */ -package net.slightlymagic.braids.util.lambda; +package forge.util; + /** * The Class Lambda1. diff --git a/src/main/java/forge/util/Predicate.java b/src/main/java/forge/util/Predicate.java index b16375ce82d..36e02f057a4 100644 --- a/src/main/java/forge/util/Predicate.java +++ b/src/main/java/forge/util/Predicate.java @@ -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 , which are or contain an diff --git a/src/main/java/forge/util/StorageReaderFile.java b/src/main/java/forge/util/StorageReaderFile.java index 518b76197e8..4da02bc3e19 100644 --- a/src/main/java/forge/util/StorageReaderFile.java +++ b/src/main/java/forge/util/StorageReaderFile.java @@ -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; diff --git a/src/main/java/forge/util/StorageReaderFolder.java b/src/main/java/forge/util/StorageReaderFolder.java index 31bfa7aa486..05427664211 100644 --- a/src/main/java/forge/util/StorageReaderFolder.java +++ b/src/main/java/forge/util/StorageReaderFolder.java @@ -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; diff --git a/src/main/java/forge/view/ViewBazaarUI.java b/src/main/java/forge/view/ViewBazaarUI.java index 2716b4518ec..76412d6f0af 100644 --- a/src/main/java/forge/view/ViewBazaarUI.java +++ b/src/main/java/forge/view/ViewBazaarUI.java @@ -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 diff --git a/src/main/java/forge/view/bazaar/ViewItem.java b/src/main/java/forge/view/bazaar/ViewItem.java index 2fac8a8ff10..326191283e7 100644 --- a/src/main/java/forge/view/bazaar/ViewItem.java +++ b/src/main/java/forge/view/bazaar/ViewItem.java @@ -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 - *   {@link forge.quest.data.item.IQuestStallPurchasable} + *   {@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(); + + 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() < ViewItem.this.getItem().getBuyingPrice(qA)) { + if (qA.getCredits() < bazaarItem.getBuyingPrice(qA)) { ViewItem.this.btnPurchase.setEnabled(false); } diff --git a/src/main/java/forge/view/bazaar/ViewStall.java b/src/main/java/forge/view/bazaar/ViewStall.java index 2152e10c9d5..28bad4cb2ae 100644 --- a/src/main/java/forge/view/bazaar/ViewStall.java +++ b/src/main/java/forge/view/bazaar/ViewStall.java @@ -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 - *   {@link forge.quest.data.QuestStallDefinition} + *   {@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 items = AllZone.getQuest().getBazaar().getItems(this.stall.getName()); + final List items = AllZone.getQuest().getBazaar().getItems(this.stall.getName()); this.lblStallName.setText(this.stall.getDisplayName()); this.tpnFluff.setText(this.stall.getFluff()); diff --git a/src/main/java/forge/view/match/QuestWinLoseHandler.java b/src/main/java/forge/view/match/QuestWinLoseHandler.java index 3e07b6ee64a..26839b0a573 100644 --- a/src/main/java/forge/view/match/QuestWinLoseHandler.java +++ b/src/main/java/forge/view/match/QuestWinLoseHandler.java @@ -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; - /** *

* 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 cardsWon = ((QuestChallenge) qEvent).getCardRewardList(); - final long questRewardCredits = ((QuestChallenge) qEvent).getCreditsReward(); + final List cardsWon = ((QuestEventChallenge) qEvent).getCardRewardList(); + final long questRewardCredits = ((QuestEventChallenge) qEvent).getCreditsReward(); final StringBuilder sb = new StringBuilder(); sb.append("Challenge completed.

"); @@ -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()); diff --git a/src/main/java/net/slightlymagic/braids/util/generator/GeneratorFunctions.java b/src/main/java/net/slightlymagic/braids/util/generator/GeneratorFunctions.java index f23820bbd5f..8e560312d3a 100644 --- a/src/main/java/net/slightlymagic/braids/util/generator/GeneratorFunctions.java +++ b/src/main/java/net/slightlymagic/braids/util/generator/GeneratorFunctions.java @@ -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. * diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda2.java b/src/main/java/net/slightlymagic/braids/util/lambda/Lambda2.java deleted file mode 100644 index 2f5b5a33679..00000000000 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda2.java +++ /dev/null @@ -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 - * the generic type - * @param - * the generic type - * @param - * the generic type - */ -public abstract class Lambda2 implements Lambda { - - /** - * 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]); - } - -} diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda3.java b/src/main/java/net/slightlymagic/braids/util/lambda/Lambda3.java deleted file mode 100644 index 6a3bf558116..00000000000 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Lambda3.java +++ /dev/null @@ -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 - * the generic type - * @param - * the generic type - * @param - * the generic type - * @param - * the generic type - */ -public abstract class Lambda3 implements Lambda { - - /** - * 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]); - } - -} diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/Thunk.java b/src/main/java/net/slightlymagic/braids/util/lambda/Thunk.java deleted file mode 100644 index fbdda2752bd..00000000000 --- a/src/main/java/net/slightlymagic/braids/util/lambda/Thunk.java +++ /dev/null @@ -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 - * the generic type - */ -public interface Thunk { - - /** - * Apply. - * - * @return the t - */ - T apply(); -} diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/package-info.java b/src/main/java/net/slightlymagic/braids/util/lambda/package-info.java deleted file mode 100644 index ab5eacbd592..00000000000 --- a/src/main/java/net/slightlymagic/braids/util/lambda/package-info.java +++ /dev/null @@ -1,2 +0,0 @@ -/** Forge Card Game. */ -package net.slightlymagic.braids.util.lambda;