Current progress on Quest submenu.

This commit is contained in:
Doublestrike
2011-12-13 12:40:19 +00:00
parent 1ac8d15dd7
commit 7b1fd598d2
10 changed files with 436 additions and 189 deletions

4
.gitattributes vendored
View File

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

BIN
res/pics/icons/PetIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

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

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
package forge.control;
import javax.swing.JPanel;
/**
* <p>
* ControlEditorUI
* </p>
* Top-level controller for deck editor.
*
*/
@SuppressWarnings("serial")
public class ControlEditorUI extends JPanel {
/**
* <p>
* ControlEditorUI
* </p>
* Top-level controller for deck editor.
*
*/
public ControlEditorUI() {
}
}

View File

@@ -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 <http://www.gnu.org/licenses/>.
*/
package forge.control;
/**
* TODO: Write javadoc for this type.
*
*/
public class ControlHomeUI {
}

View File

@@ -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();
}
/**
* <p>
* setupDuel.
* </p>
*
* @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);
}
/**
* <p>
* setupChallenge.
* </p>
*
* @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);
}
}

View File

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

View File

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

View File

@@ -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<String> 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("<html>"
+ "Start a new Quest will delete your current player decks, credits and win loss record."
@@ -234,7 +335,7 @@ public class ViewQuest extends JScrollPane {
+ "</html>");
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("<html>" + event.getTitle()
+ ": " + event.getDifficulty()
+ "<br>" + event.getDescription()
+ "</html>");
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 {
}
}
/**
* <p>
* nextChallengeInWins.
* </p>
*
* @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;
}
}