From e80d30ba5c4e74f4973a43631bb5432948a124dc Mon Sep 17 00:00:00 2001 From: Sol Date: Tue, 13 Oct 2015 22:32:02 +0000 Subject: [PATCH] - Adding Amulet of Vim to allow 1 game matches to be played in quest mode --- .gitattributes | 1 + .../home/quest/CSubmenuChallenges.java | 13 +++++-- .../screens/home/quest/CSubmenuDuels.java | 13 +++++-- .../home/quest/VSubmenuChallenges.java | 13 ++++--- .../screens/home/quest/VSubmenuDuels.java | 11 +++--- .../src/forge/screens/quest/QuestMenu.java | 4 +-- .../forge/screens/quest/QuestStatsScreen.java | 17 +++++---- forge-gui/res/quest/bazaar/index.xml | 7 ++++ .../main/java/forge/quest/IVQuestStats.java | 2 +- .../java/forge/quest/QuestController.java | 18 +++++----- .../src/main/java/forge/quest/QuestUtil.java | 21 +++++++---- .../quest/bazaar/QuestItemCharmOfVim.java | 35 +++++++++++++++++++ .../forge/quest/bazaar/QuestItemType.java | 1 + .../main/java/forge/quest/data/QuestData.java | 19 +++------- .../main/java/forge/quest/io/QuestDataIO.java | 7 +++- 15 files changed, 122 insertions(+), 60 deletions(-) create mode 100644 forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVim.java diff --git a/.gitattributes b/.gitattributes index b07baa3022e..bd8dee11f92 100644 --- a/.gitattributes +++ b/.gitattributes @@ -18277,6 +18277,7 @@ forge-gui/src/main/java/forge/quest/bazaar/IQuestBazaarItem.java svneol=native#t forge-gui/src/main/java/forge/quest/bazaar/QuestBazaarManager.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/bazaar/QuestItemBasic.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVigor.java -text +forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVim.java -text forge-gui/src/main/java/forge/quest/bazaar/QuestItemElixir.java -text forge-gui/src/main/java/forge/quest/bazaar/QuestItemEstates.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/bazaar/QuestItemMembership.java -text diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuChallenges.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuChallenges.java index e0f2f3424c3..4910c69f697 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuChallenges.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuChallenges.java @@ -103,11 +103,14 @@ public enum CSubmenuChallenges implements ICDoc { } }); - view.getCbCharm().addActionListener(new ActionListener() { + view.getCbxMatchLength().addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent arg0) { - quest.setCharmState(view.getCbCharm().isSelected()); - quest.save(); + String match = view.getCbxMatchLength().getSelectedItem(); + if (match != null) { + quest.setMatchLength(match.substring(match.length() - 1)); + quest.save(); + } } }); } @@ -154,6 +157,10 @@ public enum CSubmenuChallenges implements ICDoc { final JXButtonPanel grpPanel = new JXButtonPanel(); + StringBuilder sb = new StringBuilder(); + sb.append("Match - Best of ").append(FModel.getQuest().getMatchLength()); + view.getCbxMatchLength().setSelectedItem(sb.toString()); + boolean haveAnyChallenges = true; for (final QuestEventChallenge qc : challenges) { final PnlEvent temp = new PnlEvent(qc); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuDuels.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuDuels.java index e679dbc14cc..07f1e887355 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuDuels.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuDuels.java @@ -71,11 +71,14 @@ public enum CSubmenuDuels implements ICDoc { } }); - view.getCbCharm().addActionListener(new ActionListener() { + view.getCbxMatchLength().addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent arg0) { - quest.setCharmState(view.getCbCharm().isSelected()); - quest.save(); + String match = view.getCbxMatchLength().getSelectedItem(); + if (match != null) { + quest.setMatchLength(match.substring(match.length() - 1)); + quest.save(); + } } }); @@ -153,6 +156,10 @@ public enum CSubmenuDuels implements ICDoc { grpPanel.add(temp, rad, "w 100%!, h 135px!, gapy 15px"); } view.getPnlDuels().add(grpPanel, "w 100%!"); + + StringBuilder sb = new StringBuilder(); + sb.append("Match - Best of ").append(FModel.getQuest().getMatchLength()); + view.getCbxMatchLength().setSelectedItem(sb.toString()); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuChallenges.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuChallenges.java index 6651c54254d..f8abdf228a3 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuChallenges.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuChallenges.java @@ -48,7 +48,9 @@ public enum VSubmenuChallenges implements IVSubmenu, IVQuest private final StartButton btnStart = new StartButton(); private final FComboBoxWrapper cbxPet = new FComboBoxWrapper(); private final FCheckBox cbPlant = new FCheckBox("Summon Plant"); - private final FCheckBox cbCharm = new FCheckBox("Use Charm of Vigor"); + + private final FComboBoxWrapper cbxMatchLength = new FComboBoxWrapper(); + private final FLabel lblZep = new FLabel.Builder().text("Launch
Zeppelin") .hoverable(true).icon(FSkin.getIcon(FSkinProp.ICO_QUEST_ZEP)) .fontSize(16).build(); @@ -106,7 +108,7 @@ public enum VSubmenuChallenges implements IVSubmenu, IVQuest pnlStats.add(lblLife, constraints); pnlStats.add(lblWorld, constraints); pnlStats.add(cbPlant, constraints); - pnlStats.add(cbCharm, constraints); + cbxMatchLength.addTo(pnlStats, constraints); cbxPet.addTo(pnlStats, constraints); pnlStats.add(lblZep, "w 130px!, h 60px!, gap 0 0 0 5px"); pnlStats.setOpaque(false); @@ -292,12 +294,9 @@ public enum VSubmenuChallenges implements IVSubmenu, IVQuest return parentCell; } - /** - * @return the cbCharm - */ @Override - public FCheckBox getCbCharm() { - return cbCharm; + public FComboBoxWrapper getCbxMatchLength() { + return cbxMatchLength; } @Override diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuDuels.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuDuels.java index 2e40b603623..fffc5772674 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuDuels.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuDuels.java @@ -46,7 +46,7 @@ public enum VSubmenuDuels implements IVSubmenu, IVQuestStats { private final StartButton btnStart = new StartButton(); private final FComboBoxWrapper cbxPet = new FComboBoxWrapper(); - private final FCheckBox cbCharm = new FCheckBox("Use Charm of Vigor"); + private final FComboBoxWrapper cbxMatchLength = new FComboBoxWrapper(); private final FCheckBox cbPlant = new FCheckBox("Summon Plant"); private final FLabel lblZep = new FLabel.Builder().text("Launch Zeppelin").fontSize(14).build(); @@ -107,7 +107,7 @@ public enum VSubmenuDuels implements IVSubmenu, IVQuestStats { pnlStats.add(lblLife, constraints); pnlStats.add(lblWorld, constraints); pnlStats.add(cbPlant, constraints); - pnlStats.add(cbCharm, constraints); + cbxMatchLength.addTo(pnlStats, constraints); cbxPet.addTo(pnlStats, constraints); pnlStats.setOpaque(false); @@ -297,12 +297,9 @@ public enum VSubmenuDuels implements IVSubmenu, IVQuestStats { return parentCell; } - /** - * @return the cbCharm - */ @Override - public FCheckBox getCbCharm() { - return cbCharm; + public FComboBoxWrapper getCbxMatchLength() { + return cbxMatchLength; } @Override diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java index c69b9b0fa4f..b8cec1c48a6 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestMenu.java @@ -304,8 +304,8 @@ public class QuestMenu extends FPopupMenu implements IVQuestStats { } @Override - public ICheckBox getCbCharm() { - return statsScreen.getCbCharm(); + public IComboBox getCbxMatchLength() { + return statsScreen.getCbxMatchLength(); } @Override diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java index 7ca57409fed..540b94c1e25 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestStatsScreen.java @@ -60,7 +60,7 @@ public class QuestStatsScreen extends FScreen { .icon(FSkinImage.QUEST_MAP) .font(FSkinFont.get(16)).iconScaleFactor(1).build()); private final FComboBox cbxPet = scroller.add(new FComboBox()); - private final FCheckBox cbCharm = scroller.add(new FCheckBox("Use Charm of Vigor")); + private final FComboBox cbxMatchLength = new FComboBox(); private final FCheckBox cbPlant = scroller.add(new FCheckBox("Summon Plant")); private final FLabel lblZep = scroller.add(new FLabel.Builder().text("Launch Zeppelin").icon(FSkinImage.QUEST_ZEP).font(FSkinFont.get(16)).opaque().build()); @@ -88,8 +88,8 @@ public class QuestStatsScreen extends FScreen { public ICheckBox getCbPlant() { return cbPlant; } - public ICheckBox getCbCharm() { - return cbCharm; + public IComboBox getCbxMatchLength() { + return cbxMatchLength; } public IButton getLblZep() { return lblZep; @@ -110,13 +110,18 @@ public class QuestStatsScreen extends FScreen { FModel.getQuest().save(); } }); - cbCharm.setCommand(new FEventHandler() { + + cbxMatchLength.setDropDownChangeHandler(new FEventHandler() { @Override public void handleEvent(FEvent e) { - FModel.getQuest().setCharmState(cbCharm.isSelected()); - FModel.getQuest().save(); + String match = cbxMatchLength.getSelectedItem(); + if (match != null) { + FModel.getQuest().setMatchLength(match.substring(match.length() - 1)); + FModel.getQuest().save(); + } } }); + cbPlant.setCommand(new FEventHandler() { @Override public void handleEvent(FEvent e) { diff --git a/forge-gui/res/quest/bazaar/index.xml b/forge-gui/res/quest/bazaar/index.xml index 26c4e954dad..64637e66cb1 100644 --- a/forge-gui/res/quest/bazaar/index.xml +++ b/forge-gui/res/quest/bazaar/index.xml @@ -32,6 +32,7 @@ Map Zeppelin Charm of Vigor + Charm of Vim @@ -92,6 +93,12 @@ Effect: Reduces maximum life by 1. Effect: Gives +1 to maximum life. Fine Print: Loses effectiveness after 15 uses. + + + A charm fills you with energy, speeding your movements. + +Effect: You may have each match be best of 1 instead of 3. diff --git a/forge-gui/src/main/java/forge/quest/IVQuestStats.java b/forge-gui/src/main/java/forge/quest/IVQuestStats.java index 4b5854a4803..ae2c52bdfa9 100644 --- a/forge-gui/src/main/java/forge/quest/IVQuestStats.java +++ b/forge-gui/src/main/java/forge/quest/IVQuestStats.java @@ -23,8 +23,8 @@ public interface IVQuestStats { IButton getLblWinStreak(); IComboBox getCbxPet(); + IComboBox getCbxMatchLength(); ICheckBox getCbPlant(); - ICheckBox getCbCharm(); IButton getLblZep(); diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index 265b748787c..3217e4faf93 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -116,17 +116,17 @@ public class QuestController { this.model.getPetSlots().put(slot, name); } } - - public void setCharmState(boolean active) { - if (this.model != null) { - this.model.setCharmActive(active); - } + + public void setMatchLength(String len) { + if (this.model != null) { + this.model.setMatchLength(Integer.parseInt(len)); + } } - - public boolean getCharmState() { - return this.model == null ? false : this.model.isCharmActive(); + + public int getMatchLength() { + return this.model == null ? 3 : this.model.getMatchLength(); } - + /** * * @param slot   int diff --git a/forge-gui/src/main/java/forge/quest/QuestUtil.java b/forge-gui/src/main/java/forge/quest/QuestUtil.java index ffe99e3e6fa..be150062054 100644 --- a/forge-gui/src/main/java/forge/quest/QuestUtil.java +++ b/forge-gui/src/main/java/forge/quest/QuestUtil.java @@ -311,12 +311,21 @@ public class QuestUtil { } } + view.getCbxMatchLength().removeAllItems(); + boolean activeCharms = false; + StringBuilder matchLength = new StringBuilder(); + matchLength.append("Match - Best of ").append(qCtrl.getMatchLength()); + if (qCtrl.getAssets().hasItem(QuestItemType.CHARM_VIM)) { + view.getCbxMatchLength().addItem("Match - Best of 1"); + activeCharms = true; + } + view.getCbxMatchLength().addItem("Match - Best of 3"); if (qCtrl.getAssets().hasItem(QuestItemType.CHARM)) { - view.getCbCharm().setVisible(true); - } - else { - view.getCbCharm().setVisible(false); + view.getCbxMatchLength().addItem("Match - Best of 5"); + activeCharms = true; } + view.getCbxMatchLength().setSelectedItem(matchLength.toString()); + view.getCbxMatchLength().setVisible(activeCharms); if (view.isChallengesView()) { view.getLblZep().setVisible(qCtrl.getAssets().hasItem(QuestItemType.ZEPPELIN)); @@ -413,7 +422,7 @@ public class QuestUtil { // Classic mode display changes view0.getCbxPet().setVisible(false); view0.getCbPlant().setVisible(false); - view0.getCbCharm().setVisible(false); + view0.getCbxMatchLength().setVisible(false); view0.getLblZep().setVisible(false); view0.getLblNextChallengeInWins().setVisible(false); view0.getBtnBazaar().setVisible(false); @@ -563,7 +572,7 @@ public class QuestUtil { final GameRules rules = new GameRules(GameType.Quest); rules.setPlayForAnte(useAnte); rules.setMatchAnteRarity(matchAnteRarity); - rules.setGamesPerMatch(qData.getCharmState() ? 5 : 3); + rules.setGamesPerMatch(qData.getMatchLength()); rules.setManaBurn(FModel.getPreferences().getPrefBoolean(FPref.UI_MANABURN)); rules.setCanCloneUseTargetsImage(FModel.getPreferences().getPrefBoolean(FPref.UI_CLONE_MODE_SOURCE)); final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch(); diff --git a/forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVim.java b/forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVim.java new file mode 100644 index 00000000000..e9ff95b5400 --- /dev/null +++ b/forge-gui/src/main/java/forge/quest/bazaar/QuestItemCharmOfVim.java @@ -0,0 +1,35 @@ +/* + * 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.bazaar; + +import forge.quest.QuestController; +import forge.quest.data.QuestAssets; + +public class QuestItemCharmOfVim extends QuestItemBasic { + QuestItemCharmOfVim() { + super(QuestItemType.CHARM_VIM); // , QuestStallManager.GEAR + } + + /** {@inheritDoc} */ + @Override + public final boolean isAvailableForPurchase(QuestAssets qA, QuestController qCtrl) { + return super.isAvailableForPurchase(qA, qCtrl); + } + + +} diff --git a/forge-gui/src/main/java/forge/quest/bazaar/QuestItemType.java b/forge-gui/src/main/java/forge/quest/bazaar/QuestItemType.java index f670a0b7c85..08c582cc570 100644 --- a/forge-gui/src/main/java/forge/quest/bazaar/QuestItemType.java +++ b/forge-gui/src/main/java/forge/quest/bazaar/QuestItemType.java @@ -43,6 +43,7 @@ public enum QuestItemType { POUND_FLESH("Pound of Flesh", QuestItemPoundFlesh.class, QuestItemCondition.class), /** The AMULET. */ CHARM("Charm of Vigor", QuestItemCharmOfVigor.class, QuestItemCondition.class), + CHARM_VIM("Charm of Vim", QuestItemCharmOfVim.class, QuestItemCondition.class), CASH_STAKES("Cash Stakes", QuestItemBasic.class, QuestItemCondition.class), diff --git a/forge-gui/src/main/java/forge/quest/data/QuestData.java b/forge-gui/src/main/java/forge/quest/data/QuestData.java index 09432a6034b..54953525b99 100644 --- a/forge-gui/src/main/java/forge/quest/data/QuestData.java +++ b/forge-gui/src/main/java/forge/quest/data/QuestData.java @@ -41,7 +41,7 @@ import java.util.Map; */ public final class QuestData { /** Holds the latest version of the Quest Data. */ - public static final int CURRENT_VERSION_NUMBER = 9; + public static final int CURRENT_VERSION_NUMBER = 10; // This field places the version number into QD instance, // but only when the object is created through the constructor @@ -63,7 +63,7 @@ public final class QuestData { private QuestAssets assets; private QuestAchievements achievements; private final Map petSlots = new HashMap<>(); - private boolean isCharmActive = false; + private int matchLength = 3; public QuestData() { //needed for XML serialization } @@ -210,17 +210,6 @@ public final class QuestData { worldId = newId; } - /** - * @return the isCharmActive - */ - public boolean isCharmActive() { - return isCharmActive; - } - - /** - * @param isCharmActive the isCharmActive to set - */ - public void setCharmActive(boolean isCharmActive) { - this.isCharmActive = isCharmActive; - } + public void setMatchLength(int len) { matchLength = len; } + public int getMatchLength() { return matchLength; } } diff --git a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java index 98ec42523a9..1353e9ebb34 100644 --- a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java +++ b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java @@ -190,7 +190,12 @@ public class QuestDataIO { } if (saveVersion < 8) { - QuestDataIO.setFinalField(QuestData.class, "isCharmActive", newData, false); + // Active Charm replaced by matchLength field + //QuestDataIO.setFinalField(QuestData.class, "isCharmActive", newData, false); + } + + if (saveVersion < 10) { + QuestDataIO.setFinalField(QuestData.class, "matchLength", newData, 3); } final QuestAssets qS = newData.getAssets();