From 7b1fd598d275d99ebb0439e1e134b51a45ea670e Mon Sep 17 00:00:00 2001 From: Doublestrike Date: Tue, 13 Dec 2011 12:40:19 +0000 Subject: [PATCH] Current progress on Quest submenu. --- .gitattributes | 4 +- res/pics/icons/PetIcon.png | Bin 0 -> 1469 bytes res/pics/icons/PlantIcon.png | Bin 0 -> 12227 bytes src/main/java/forge/control/ControlAllUI.java | 39 ++- .../java/forge/control/ControlEditorUI.java | 40 --- .../java/forge/control/ControlHomeUI.java | 26 -- .../java/forge/control/home/ControlQuest.java | 133 +++++-- .../quest/gui/bazaar/QuestBazaarPanel.java | 13 +- .../java/forge/view/home/HomeTopLevel.java | 46 +-- src/main/java/forge/view/home/ViewQuest.java | 324 ++++++++++++++---- 10 files changed, 436 insertions(+), 189 deletions(-) create mode 100644 res/pics/icons/PetIcon.png create mode 100644 res/pics/icons/PlantIcon.png delete mode 100644 src/main/java/forge/control/ControlEditorUI.java delete mode 100644 src/main/java/forge/control/ControlHomeUI.java diff --git a/.gitattributes b/.gitattributes index 33b15715bf6..49cee07227d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10061,6 +10061,8 @@ res/pics/icons/Mage01.jpg -text res/pics/icons/Mage02.jpg -text res/pics/icons/MapIcon.png -text svneol=unset#image/png res/pics/icons/MapIconLarge.png -text svneol=unset#image/png +res/pics/icons/PetIcon.png -text +res/pics/icons/PlantIcon.png -text res/pics/icons/Unknown.jpg -text res/pics/icons/ZeppelinIcon.png -text svneol=unset#image/png res/pics/icons/notesIcon.png -text svneol=unset#image/png @@ -10748,8 +10750,6 @@ src/main/java/forge/card/trigger/TriggerUnequip.java svneol=native#text/plain src/main/java/forge/card/trigger/TriggerUntaps.java svneol=native#text/plain src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain src/main/java/forge/control/ControlAllUI.java -text -src/main/java/forge/control/ControlEditorUI.java -text -src/main/java/forge/control/ControlHomeUI.java -text src/main/java/forge/control/ControlMatchUI.java -text src/main/java/forge/control/ControlWinLose.java -text src/main/java/forge/control/home/ControlConstructed.java -text diff --git a/res/pics/icons/PetIcon.png b/res/pics/icons/PetIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..21b9dc15597f15220ab05f9786ce87ded29c4905 GIT binary patch literal 1469 zcmV;u1w#6XP)ZVg+kc{ zgqE9?h5%wK$(q#Iry6ghzL@x+4^2!otxeU$)+U-Z^-@dK2V3KdiM~i;36=(tLgmud zmitmD7okvaxou%#S(d%bWoO3!%q|p`vfGXi{gXd?cFsBTf9L=H%NdO<%kVfw3y)cJ zn@wmmn$_{yvXfSm$@HnwXe=2YAFurUi|;;MySD7i2?l@OOioTd?DhKMoX)xTPJjJ< z>)JJ&d0MmSL>R!g-<&#SwOUWSuy-G@Y!KR78)0~OxZdq{AJA&GBI>*O`S~AYXJ@Ar zJ^dVT91DL`U*K&v+ec^0&i@z-fHLtQ4I6)_y{$=J5x?IrkB*MY4#&T8SLao(r~3xy zU7nTK3eWR0f|D=&_OpEK==+Ca*@+qhnVFf#b8>Q&u_P{oRufRhEGt7np_O@N_w$S? zJ~g~r0yeM!I*L>N6%`dhUS8h0PmUdaQFRbnES9H`cO3B`$uvlk3{RvbC`KqPtAJV& zF(@b}Vp$d#T7YD8CZwmQQwBraY1IHQ4kQu_vP6MSX8@Wu0&)&!vl&EDT(?$|gf(Lc zG~k1Tgalw1dber-$fsWcqNN_ZnWFD|K;-W~N02PbDZjyBkZjhd0uTtWzQ~iV7yYVn zS(et#pkc)m6h*Nl22}zG_|Xf|NDA}MMbIIEAP6fov8pL>xm=S3fFuROsT9e3Pzk)X z?hkoHTm^x@OR51l9FB3!eSBf)gyNb&3#BF>o|89tfGEibpU*$39>Bf1n;wq`c+QW; zFwG<};-m;5xY5JJ14Ie<`T2!G)c`6gE;UV0PrG=Y!;J83m?sph&=bi&2||n^aLzAW zR}BCgi)(Cb%;xiX;bGb~S>y4zU~=*fIOpuJxaeN4uCD)ERW}Ta8}r%gm>Gd(&m6?Z zCt@+u1I_5esm6nVLCUf|91F0#yoeqMxt^TOZnyW5cl;j!a%yUd8OtdKlN$}VHh6+m z$`z$3E$HIY^JmdSJzkhV8%XX^)tEIcJu%N_hE!kx;n{ZxG zfG`XNsi~IjVH-hJ0Pr;XO(p}nH=vx1yx8O6;P;EQ?dN~^=`*KuArM~r%iC|gvG>T4 zLtk#oNYoO0dc6+Y`S$G6(tUX~H4Xo$$^vx%s}vh4MHK)Hz&M(wDXmtc01!nPIy$;PK`uq zua3@6TOG#*l|6`o+^R^?*rtX8?aYj0LY6g3y0ETK#LDZ5i7ESE4OcG_&^jHhfWJFtcd81)fq|jg zIp-n}mkte&wBw`shxpi;$NFFH^#&y3y~)X`fvT!nuc|swSKrk7Y)Ns;&b%FaTnmeB z%H2D*hzNXeaPZFU0L$;P*>08NGcIZe+w8*x#gv0rDQ+CCm*xp$?TV3 z-~ZBAI4+K6C+4RaN&)It)ZQ2Y7%91=mXZ2EQdHHaSy;&3duOz(^(I30rN*-Jp8x{@ Xpbkq-lGf9}00000NkvXXu0mjf!Th-r literal 0 HcmV?d00001 diff --git a/res/pics/icons/PlantIcon.png b/res/pics/icons/PlantIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e243848fde39ede342f946009c3493b77cb007 GIT binary patch literal 12227 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 IlCuc;AF*IPLjV8( literal 0 HcmV?d00001 diff --git a/src/main/java/forge/control/ControlAllUI.java b/src/main/java/forge/control/ControlAllUI.java index d115101222b..ad7b233cd36 100644 --- a/src/main/java/forge/control/ControlAllUI.java +++ b/src/main/java/forge/control/ControlAllUI.java @@ -26,6 +26,7 @@ import java.awt.event.WindowEvent; import javax.swing.JLayeredPane; import forge.AllZone; +import forge.quest.gui.bazaar.QuestBazaarPanel; import forge.view.GuiTopLevel; import forge.view.editor.EditorTopLevel; import forge.view.home.HomeTopLevel; @@ -45,7 +46,17 @@ public class ControlAllUI { private HomeTopLevel home = null; private ViewTopLevel match = null; private EditorTopLevel editor = null; - private WindowAdapter actConcede; + private WindowAdapter waConcede; + private QuestBazaarPanel bazaar; + + /** */ + public static final int HOME_SCREEN = 0; + /** */ + public static final int MATCH_SCREEN = 1; + /** */ + public static final int DEFAULT_EDITOR = 2; + /** */ + public static final int QUEST_BAZAAR = 3; /** *

@@ -62,7 +73,7 @@ public class ControlAllUI { this.display = (JLayeredPane) this.view.getContentPane(); - this.actConcede = new WindowAdapter() { + this.waConcede = new WindowAdapter() { @Override public void windowClosing(final WindowEvent evt) { ViewTopLevel t = ((GuiTopLevel) AllZone.getDisplay()).getController().getMatchController().getView(); @@ -86,6 +97,7 @@ public class ControlAllUI { this.editor = null; this.display.removeAll(); + this.view.removeWindowListener(waConcede); this.view.addOverlay(); view.addComponentListener(new ComponentAdapter() { @@ -101,14 +113,13 @@ public class ControlAllUI { this.home = new HomeTopLevel(); this.display.add(this.home, JLayeredPane.DEFAULT_LAYER); sizeChildren(); - view.removeWindowListener(actConcede); break; case 1: // Match screen this.match = new ViewTopLevel(); this.display.add(this.match, JLayeredPane.DEFAULT_LAYER); sizeChildren(); - view.addWindowListener(actConcede); + view.addWindowListener(waConcede); break; case 2: // Deck editor screen @@ -116,6 +127,12 @@ public class ControlAllUI { this.display.add(this.editor); break; + case 3: // Quest Bazaar screen + this.bazaar = new QuestBazaarPanel(null); + this.display.add(bazaar, JLayeredPane.DEFAULT_LAYER); + sizeChildren(); + break; + default: break; } @@ -139,6 +156,20 @@ public class ControlAllUI { return this.match.getController(); } + /** @return HomeTopLevel */ + public HomeTopLevel getHomeView() { + return this.home; + } + + /** + * Gets the match view. + * + * @return ViewTopLevel + */ + public QuestBazaarPanel getBazaarView() { + return this.bazaar; + } + /** Sizes children of JLayeredPane to fully fit their layers. */ private void sizeChildren() { Component[] children; diff --git a/src/main/java/forge/control/ControlEditorUI.java b/src/main/java/forge/control/ControlEditorUI.java deleted file mode 100644 index d7a8c556de2..00000000000 --- a/src/main/java/forge/control/ControlEditorUI.java +++ /dev/null @@ -1,40 +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.control; - -import javax.swing.JPanel; - -/** - *

- * ControlEditorUI - *

- * Top-level controller for deck editor. - * - */ -@SuppressWarnings("serial") -public class ControlEditorUI extends JPanel { - /** - *

- * ControlEditorUI - *

- * Top-level controller for deck editor. - * - */ - public ControlEditorUI() { - } -} diff --git a/src/main/java/forge/control/ControlHomeUI.java b/src/main/java/forge/control/ControlHomeUI.java deleted file mode 100644 index ae0de420e80..00000000000 --- a/src/main/java/forge/control/ControlHomeUI.java +++ /dev/null @@ -1,26 +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.control; - -/** - * TODO: Write javadoc for this type. - * - */ -public class ControlHomeUI { - -} diff --git a/src/main/java/forge/control/home/ControlQuest.java b/src/main/java/forge/control/home/ControlQuest.java index a0e85f9976f..ec30644b9ce 100644 --- a/src/main/java/forge/control/home/ControlQuest.java +++ b/src/main/java/forge/control/home/ControlQuest.java @@ -1,19 +1,22 @@ package forge.control.home; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import javax.swing.JOptionPane; import forge.AllZone; import forge.Command; import forge.Constant; +import forge.control.ControlAllUI; +import forge.deck.Deck; import forge.gui.deckeditor.DeckEditorQuest; import forge.gui.deckeditor.DeckEditorShop; import forge.quest.data.QuestData; import forge.quest.data.QuestUtil; -import forge.quest.gui.QuestFrame; -import forge.quest.gui.bazaar.QuestBazaarPanel; +import forge.quest.data.item.QuestItemZeppelin; +import forge.quest.gui.main.QuestChallenge; +import forge.quest.gui.main.QuestEvent; import forge.view.GuiTopLevel; import forge.view.home.ViewQuest; @@ -23,6 +26,7 @@ import forge.view.home.ViewQuest; */ public class ControlQuest { private ViewQuest view; + private QuestEvent event; /** * Controls logic and listeners for quest mode in home screen. @@ -31,8 +35,27 @@ public class ControlQuest { */ public ControlQuest(ViewQuest v0) { this.view = v0; - updateDeckList(); + + view.getPetComboBox().addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent actionEvent) { + if (view.getPetComboBox().getSelectedIndex() > 0) { + view.getQuestData().getPetManager().setSelectedPet( + (String) view.getPetComboBox().getSelectedItem()); + } else { + view.getQuestData().getPetManager().setSelectedPet(null); + } + } + }); + + view.getPlantCheckBox().addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent actionEvent) { + view.getQuestData().getPetManager() + .setUsePlant(view.getPlantCheckBox().isSelected()); + } + }); } /** @return ViewQuest */ @@ -82,20 +105,11 @@ public class ControlQuest { } /** */ - // Since QuestBazaarPanel is not in a JFrame for some reason, one - // must be created here. Later, this will be integrated into the - // top level UI. Doublestrike 11-12-11. public void showBazaar() { - QuestFrame f = new QuestFrame(); - f.getContentPane().add(new QuestBazaarPanel(f)); - f.setVisible(true); + GuiTopLevel g = ((GuiTopLevel) AllZone.getDisplay()); - f.addWindowListener(new WindowAdapter() { - @Override - public void windowClosed(WindowEvent e) { - AllZone.getQuestData().saveData(); - } - }); + g.getController().changeState(ControlAllUI.QUEST_BAZAAR); + g.validate(); } // card shop button /** @@ -103,9 +117,10 @@ public class ControlQuest { */ public void newQuest() { int difficulty = 0; - QuestData questData = AllZone.getQuestData(); + QuestData questData = new QuestData(); - final String mode = view.getRadFantasy().isSelected() ? forge.quest.data.QuestData.FANTASY + final String mode = view.getRadFantasy().isSelected() + ? forge.quest.data.QuestData.FANTASY : forge.quest.data.QuestData.REALISTIC; if (view.getRadEasy().isSelected()) { @@ -118,8 +133,8 @@ public class ControlQuest { difficulty = 3; } else { JOptionPane.showMessageDialog(null, - "Please select a difficulty.", - "New Quest: Difficulty?", JOptionPane.ERROR_MESSAGE); + "This should not be happening!", + "New Quest: Difficulty Bug!?", JOptionPane.ERROR_MESSAGE); return; } @@ -147,21 +162,83 @@ public class ControlQuest { /** */ public void start() { - QuestData questData = AllZone.getQuestData(); + if (view.getLstDeckChooser().getSelectedIndex() == -1) { + JOptionPane.showMessageDialog(null, + "A mysterious wall blocks your way." + + "\n\rAn unseen sepulchral voice booms:" + + "\n\r\"Entrance Forbidden Without A Deck\"", + "No deck", JOptionPane.ERROR_MESSAGE); + return; + } - Constant.Runtime.HUMAN_DECK[0] = questData.getDeck((String) view.getLstDeckChooser().getSelectedValue()); - Constant.Runtime.COMPUTER_DECK[0] = view.getSelectedOpponent().getEvent().getEventDeck(); + event = view.getSelectedOpponent().getEvent(); + AllZone.setQuestEvent(event); + final QuestItemZeppelin zeppelin = (QuestItemZeppelin) view.getQuestData().getInventory().getItem("Zeppelin"); + zeppelin.setZeppelinUsed(false); + view.getQuestData().randomizeOpponents(); - AllZone.setQuestEvent(view.getSelectedOpponent().getEvent()); + String deckname = (String) view.getLstDeckChooser().getSelectedValue(); + Constant.Runtime.HUMAN_DECK[0] = view.getQuestData().getDeck(deckname); + Constant.Runtime.COMPUTER_DECK[0] = event.getEventDeck(); + Deck humanDeck = view.getQuestData().getDeck(deckname); + + Constant.Runtime.HUMAN_DECK[0] = humanDeck; + + Constant.Quest.OPP_ICON_NAME[0] = event.getIcon(); GuiTopLevel g = (GuiTopLevel) AllZone.getDisplay(); g.getController().changeState(1); g.getController().getMatchController().initMatch(); + AllZone.getMatchState().reset(); + if (event.getEventType().equals("challenge")) { + this.setupChallenge(humanDeck); + } else { + this.setupDuel(humanDeck); + } + + view.getQuestData().saveData(); + } + + /** + *

+ * setupDuel. + *

+ * + * @param humanDeck + * a {@link forge.deck.Deck} object. + */ + final void setupDuel(final Deck humanDeck) { + final Deck computer = event.getEventDeck(); + Constant.Runtime.COMPUTER_DECK[0] = computer; + AllZone.getGameAction().newGame( Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0], - QuestUtil.getHumanStartingCards(questData), - QuestUtil.getComputerStartingCards(questData), - questData.getLife(), 20, null); + QuestUtil.getHumanStartingCards(view.getQuestData()), + QuestUtil.getComputerStartingCards(view.getQuestData()), + view.getQuestData().getLife(), 20, null); + } + + /** + *

+ * setupChallenge. + *

+ * + * @param humanDeck + * a {@link forge.deck.Deck} object. + */ + private void setupChallenge(final Deck humanDeck) { + int extraLife = 0; + + if (view.getQuestData().getInventory().getItemLevel("Gear") == 2) { + extraLife = 3; + } + + AllZone.getGameAction().newGame( + Constant.Runtime.HUMAN_DECK[0], Constant.Runtime.COMPUTER_DECK[0], + QuestUtil.getHumanStartingCards(view.getQuestData(), event), + QuestUtil.getHumanStartingCards(view.getQuestData(), event), + view.getQuestData().getLife() + extraLife, ((QuestChallenge) event).getAILife(), event); + } } diff --git a/src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java b/src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java index 80f1a3c8ef0..a356e39f7d1 100644 --- a/src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java +++ b/src/main/java/forge/quest/gui/bazaar/QuestBazaarPanel.java @@ -31,9 +31,13 @@ import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JToggleButton; +import forge.AllZone; +import forge.Constant; +import forge.control.ControlAllUI; import forge.quest.data.bazaar.QuestStallManager; import forge.quest.gui.QuestAbstractPanel; import forge.quest.gui.QuestFrame; +import forge.view.GuiTopLevel; /** *

@@ -142,7 +146,14 @@ public class QuestBazaarPanel extends QuestAbstractPanel { quitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - QuestBazaarPanel.this.getMainFrame().showMainPane(); + if (Constant.Runtime.OLDGUI[0]) { + QuestBazaarPanel.this.getMainFrame().showMainPane(); + } + else { + ControlAllUI g = ((GuiTopLevel) AllZone.getDisplay()).getController(); + g.changeState(ControlAllUI.HOME_SCREEN); + g.getHomeView().showQuestMenu(); + } } }); diff --git a/src/main/java/forge/view/home/HomeTopLevel.java b/src/main/java/forge/view/home/HomeTopLevel.java index d40d53f8e13..8361f428fb7 100644 --- a/src/main/java/forge/view/home/HomeTopLevel.java +++ b/src/main/java/forge/view/home/HomeTopLevel.java @@ -87,39 +87,39 @@ public class HomeTopLevel extends FPanel { pnlContent.setBackground(skin.getColor("zebra")); pnlContent.setLayout(new MigLayout("insets 0, gap 0")); - btnDraft = new FButton(); - btnDraft.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { draft(); } - }); - btnDraft.setText("Draft (Hard)"); - btnConstructed = new FButton(); btnConstructed.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { constructed(); } + public void actionPerformed(ActionEvent arg0) { showConstructedMenu(); } }); btnConstructed.setText("Constructed (Easy)"); btnSealed = new FButton(); btnSealed.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { sealed(); } + public void actionPerformed(ActionEvent arg0) { showSealedMenu(); } }); btnSealed.setText("Sealed (Medium)"); + btnDraft = new FButton(); + btnDraft.setAction(new AbstractAction() { + public void actionPerformed(ActionEvent arg0) { showDraftMenu(); } + }); + btnDraft.setText("Draft (Hard)"); + btnQuest = new FButton(); btnQuest.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { quest(); } + public void actionPerformed(ActionEvent arg0) { showQuestMenu(); } }); btnQuest.setText("Quest"); btnSettings = new FButton(); btnSettings.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { settings(); } + public void actionPerformed(ActionEvent arg0) { showSettingsMenu(); } }); btnSettings.setText("Settings"); btnUtilities = new FButton(); btnUtilities.setAction(new AbstractAction() { - public void actionPerformed(ActionEvent arg0) { utilities(); } + public void actionPerformed(ActionEvent arg0) { showUtilitiesMenu(); } }); btnUtilities.setText("Utilities"); @@ -148,11 +148,12 @@ public class HomeTopLevel extends FPanel { pnlMenu.add(btnEditor, constraints); pnlMenu.add(btnExit, constraints); - // Open "constructed" screen on first run. - constructed(); + // Open "constructed" menu on first run. + showConstructedMenu(); } - private void constructed() { + /** Opens menu for constructed mode. */ + public void showConstructedMenu() { clearToggles(); btnConstructed.setToggled(true); pnlContent.removeAll(); @@ -161,7 +162,8 @@ public class HomeTopLevel extends FPanel { pnlContent.repaint(); } - private void draft() { + /** Opens menu for draft mode. */ + public void showDraftMenu() { clearToggles(); btnDraft.setToggled(true); pnlContent.removeAll(); @@ -170,7 +172,8 @@ public class HomeTopLevel extends FPanel { pnlContent.repaint(); } - private void sealed() { + /** Opens menu for sealed mode. */ + public void showSealedMenu() { clearToggles(); btnSealed.setToggled(true); pnlContent.removeAll(); @@ -179,7 +182,8 @@ public class HomeTopLevel extends FPanel { pnlContent.repaint(); } - private void quest() { + /** Opens menu for quest mode. */ + public void showQuestMenu() { clearToggles(); btnQuest.setToggled(true); pnlContent.removeAll(); @@ -188,7 +192,8 @@ public class HomeTopLevel extends FPanel { pnlContent.repaint(); } - private void settings() { + /** Opens menu for settings. */ + public void showSettingsMenu() { clearToggles(); btnSettings.setToggled(true); pnlContent.removeAll(); @@ -197,7 +202,8 @@ public class HomeTopLevel extends FPanel { pnlContent.repaint(); } - private void utilities() { + /** Opens menu for utilities. */ + public void showUtilitiesMenu() { clearToggles(); btnUtilities.setToggled(true); pnlContent.removeAll(); @@ -242,6 +248,6 @@ public class HomeTopLevel extends FPanel { /** */ public void resetQuest() { quest = new ViewQuest(this); - quest(); + showQuestMenu(); } } diff --git a/src/main/java/forge/view/home/ViewQuest.java b/src/main/java/forge/view/home/ViewQuest.java index bc22c447db5..b65e0fe6511 100644 --- a/src/main/java/forge/view/home/ViewQuest.java +++ b/src/main/java/forge/view/home/ViewQuest.java @@ -1,22 +1,24 @@ package forge.view.home; -import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.util.List; +import java.util.Set; import javax.swing.AbstractAction; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; +import javax.swing.JTextArea; import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import javax.swing.border.MatteBorder; @@ -25,12 +27,12 @@ import net.miginfocom.swing.MigLayout; import forge.AllZone; import forge.control.home.ControlQuest; import forge.gui.GuiUtils; -import forge.gui.MultiLineLabel; -import forge.gui.MultiLineLabelUI; import forge.properties.ForgeProps; import forge.properties.NewConstants; import forge.quest.data.QuestData; import forge.quest.data.QuestDataIO; +import forge.quest.data.item.QuestItemZeppelin; +import forge.quest.data.pet.QuestPetAbstract; import forge.quest.gui.main.QuestChallenge; import forge.quest.gui.main.QuestDuel; import forge.quest.gui.main.QuestEvent; @@ -52,7 +54,9 @@ public class ViewQuest extends JScrollPane { private JList lstDeckChooser; private ControlQuest control; private JRadioButton radEasy, radMedium, radHard, radExpert, radFantasy, radClassic; - private JCheckBox cbStandardStart; + private JCheckBox cbStandardStart, cbPlant, cbZep; + private JComboBox cbxPet; + private JLabel lblPlant, lblPet, lblZep; /** * Populates Swing components of Quest mode in home screen. @@ -62,24 +66,33 @@ public class ViewQuest extends JScrollPane { public ViewQuest(HomeTopLevel v0) { // Basic init stuff super(VERTICAL_SCROLLBAR_ALWAYS, HORIZONTAL_SCROLLBAR_AS_NEEDED); - AllZone.setQuestData(QuestDataIO.loadData()); this.setOpaque(false); this.setBorder(null); parentView = v0; skin = AllZone.getSkin(); + AllZone.setQuestData(QuestDataIO.loadData()); questData = AllZone.getQuestData(); // Panel is dropped into scroll pane for resize safety. viewport = new JPanel(); viewport.setOpaque(false); - viewport.setLayout(new MigLayout("insets 0, gap 0, wrap")); + viewport.setLayout(new MigLayout("insets 0, gap 0, wrap 2")); this.getViewport().setOpaque(false); - JLabel lblContinue = new JLabel(questData.getRank()); + JLabel lblContinue = new JLabel(" " + questData.getRank()); + lblContinue.setOpaque(true); lblContinue.setBorder(new MatteBorder(0, 0, 1, 0, skin.getColor("borders"))); lblContinue.setForeground(skin.getColor("text")); + lblContinue.setBackground(skin.getColor("theme").darker()); lblContinue.setFont(skin.getFont1().deriveFont(Font.BOLD, 20)); - viewport.add(lblContinue, "w 90%!, gap 5% 0 2% 0"); + viewport.add(lblContinue, "w 90%!, h 50px!, gap 5% 0 2% 0, span 2"); + + JLabel lblStats = new JLabel("Wins: " + questData.getWin() + + " / Losses: " + questData.getLost()); + lblStats.setForeground(skin.getColor("text")); + lblStats.setFont(skin.getFont1().deriveFont(Font.BOLD, 17)); + lblStats.setHorizontalAlignment(SwingConstants.CENTER); + viewport.add(lblStats, "h 35px!, ax center, span 2"); // Quest events populateQuestEvents(); @@ -88,19 +101,7 @@ public class ViewQuest extends JScrollPane { populateQuestOptions(); // Start button - StartButton btnStart = new StartButton(parentView); - - JPanel pnlButtonContainer = new JPanel(); - pnlButtonContainer.setOpaque(false); - - pnlButtonContainer.setLayout(new BorderLayout()); - pnlButtonContainer.add(btnStart, SwingConstants.CENTER); - viewport.add(pnlButtonContainer, "w 100%!, gapbottom 2%, gaptop 2%"); - - btnStart.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { control.start(); } - }); + populateStartArea(); // New Quest populateNewQuest(); @@ -144,18 +145,29 @@ public class ViewQuest extends JScrollPane { challengesContainer.add(temp, "w 100%, h 70px:70px, gapbottom 5px"); } + if (challenges.size() == 0) { + JLabel lblTeaser = new JLabel("(Next challenge available in " + + nextChallengeInWins() + " wins.)"); + lblTeaser.setHorizontalAlignment(SwingConstants.CENTER); + lblTeaser.setForeground(skin.getColor("text")); + lblTeaser.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); + challengesContainer.add(lblTeaser, "w 100%!, ax center, ay top"); + } + JLabel lblDuels = new JLabel("Available Duels"); lblDuels.setForeground(skin.getColor("text")); + lblDuels.setHorizontalAlignment(SwingConstants.CENTER); lblDuels.setFont(skin.getFont1().deriveFont(Font.ITALIC, 14)); JLabel lblChallenges = new JLabel("Available Challenges"); lblChallenges.setForeground(skin.getColor("text")); + lblChallenges.setHorizontalAlignment(SwingConstants.CENTER); lblChallenges.setFont(skin.getFont1().deriveFont(Font.ITALIC, 14)); - viewport.add(lblDuels, "w 90%, gapleft 5%, gapbottom 1%, gaptop 1%"); - viewport.add(duelsContainer, " w 90%, gapleft 5%, gapbottom 2%"); - viewport.add(lblChallenges, "w 90%, gapleft 5%, gapbottom 1%"); - viewport.add(challengesContainer, " w 90%, gapleft 5%, gapbottom 2%"); + viewport.add(lblDuels, "w 48%, gap 1% 1% 2% 1%"); + viewport.add(lblChallenges, "w 48%, gap 0 0 2% 1%, wrap"); + viewport.add(duelsContainer, " w 48%, gap 1% 1% 1% 2%, ay top"); + viewport.add(challengesContainer, " w 48%, gap 0 0 1% 2%, wrap"); // Select first event. selectedOpponent = (SelectablePanel) duelsContainer.getComponent(0); @@ -167,6 +179,21 @@ public class ViewQuest extends JScrollPane { JPanel optionsContainer = new JPanel(); optionsContainer.setOpaque(false); optionsContainer.setLayout(new MigLayout("insets 0, gap 0")); + optionsContainer.setBorder(new MatteBorder(0, 0, 1, 0, skin.getColor("borders"))); + + JLabel lblCredits = new JLabel("Credits: " + Long.toString(questData.getCredits())); + lblCredits.setIcon(GuiUtils.getResizedIcon(new ImageIcon("res/pics/icons/CoinStack.png"), 26, 26)); + lblCredits.setForeground(skin.getColor("text")); + lblCredits.setIconTextGap(5); + lblCredits.setHorizontalAlignment(SwingConstants.CENTER); + lblCredits.setFont(skin.getFont1().deriveFont(Font.BOLD, 14)); + + JLabel lblLife = new JLabel("Life: " + Long.toString(questData.getLife())); + lblLife.setIcon(GuiUtils.getResizedIcon(new ImageIcon("res/pics/icons/Life.png"), 26, 26)); + lblLife.setForeground(skin.getColor("text")); + lblLife.setIconTextGap(5); + lblLife.setHorizontalAlignment(SwingConstants.CENTER); + lblLife.setFont(skin.getFont1().deriveFont(Font.BOLD, 14)); SubButton btnEditor = new SubButton(""); btnEditor.setAction(new AbstractAction() { @@ -195,38 +222,112 @@ public class ViewQuest extends JScrollPane { }); btnBazaar.setText("Bazaar"); - OptionsCheckBox cbPet = new OptionsCheckBox("Summon Pet"); - OptionsCheckBox cbWall = new OptionsCheckBox("Summon Wall"); - OptionsCheckBox cbZep = new OptionsCheckBox("Launch Zeppelin"); - lstDeckChooser = new JList(); - optionsContainer.add(btnEditor, "w 30%, h 30px!, gapleft 5%, gapright 5%, gapbottom 5px"); - optionsContainer.add(cbPet, "w 25%, h 30px!, ax center"); - optionsContainer.add(btnCardShop, "w 25%, h 30px!, gapleft 5%, wrap"); + optionsContainer.add(btnEditor, "w 35%, h 30px!, gap 10% 5% 10px 10px"); + optionsContainer.add(lblCredits, "w 35%!, h 30px!, wrap"); - optionsContainer.add(new JScrollPane(lstDeckChooser), "w 30%, h 60px!, gapleft 5%, gapright 5%, span 1 2"); - optionsContainer.add(cbWall, "w 25%, h 30px!, ax center, gapbottom 5px, wrap"); + optionsContainer.add(new JScrollPane(lstDeckChooser), "w 35%, h 110px!, gap 10% 5% 0 10px, span 1 3"); + optionsContainer.add(lblLife, "w 35%, h 30px!, gap 0 0 0 10px, wrap"); - optionsContainer.add(cbZep, "w 25%, h 30px!"); - optionsContainer.add(btnBazaar, "w 25%, h 30px!, gapleft 5%, wrap"); + optionsContainer.add(btnCardShop, "w 35%, h 30px!, gap 0 0 0 10px, wrap"); + optionsContainer.add(btnBazaar, "w 35%, h 30px!, gap 0 0 0 10px, wrap"); if (!questData.isFantasy()) { - cbPet.setVisible(false); - cbWall.setVisible(false); - cbZep.setVisible(false); + lblLife.setVisible(false); btnBazaar.setVisible(false); } - viewport.add(optionsContainer, "w 90%, gap 5% 0 1% 1%"); + viewport.add(optionsContainer, "w 90%, gap 5% 0 1% 1%, span 2 1"); + } + + private void populateStartArea() { + JPanel pnlButtonContainer = new JPanel(); + pnlButtonContainer.setOpaque(false); + pnlButtonContainer.setLayout(new MigLayout("insets 0, gap 0, wrap 2, ax center, hidemode 3")); + + cbxPet = new JComboBox(); + cbxPet.setFont(skin.getFont1().deriveFont(Font.PLAIN, 14)); + + cbPlant = new OptionsCheckBox("Summon Wall"); + cbZep = new OptionsCheckBox("Launch Zeppelin"); + + lblPet = new JLabel(GuiUtils.getResizedIcon( + new ImageIcon("res/pics/icons/PetIcon.png"), 30, 30)); + lblPlant = new JLabel(GuiUtils.getResizedIcon( + new ImageIcon("res/pics/icons/PlantIcon.png"), 30, 30)); + lblZep = new JLabel(GuiUtils.getResizedIcon( + new ImageIcon("res/pics/icons/ZeppelinIcon.png"), 30, 30)); + + StartButton btnStart = new StartButton(parentView); + btnStart.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { control.start(); } + }); + + pnlButtonContainer.add(lblPet, "w 30px!, h 30px!, gapright 10px"); + pnlButtonContainer.add(cbxPet, "w 30%!, h 30px!, gapbottom 10px, wrap"); + + pnlButtonContainer.add(lblPlant, "w 30px!, h 30px!, gapright 10px"); + pnlButtonContainer.add(cbPlant, "w 30%!, h 30px!, gapbottom 10px, wrap"); + + pnlButtonContainer.add(lblZep, "w 30px!, h 30px!, gapright 10px"); + pnlButtonContainer.add(cbZep, "w 30%!, h 30px!, gapbottom 10px, wrap"); + + pnlButtonContainer.add(btnStart, "span 2 1"); + + viewport.add(pnlButtonContainer, "w 100%!, gapbottom 2%, gaptop 2%, span 2"); + + if (this.questData.getMode().equals(QuestData.FANTASY)) { + final Set petList = this.questData.getPetManager().getAvailablePetNames(); + final QuestPetAbstract pet = this.questData.getPetManager().getSelectedPet(); + + // Pet list visibility + if (petList.size() > 0) { + cbxPet.setEnabled(true); + cbxPet.addItem("Don't summon a pet"); + for (final String aPetList : petList) { + cbxPet.addItem(aPetList); + } + + if (pet != null) { cbxPet.setSelectedItem(pet.getName()); } + } else { + cbxPet.setVisible(false); + lblPet.setVisible(false); + } + + // Plant visiblity + if (this.questData.getPetManager().getPlant().getLevel() == 0) { + cbPlant.setVisible(false); + lblPlant.setVisible(false); + } + else { + cbPlant.setSelected(this.questData.getPetManager().shouldPlantBeUsed()); + } + + // Zeppelin visibility + final QuestItemZeppelin zeppelin = (QuestItemZeppelin) this.questData.getInventory().getItem("Zeppelin"); + cbZep.setVisible(zeppelin.hasBeenUsed()); + lblZep.setVisible(zeppelin.hasBeenUsed()); + } + else { + cbxPet.setVisible(false); + lblPet.setVisible(false); + cbPlant.setVisible(false); + lblPlant.setVisible(false); + cbZep.setVisible(false); + lblZep.setVisible(false); + } } private void populateNewQuest() { - JLabel lblNew = new JLabel("Embark on a new Quest"); + JLabel lblNew = new JLabel(" Embark on a new Quest"); lblNew.setForeground(skin.getColor("text")); + lblNew.setBackground(skin.getColor("theme").darker()); + lblNew.setOpaque(true); lblNew.setBorder(new MatteBorder(1, 0, 1, 0, skin.getColor("borders"))); lblNew.setFont(skin.getFont1().deriveFont(Font.BOLD, 16)); - viewport.add(lblNew, "w 90%!, h 50px!, gap 5% 5% 2%"); + viewport.add(lblNew, "w 90%!, h 50px!, gap 5% 5% 2%, span 2"); JLabel lblNotes = new JLabel("" + "Start a new Quest will delete your current player decks, credits and win loss record." @@ -234,7 +335,7 @@ public class ViewQuest extends JScrollPane { + ""); lblNotes.setFont(skin.getFont1().deriveFont(Font.PLAIN, 14)); lblNotes.setForeground(skin.getColor("text")); - viewport.add(lblNotes, "w 90%, gapleft 5%"); + viewport.add(lblNotes, "w 90%, gapleft 5%, span 2"); radEasy = new OptionsRadio("Easy - 50 games"); radMedium = new OptionsRadio("Medium - 100 games"); @@ -283,7 +384,7 @@ public class ViewQuest extends JScrollPane { optionsContainer.add(btnEmbark, "w 40%!, h 30px!, gapleft 30%, gaptop 3%, span 3 1"); - viewport.add(optionsContainer, "w 100%!, gaptop 2%"); + viewport.add(optionsContainer, "w 100%!, gaptop 2%, span 2"); } //========= CUSTOM CLASSES @@ -293,7 +394,21 @@ public class ViewQuest extends JScrollPane { public OptionsRadio(String txt0) { super(); setText(txt0); + setForeground(skin.getColor("text")); + setBackground(skin.getColor("hover")); setOpaque(false); + + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + setOpaque(true); + } + + @Override + public void mouseExited(MouseEvent e) { + setOpaque(false); + } + }); } } @@ -302,7 +417,21 @@ public class ViewQuest extends JScrollPane { public OptionsCheckBox(String txt0) { super(); setText(txt0); + setForeground(skin.getColor("text")); + setBackground(skin.getColor("hover")); setOpaque(false); + + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + setOpaque(true); + } + + @Override + public void mouseExited(MouseEvent e) { + setOpaque(false); + } + }); } } @@ -316,8 +445,42 @@ public class ViewQuest extends JScrollPane { setBorder(new LineBorder(skin.getColor("borders"), 1)); setBackground(skin.getColor("inactive")); setLayout(new MigLayout("insets 0, gap 0")); - this.event = e0; + + final File base = ForgeProps.getFile(NewConstants.IMAGE_ICON); + File file = new File(base, event.getIcon()); + + if (!file.exists()) { + file = new File(base, "Unknown.jpg"); + } + + JLabel lblIcon = new JLabel(GuiUtils.getResizedIcon(new ImageIcon(file.toString()), 60, 60)); + lblIcon.setForeground(skin.getColor("text")); + this.add(lblIcon, "h 60px!, w 60px!, gap 5px 5px 5px 5px, span 1 2"); + + // Name + JLabel lblName = new JLabel(event.getTitle() + ": " + event.getDifficulty()); + lblName.setFont(skin.getFont1().deriveFont(Font.BOLD, 17)); + lblName.setForeground(skin.getColor("text")); + this.add(lblName, "h 20px!, gap 1% 1% 5px 5px, wrap"); + + // Description + JTextArea tarDesc = new JTextArea(); + tarDesc.setText(event.getDescription()); + tarDesc.setFont(skin.getFont1().deriveFont(Font.ITALIC, 12)); + tarDesc.setForeground(skin.getColor("text")); + tarDesc.setOpaque(false); + tarDesc.setWrapStyleWord(true); + tarDesc.setLineWrap(true); + tarDesc.setFocusable(false); + tarDesc.setEditable(false); + this.add(tarDesc, " h 35px!, w 75%!, gap 1% 0 0 5px"); + + this.setToolTipText("" + event.getTitle() + + ": " + event.getDifficulty() + + "
" + event.getDescription() + + ""); + this.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { @@ -345,29 +508,7 @@ public class ViewQuest extends JScrollPane { } } }); - - final File base = ForgeProps.getFile(NewConstants.IMAGE_ICON); - File file = new File(base, event.getIcon()); - - if (!file.exists()) { - file = new File(base, "Unknown.jpg"); - } - - JLabel lblIcon = new JLabel(GuiUtils.getResizedIcon(new ImageIcon(file.toString()), 60, 60)); - lblIcon.setForeground(skin.getColor("text")); - this.add(lblIcon, "h 60px!, w 60px!, gap 5px 5px 5px 5px, span 1 2"); - - JLabel lblName = new JLabel(event.getTitle() + ": " + event.getDifficulty()); - lblName.setFont(skin.getFont1().deriveFont(Font.BOLD, 17)); - lblName.setForeground(skin.getColor("text")); - this.add(lblName, "h 20px!, gap 1% 1% 5px 5px, wrap"); - - MultiLineLabel lblDesc = new MultiLineLabel(event.getDescription()); - lblDesc.setFont(skin.getFont1().deriveFont(Font.PLAIN, 12)); - lblDesc.setForeground(skin.getColor("text")); - lblDesc.setUI(MultiLineLabelUI.getLabelUI()); - this.add(lblDesc, " h 35px!, w 80%!, gap 1% 0 0 5px"); - } + } /** @return QuestEvent */ public QuestEvent getEvent() { @@ -375,6 +516,38 @@ public class ViewQuest extends JScrollPane { } } + /** + *

+ * nextChallengeInWins. + *

+ * + * @return a int. + */ + private int nextChallengeInWins() { + final QuestData questData = AllZone.getQuestData(); + + // Number of wins was 25, lowereing the number to 20 to help short term + // questers. + if (questData.getWin() < 20) { + return 20 - questData.getWin(); + } + + // The int mul has been lowered by one, should face special opps more + // frequently. + final int challengesPlayed = questData.getChallengesPlayed(); + int mul = 5; + + if (questData.getInventory().hasItem("Zeppelin")) { + mul = 3; + } else if (questData.getInventory().hasItem("Map")) { + mul = 4; + } + + final int delta = (challengesPlayed * mul) - questData.getWin(); + + return (delta > 0) ? delta : 0; + } + //========= RETRIEVAL FUNCTIONS /** @return JList */ @@ -431,4 +604,19 @@ public class ViewQuest extends JScrollPane { public ControlQuest getController() { return control; } + + /** @return JComboBox */ + public JComboBox getPetComboBox() { + return cbxPet; + } + + /** @return JCheckBox */ + public JCheckBox getPlantCheckBox() { + return cbPlant; + } + + /** @return QuestData instance currently in use in this view */ + public QuestData getQuestData() { + return questData; + } }