mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Merge remote-tracking branch 'upstream/master' into display_localization_cardname
This commit is contained in:
@@ -47,7 +47,7 @@ import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.FSkin.SkinnedPanel;
|
||||
|
||||
import forge.util.Localizer;
|
||||
/**
|
||||
* The class CardDetailPanel. Shows the details of a card.
|
||||
*
|
||||
@@ -77,10 +77,10 @@ public class CardDetailPanel extends SkinnedPanel {
|
||||
setLayout(null);
|
||||
setOpaque(false);
|
||||
|
||||
nameCostLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip("Card Name and Cost").build();
|
||||
typeLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip("Card Type").build();
|
||||
idLabel = new FLabel.Builder().fontAlign(SwingConstants.LEFT).tooltip("Card ID").build();
|
||||
powerToughnessLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip("Card P/T or Loyalty").build();
|
||||
nameCostLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip(Localizer.getInstance().getMessage("lblCardNameAndCost")).build();
|
||||
typeLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip(Localizer.getInstance().getMessage("lblCardType")).build();
|
||||
idLabel = new FLabel.Builder().fontAlign(SwingConstants.LEFT).tooltip(Localizer.getInstance().getMessage("lblCardID")).build();
|
||||
powerToughnessLabel = new FLabel.Builder().fontAlign(SwingConstants.CENTER).tooltip(Localizer.getInstance().getMessage("lblCardPTOrLoyalty")).build();
|
||||
setInfoLabel = new JLabel();
|
||||
setInfoLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.view.FDialog;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
@@ -68,7 +70,7 @@ public class CardListChooser extends FDialog {
|
||||
|
||||
this.addWindowFocusListener(new CardListFocuser());
|
||||
|
||||
FButton btnOK = new FButton("Select Card");
|
||||
FButton btnOK = new FButton(Localizer.getInstance().getMessage("lblSelectCard"));
|
||||
btnOK.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
@@ -88,7 +90,11 @@ public class CardListChooser extends FDialog {
|
||||
|
||||
@Override
|
||||
public void windowClosing(final WindowEvent e) {
|
||||
if (FOptionPane.showConfirmDialog("Are you sure you want to pick '" + jList.getSelectedValue().getName() + "'?", "Select this card?", false)) {
|
||||
//CardTranslation.getTranslatedName
|
||||
if (FOptionPane.showConfirmDialog(
|
||||
Localizer.getInstance().getMessage("lblAreYouSureWantPickCard", CardTranslation.getTranslatedName(jList.getSelectedValue().getName())),
|
||||
Localizer.getInstance().getMessage("lblSelectThisCardConfirm"), false)
|
||||
) {
|
||||
dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import forge.toolbox.LayoutHelper;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.ItemPool;
|
||||
import forge.util.ReflectionUtil;
|
||||
import forge.util.Localizer;
|
||||
|
||||
/**
|
||||
* ItemManager.
|
||||
@@ -96,7 +97,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
||||
private static final SkinIcon SEARCH_ICON = FSkin.getIcon(FSkinProp.ICO_SEARCH).resize(20, 20);
|
||||
private final FLabel btnFilters = new FLabel.ButtonBuilder()
|
||||
.icon(SEARCH_ICON).iconScaleAuto(false)
|
||||
.tooltip("Click to configure filters")
|
||||
.tooltip(Localizer.getInstance().getMessage("lblClickToconfigureFilters"))
|
||||
.reactOnMouseDown()
|
||||
.build();
|
||||
|
||||
@@ -106,7 +107,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
||||
.build();
|
||||
|
||||
private final FLabel lblRatio = new FLabel.Builder()
|
||||
.tooltip("Number of cards shown / Total available cards")
|
||||
.tooltip(Localizer.getInstance().getMessage("lblShownOfTotalCards"))
|
||||
.fontAlign(SwingConstants.LEFT)
|
||||
.fontSize(12)
|
||||
.build();
|
||||
@@ -122,7 +123,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
||||
.hoverable()
|
||||
.selectable(true)
|
||||
.icon(VIEW_OPTIONS_ICON).iconScaleAuto(false)
|
||||
.tooltip("Toggle to show/hide options for current view")
|
||||
.tooltip(Localizer.getInstance().getMessage("lblToggleShowOrHideOptionsForCurrentView"))
|
||||
.build();
|
||||
|
||||
private final List<ItemView<T>> views = new ArrayList<>();
|
||||
@@ -246,12 +247,12 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
||||
//setup command for btnFilters
|
||||
final UiCommand cmdBuildFilterMenu = new UiCommand() {
|
||||
@Override public void run() {
|
||||
final JPopupMenu menu = new JPopupMenu("FilterMenu");
|
||||
final JPopupMenu menu = new JPopupMenu(Localizer.getInstance().getMessage("lblFilterMenu"));
|
||||
if (hideFilters) {
|
||||
GuiUtils.addMenuItem(menu, "Show Filters", null, cmdHideFilters);
|
||||
GuiUtils.addMenuItem(menu, Localizer.getInstance().getMessage("lblShowFilters"), null, cmdHideFilters);
|
||||
} else {
|
||||
final JMenu addMenu = GuiUtils.createMenu("Add/Edit Filter");
|
||||
GuiUtils.addMenuItem(addMenu, "Current text search",
|
||||
final JMenu addMenu = GuiUtils.createMenu(Localizer.getInstance().getMessage("lblAddOrEditFilter"));
|
||||
GuiUtils.addMenuItem(addMenu, Localizer.getInstance().getMessage("lblCurrentTextSearch"),
|
||||
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
|
||||
cmdAddCurrentSearch, !mainSearchFilter.isEmpty());
|
||||
if (config != ItemManagerConfig.STRING_ONLY) {
|
||||
@@ -259,8 +260,8 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
|
||||
}
|
||||
menu.add(addMenu);
|
||||
GuiUtils.addSeparator(menu);
|
||||
GuiUtils.addMenuItem(menu, "Reset Filters", null, cmdResetFilters);
|
||||
GuiUtils.addMenuItem(menu, "Hide Filters", null, cmdHideFilters);
|
||||
GuiUtils.addMenuItem(menu, Localizer.getInstance().getMessage("lblResetFilters"), null, cmdResetFilters);
|
||||
GuiUtils.addMenuItem(menu, Localizer.getInstance().getMessage("lblHideFilters"), null, cmdHideFilters);
|
||||
}
|
||||
menu.show(btnFilters, 0, btnFilters.getHeight());
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import forge.screens.deckeditor.controllers.DeckController;
|
||||
import forge.screens.deckeditor.views.VAllDecks;
|
||||
import forge.screens.deckeditor.views.VCurrentDeck;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -35,23 +36,23 @@ public class SEditorIO {
|
||||
|
||||
// Warn if no name
|
||||
if (name == null || name.isEmpty()) {
|
||||
FOptionPane.showMessageDialog("Please name your deck using the 'Title' box.",
|
||||
"Save Error!", FOptionPane.ERROR_ICON);
|
||||
FOptionPane.showMessageDialog(Localizer.getInstance().getMessage("lblPleaseTitleBoxNameYourDeck"),
|
||||
Localizer.getInstance().getMessage("lblSaveErrorWarning"), FOptionPane.ERROR_ICON);
|
||||
return false;
|
||||
}
|
||||
// Confirm if overwrite
|
||||
else if (controller.fileExists(name)) {
|
||||
if (!StringUtils.equals(name, controller.getModelName())) { // prompt only if name was changed
|
||||
performSave = FOptionPane.showConfirmDialog(
|
||||
"There is already a deck named '" + name + "'. Overwrite?",
|
||||
"Overwrite Deck?");
|
||||
Localizer.getInstance().getMessage("lblAlreadyDeckName") + name + Localizer.getInstance().getMessage("lblOverwriteConfirm"),
|
||||
Localizer.getInstance().getMessage("lblOverwriteDeck"));
|
||||
} else {
|
||||
performSave = true;
|
||||
}
|
||||
}
|
||||
// Confirm if a new deck will be created
|
||||
else if (FOptionPane.showConfirmDialog("This will create a new deck named '" +
|
||||
name + "'. Continue?", "Create Deck?")) {
|
||||
else if (FOptionPane.showConfirmDialog(Localizer.getInstance().getMessage("lblThisWillCreateNewDeckNameIs", name),
|
||||
Localizer.getInstance().getMessage("lblCreateDeckConfirm"))) {
|
||||
performSave = true;
|
||||
}
|
||||
|
||||
@@ -72,7 +73,11 @@ public class SEditorIO {
|
||||
return true;
|
||||
}
|
||||
|
||||
private final static ImmutableList<String> confirmSaveOptions = ImmutableList.of("Save", "Don't Save", "Cancel");
|
||||
private final static ImmutableList<String> confirmSaveOptions = ImmutableList.of(
|
||||
Localizer.getInstance().getMessage("lblSave"),
|
||||
Localizer.getInstance().getMessage("lblDontSave"),
|
||||
Localizer.getInstance().getMessage("lblCancel")
|
||||
);
|
||||
/**
|
||||
* Prompts to save changes if necessary.
|
||||
*
|
||||
@@ -85,7 +90,7 @@ public class SEditorIO {
|
||||
return false;
|
||||
}
|
||||
|
||||
final int choice = FOptionPane.showOptionDialog("Save changes to current deck?", "Save Changes?",
|
||||
final int choice = FOptionPane.showOptionDialog(Localizer.getInstance().getMessage("lblSaveChangesCurrentDeck"), Localizer.getInstance().getMessage("lblSaveChangesConfirm"),
|
||||
FOptionPane.QUESTION_ICON, confirmSaveOptions);
|
||||
|
||||
if (choice == -1 || choice == 2) { return false; }
|
||||
|
||||
@@ -61,7 +61,7 @@ public enum VSubmenuGauntletBuild implements IVSubmenu<CSubmenuGauntletBuild> {
|
||||
.text(localizer.getMessage("lblDecklist"))
|
||||
.fontSize(12).build();
|
||||
|
||||
private final JLabel lblSave = new FLabel.Builder().text(localizer.getMessage("lblSave"))
|
||||
private final JLabel lblSave = new FLabel.Builder().text(localizer.getMessage("lblChangesNotSave"))
|
||||
.build();
|
||||
|
||||
private final FLabel btnUp = new FLabel.Builder()
|
||||
|
||||
@@ -5,6 +5,7 @@ import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.view.FDialog;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -19,7 +20,7 @@ public class SleeveSelector extends FDialog {
|
||||
private final Map<Integer, FSkin.SkinImage> sleeveMap = FSkin.getSleeves();
|
||||
|
||||
public SleeveSelector(final String playerName, final int currentIndex, final Collection<Integer> usedIndices) {
|
||||
this.setTitle("Select Sleeve for " + playerName);
|
||||
this.setTitle(Localizer.getInstance().getMessage("lblSelectSleevesFroPlayer", playerName));
|
||||
|
||||
final JPanel pnlSleevePics = new JPanel(new WrapLayout());
|
||||
|
||||
|
||||
@@ -17,39 +17,11 @@
|
||||
*/
|
||||
package forge.screens.match;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.KeyStroke;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.event.PopupMenuEvent;
|
||||
import javax.swing.event.PopupMenuListener;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.GuiBase;
|
||||
import forge.ImageCache;
|
||||
import forge.LobbyPlayer;
|
||||
import forge.Singletons;
|
||||
import forge.StaticData;
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.*;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.card.CardStateName;
|
||||
import forge.control.KeyboardShortcuts;
|
||||
@@ -71,51 +43,26 @@ import forge.game.phase.PhaseType;
|
||||
import forge.game.player.DelayedReveal;
|
||||
import forge.game.player.IHasIcon;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.spellability.SpellAbilityView;
|
||||
import forge.game.spellability.StackItemView;
|
||||
import forge.game.spellability.TargetChoices;
|
||||
import forge.game.spellability.*;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.FNetOverlay;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.gui.GuiUtils;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.framework.IVDoc;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
import forge.gui.framework.VEmptyDoc;
|
||||
import forge.gui.*;
|
||||
import forge.gui.framework.*;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.PaperCard;
|
||||
import forge.match.AbstractGuiGame;
|
||||
import forge.menus.IMenuProvider;
|
||||
import forge.model.FModel;
|
||||
import forge.player.PlayerZoneUpdate;
|
||||
import forge.player.PlayerZoneUpdates;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.match.controllers.CAntes;
|
||||
import forge.screens.match.controllers.CCombat;
|
||||
import forge.screens.match.controllers.CDetailPicture;
|
||||
import forge.screens.match.controllers.CDev;
|
||||
import forge.screens.match.controllers.CDock;
|
||||
import forge.screens.match.controllers.CLog;
|
||||
import forge.screens.match.controllers.CPrompt;
|
||||
import forge.screens.match.controllers.CStack;
|
||||
import forge.screens.match.controllers.*;
|
||||
import forge.screens.match.menus.CMatchUIMenus;
|
||||
import forge.screens.match.views.VField;
|
||||
import forge.screens.match.views.VHand;
|
||||
import forge.toolbox.FButton;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.*;
|
||||
import forge.toolbox.FSkin.SkinImage;
|
||||
import forge.toolbox.FTextArea;
|
||||
import forge.toolbox.imaging.FImagePanel;
|
||||
import forge.toolbox.imaging.FImagePanel.AutoSizeImageMode;
|
||||
import forge.toolbox.imaging.FImageUtil;
|
||||
@@ -123,15 +70,26 @@ import forge.toolbox.special.PhaseIndicator;
|
||||
import forge.toolbox.special.PhaseLabel;
|
||||
import forge.trackable.TrackableCollection;
|
||||
import forge.util.ITriggerEvent;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.gui.SOptionPane;
|
||||
import forge.util.Localizer;
|
||||
import forge.view.FView;
|
||||
import forge.view.arcane.CardPanel;
|
||||
import forge.view.arcane.FloatingZone;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.PopupMenuEvent;
|
||||
import javax.swing.event.PopupMenuListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* Constructs instance of match UI controller, used as a single point of
|
||||
* top-level control for child UIs. Tasks targeting the view of individual
|
||||
@@ -459,6 +417,8 @@ public final class CMatchUI
|
||||
|
||||
@Override
|
||||
public Iterable<PlayerZoneUpdate> tempShowZones(final PlayerView controller, final Iterable<PlayerZoneUpdate> zonesToUpdate) {
|
||||
List<PlayerZoneUpdate> updatedPlayerZones = Lists.newArrayList();
|
||||
|
||||
for (final PlayerZoneUpdate update : zonesToUpdate) {
|
||||
final PlayerView player = update.getPlayer();
|
||||
for (final ZoneType zone : update.getZones()) {
|
||||
@@ -467,7 +427,9 @@ public final class CMatchUI
|
||||
break;
|
||||
case Hand: // controller hand always shown
|
||||
if (controller != player) {
|
||||
FloatingZone.show(this,player,zone);
|
||||
if (FloatingZone.show(this,player,zone)) {
|
||||
updatedPlayerZones.add(update);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Library:
|
||||
@@ -475,14 +437,16 @@ public final class CMatchUI
|
||||
case Exile:
|
||||
case Flashback:
|
||||
case Command:
|
||||
FloatingZone.show(this,player,zone);
|
||||
if (FloatingZone.show(this,player,zone)) {
|
||||
updatedPlayerZones.add(update);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return zonesToUpdate; //pfps should return only the newly shown zones
|
||||
return updatedPlayerZones;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1086,21 +1050,30 @@ public final class CMatchUI
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean openZones(final Collection<ZoneType> zones, final Map<PlayerView, Object> players) {
|
||||
if (zones.size() == 1) {
|
||||
switch (zones.iterator().next()) {
|
||||
case Battlefield:
|
||||
case Hand:
|
||||
return true; //don't actually need to open anything, but indicate that zone can be opened
|
||||
default:
|
||||
return false;
|
||||
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) {
|
||||
final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates();
|
||||
for (final PlayerView view : playersWithTargetables.keySet()) {
|
||||
for(final ZoneType zone : zones) {
|
||||
if (zone.equals(ZoneType.Battlefield) || zone.equals(ZoneType.Hand)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (zone.equals(ZoneType.Stack)) {
|
||||
// TODO: Remove this if we have ever have a Stack zone that's displayable for Counters
|
||||
continue;
|
||||
}
|
||||
|
||||
zonesToUpdate.add(new PlayerZoneUpdate(view, zone));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
tempShowZones(controller, zonesToUpdate);
|
||||
return zonesToUpdate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreOldZones(final Map<PlayerView, Object> playersToRestoreZonesFor) {
|
||||
public void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates) {
|
||||
hideZones(playerView, playerZoneUpdates);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -34,6 +34,7 @@ import forge.toolbox.FScrollPanel;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.toolbox.FSkin.SkinnedTextArea;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -54,7 +55,7 @@ public class VStack implements IVDoc<CStack> {
|
||||
|
||||
// Fields used with interface IVDoc
|
||||
private DragCell parentCell;
|
||||
private final DragTab tab = new DragTab("Stack");
|
||||
private final DragTab tab = new DragTab(Localizer.getInstance().getMessage("lblStack"));
|
||||
|
||||
// Top-level containers
|
||||
private final FScrollPanel scroller = new FScrollPanel(new MigLayout("insets 0, gap 0, wrap"), true,
|
||||
@@ -113,7 +114,7 @@ public class VStack implements IVDoc<CStack> {
|
||||
}
|
||||
|
||||
final FCollectionView<StackItemView> items = model.getStack();
|
||||
tab.setText("Stack : " + items.size());
|
||||
tab.setText(Localizer.getInstance().getMessage("lblStack") + " : " + items.size());
|
||||
|
||||
// No need to update the rest unless it's showing
|
||||
if (!parentCell.getSelected().equals(this)) { return; }
|
||||
@@ -191,41 +192,41 @@ public class VStack implements IVDoc<CStack> {
|
||||
if (hoveredItem == null)
|
||||
{
|
||||
// set things up to draw an arc from it...
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
}
|
||||
|
||||
addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseEntered(final MouseEvent e) {
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) {
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
}
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) {
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
}
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(final MouseEvent e) {
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) {
|
||||
if (hoveredItem == StackInstanceTextArea.this) {
|
||||
hoveredItem = null;
|
||||
}
|
||||
}
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.MOUSEOVER) {
|
||||
if (hoveredItem == StackInstanceTextArea.this) {
|
||||
hoveredItem = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(final MouseEvent e) {
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.ON) {
|
||||
if (hoveredItem == StackInstanceTextArea.this) {
|
||||
hoveredItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
}
|
||||
}
|
||||
if (controller.getMatchUI().getCDock().getArcState() == ArcState.ON) {
|
||||
if (hoveredItem == StackInstanceTextArea.this) {
|
||||
hoveredItem = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
hoveredItem = StackInstanceTextArea.this;
|
||||
controller.getMatchUI().setCard(item.getSourceCard());
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -287,7 +288,7 @@ public class VStack implements IVDoc<CStack> {
|
||||
private Integer triggerID = 0;
|
||||
|
||||
public AbilityMenu(){
|
||||
jmiAutoYield = new JCheckBoxMenuItem("Auto-Yield");
|
||||
jmiAutoYield = new JCheckBoxMenuItem(Localizer.getInstance().getMessage("cbpAutoYieldMode"));
|
||||
jmiAutoYield.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent arg0) {
|
||||
@@ -302,7 +303,7 @@ public class VStack implements IVDoc<CStack> {
|
||||
});
|
||||
add(jmiAutoYield);
|
||||
|
||||
jmiAlwaysYes = new JCheckBoxMenuItem("Always Yes");
|
||||
jmiAlwaysYes = new JCheckBoxMenuItem(Localizer.getInstance().getMessage("lblAlwaysYes"));
|
||||
jmiAlwaysYes.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent arg0) {
|
||||
@@ -316,7 +317,7 @@ public class VStack implements IVDoc<CStack> {
|
||||
});
|
||||
add(jmiAlwaysYes);
|
||||
|
||||
jmiAlwaysNo = new JCheckBoxMenuItem("Always No");
|
||||
jmiAlwaysNo = new JCheckBoxMenuItem(Localizer.getInstance().getMessage("lblAlwaysNo"));
|
||||
jmiAlwaysNo.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent arg0) {
|
||||
|
||||
@@ -29,7 +29,7 @@ import forge.screens.workshop.views.VCardDesigner;
|
||||
import forge.screens.workshop.views.VCardScript;
|
||||
import forge.screens.workshop.views.VWorkshopCatalog;
|
||||
import forge.toolbox.FOptionPane;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Localizer;
|
||||
|
||||
/**
|
||||
* Controls the "card script" panel in the workshop UI.
|
||||
@@ -120,7 +120,11 @@ public enum CCardScript implements ICDoc {
|
||||
return (currentScriptInfo != null && isTextDirty);
|
||||
}
|
||||
|
||||
private static final ImmutableList<String> switchAwayOptions = ImmutableList.of("Save", "Don't Save", "Cancel");
|
||||
private static final ImmutableList<String> switchAwayOptions = ImmutableList.of(
|
||||
Localizer.getInstance().getMessage("lblSave"),
|
||||
Localizer.getInstance().getMessage("lblDontSave"),
|
||||
Localizer.getInstance().getMessage("lblCancel")
|
||||
);
|
||||
public boolean canSwitchAway(final boolean isCardChanging) {
|
||||
if (switchInProgress) { return false; }
|
||||
if (!hasChanges()) { return true; }
|
||||
@@ -128,8 +132,8 @@ public enum CCardScript implements ICDoc {
|
||||
switchInProgress = true;
|
||||
Singletons.getControl().ensureScreenActive(FScreen.WORKSHOP_SCREEN); //ensure Workshop is active before showing dialog
|
||||
final int choice = FOptionPane.showOptionDialog(
|
||||
TextUtil.concatNoSpace("Save changes to ", currentCard.toString(), "?"),
|
||||
"Save Changes?",
|
||||
Localizer.getInstance().getMessage("lblSaveChangesToDestConfirm", currentCard.toString()),
|
||||
Localizer.getInstance().getMessage("lblSaveChangesConfirm"),
|
||||
FOptionPane.QUESTION_ICON,
|
||||
switchAwayOptions);
|
||||
switchInProgress = false;
|
||||
|
||||
@@ -61,6 +61,9 @@ import forge.util.Localizer;
|
||||
*/
|
||||
public class FSkin {
|
||||
|
||||
public static final int SYMBOL_WIDTH = 13;
|
||||
public static final int SYMBOL_HEIGHT = 13;
|
||||
|
||||
/**
|
||||
* Retrieves a color from this skin's color map.
|
||||
*
|
||||
@@ -77,7 +80,7 @@ public class FSkin {
|
||||
*
|
||||
* @param clr0 {@link java.awt.Color}
|
||||
* @param step int
|
||||
* @return {@link java.awt.Color}
|
||||
* @return {@link java.awt.CFaceolor}
|
||||
*/
|
||||
public static Color stepColor(final Color clr0, final int step) {
|
||||
int r = clr0.getRed();
|
||||
@@ -1006,7 +1009,7 @@ public class FSkin {
|
||||
|
||||
private static void addEncodingSymbol(final String key, final FSkinProp skinProp) {
|
||||
final String path = ForgeConstants.CACHE_SYMBOLS_DIR + "/" + key.replace("/", "") + ".png";
|
||||
getImage(skinProp).save(path, 13, 13);
|
||||
getImage(skinProp).save(path, SYMBOL_WIDTH, SYMBOL_HEIGHT);
|
||||
}
|
||||
|
||||
public static String encodeSymbols(String str, final boolean formatReminderText) {
|
||||
@@ -1023,7 +1026,7 @@ public class FSkin {
|
||||
//format mana symbols to display as icons
|
||||
pattern = "\\{([A-Z0-9]+)\\}|\\{([A-Z0-9]+)/([A-Z0-9]+)\\}"; //fancy pattern needed so "/" can be omitted from replacement
|
||||
try {
|
||||
replacement = "<img src=\"" + new File(ForgeConstants.CACHE_SYMBOLS_DIR + "/$1$2$3.png").toURI().toURL().toString() + "\">";
|
||||
replacement = "<img src=\"" + new File(ForgeConstants.CACHE_SYMBOLS_DIR + "/$1$2$3.png").toURI().toURL().toString() + "\" width=" + SYMBOL_WIDTH + " height=" + SYMBOL_HEIGHT + ">";
|
||||
str = str.replaceAll(pattern, replacement);
|
||||
} catch (final MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -17,18 +17,6 @@
|
||||
*/
|
||||
package forge.view.arcane;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.Timer;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.game.card.CardView;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
@@ -39,10 +27,19 @@ import forge.screens.match.CMatchUI;
|
||||
import forge.toolbox.FMouseAdapter;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.MouseTriggerEvent;
|
||||
//import forge.util.collect.FCollectionView;
|
||||
import forge.view.FDialog;
|
||||
import forge.view.FFrame;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
//import forge.util.collect.FCollectionView;
|
||||
|
||||
// show some cards in a new window
|
||||
public abstract class FloatingCardArea extends CardArea {
|
||||
|
||||
@@ -67,18 +64,20 @@ public abstract class FloatingCardArea extends CardArea {
|
||||
getWindow().setFocusableWindowState(false); // should probably do this earlier
|
||||
getWindow().setVisible(true);
|
||||
}
|
||||
|
||||
protected void hideWindow() {
|
||||
onShow();
|
||||
getWindow().setFocusableWindowState(false); // should probably do this earlier
|
||||
getWindow().setVisible(false);
|
||||
getWindow().dispose(); //pfps so that old content does not show up
|
||||
getWindow().dispose(); //pfps so that old content does not show up
|
||||
}
|
||||
|
||||
protected void showOrHideWindow() {
|
||||
if (getWindow().isVisible()) {
|
||||
hideWindow();
|
||||
} else {
|
||||
showWindow();
|
||||
}
|
||||
if (getWindow().isVisible()) {
|
||||
hideWindow();
|
||||
} else {
|
||||
showWindow();
|
||||
}
|
||||
}
|
||||
protected void onShow() {
|
||||
if (!hasBeenShown) {
|
||||
@@ -98,24 +97,31 @@ public abstract class FloatingCardArea extends CardArea {
|
||||
if (hasBeenShown || locLoaded) { return; }
|
||||
super.setLocationRelativeTo(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean b0) {
|
||||
if (isVisible() == b0) { return; }
|
||||
if (isVisible() == b0) {
|
||||
return;
|
||||
}
|
||||
if (!b0 && hasBeenShown && locPref != null) {
|
||||
//update preference before hiding window, as otherwise its location will be 0,0
|
||||
prefs.setPref(locPref,
|
||||
getX() + COORD_DELIM + getY() + COORD_DELIM +
|
||||
getWidth() + COORD_DELIM + getHeight());
|
||||
getWidth() + COORD_DELIM + getHeight());
|
||||
//don't call prefs.save(), instead allowing them to be saved when match ends
|
||||
}
|
||||
if (b0) {
|
||||
doRefresh(); // force a refresh before showing to pick up any changes when hidden
|
||||
doRefresh(); // force a refresh before showing to pick up any changes when hidden
|
||||
hasBeenShown = true;
|
||||
}
|
||||
}
|
||||
super.setVisible(b0);
|
||||
}
|
||||
};
|
||||
|
||||
public boolean isVisible() {
|
||||
return window.isVisible();
|
||||
}
|
||||
|
||||
protected FDialog getWindow() {
|
||||
return window;
|
||||
}
|
||||
|
||||
@@ -6,38 +6,37 @@
|
||||
* 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.view.arcane;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
|
||||
import java.awt.event.MouseEvent;
|
||||
import javax.swing.ScrollPaneConstants;
|
||||
import javax.swing.WindowConstants;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.match.CMatchUI;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FMouseAdapter;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.toolbox.FSkin;
|
||||
import forge.util.Lang;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class FloatingZone extends FloatingCardArea {
|
||||
private static final long serialVersionUID = 1927906492186378596L;
|
||||
|
||||
@@ -46,18 +45,44 @@ public class FloatingZone extends FloatingCardArea {
|
||||
private static int getKey(final PlayerView player, final ZoneType zone) {
|
||||
return 40 * player.getId() + zone.hashCode();
|
||||
}
|
||||
|
||||
public static void showOrHide(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
final FloatingZone cardArea = _init(matchUI, player, zone);
|
||||
cardArea.showOrHideWindow();
|
||||
}
|
||||
public static void show(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
|
||||
public static boolean show(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
final FloatingZone cardArea = _init(matchUI, player, zone);
|
||||
cardArea.showWindow();
|
||||
|
||||
if (cardArea.isVisible()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||
@Override public void run() {
|
||||
cardArea.showWindow();
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
public static void hide(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
|
||||
public static boolean hide(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
final FloatingZone cardArea = _init(matchUI, player, zone);
|
||||
cardArea.hideWindow();
|
||||
|
||||
if (!cardArea.isVisible()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FThreads.invokeInEdtNowOrLater(new Runnable() {
|
||||
@Override public void run() {
|
||||
cardArea.hideWindow();
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static FloatingZone _init(final CMatchUI matchUI, final PlayerView player, final ZoneType zone) {
|
||||
final int key = getKey(player, zone);
|
||||
FloatingZone cardArea = floatingAreas.get(key);
|
||||
@@ -69,10 +94,12 @@ public class FloatingZone extends FloatingCardArea {
|
||||
}
|
||||
return cardArea;
|
||||
}
|
||||
|
||||
public static CardPanel getCardPanel(final CMatchUI matchUI, final CardView card) {
|
||||
final FloatingZone window = _init(matchUI, card.getController(), card.getZone());
|
||||
return window.getCardPanel(card.getId());
|
||||
}
|
||||
|
||||
public static void refresh(final PlayerView player, final ZoneType zone) {
|
||||
FloatingZone cardArea = floatingAreas.get(getKey(player, zone));
|
||||
if (cardArea != null) {
|
||||
@@ -82,21 +109,23 @@ public class FloatingZone extends FloatingCardArea {
|
||||
|
||||
//refresh flashback zone when graveyard, library, or exile zones updated
|
||||
switch (zone) {
|
||||
case Graveyard:
|
||||
case Library:
|
||||
case Exile:
|
||||
refresh(player, ZoneType.Flashback);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case Graveyard:
|
||||
case Library:
|
||||
case Exile:
|
||||
refresh(player, ZoneType.Flashback);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void closeAll() {
|
||||
for (final FloatingZone cardArea : floatingAreas.values()) {
|
||||
cardArea.window.setVisible(false);
|
||||
}
|
||||
floatingAreas.clear();
|
||||
}
|
||||
|
||||
public static void refreshAll() {
|
||||
for (final FloatingZone cardArea : floatingAreas.values()) {
|
||||
cardArea.refresh();
|
||||
@@ -110,23 +139,23 @@ public class FloatingZone extends FloatingCardArea {
|
||||
protected FCollection<CardView> cardList;
|
||||
|
||||
private final Comparator<CardView> comp = new Comparator<CardView>() {
|
||||
@Override
|
||||
public int compare(CardView lhs, CardView rhs) {
|
||||
if ( !getMatchUI().mayView(lhs) ) {
|
||||
return ( getMatchUI().mayView(rhs) ) ? 1 : 0 ;
|
||||
} else if ( !getMatchUI().mayView(rhs) ) {
|
||||
return -1;
|
||||
} else {
|
||||
return lhs.getName().compareTo(rhs.getName());
|
||||
}
|
||||
}
|
||||
};
|
||||
@Override
|
||||
public int compare(CardView lhs, CardView rhs) {
|
||||
if (!getMatchUI().mayView(lhs)) {
|
||||
return (getMatchUI().mayView(rhs)) ? 1 : 0;
|
||||
} else if (!getMatchUI().mayView(rhs)) {
|
||||
return -1;
|
||||
} else {
|
||||
return lhs.getName().compareTo(rhs.getName());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
protected Iterable<CardView> getCards() {
|
||||
Iterable<CardView> zoneCards = player.getCards(zone);
|
||||
if ( zoneCards != null ) {
|
||||
if (zoneCards != null) {
|
||||
cardList = new FCollection<>(zoneCards);
|
||||
if ( sortedByName ) {
|
||||
if (sortedByName) {
|
||||
Collections.sort(cardList, comp);
|
||||
}
|
||||
return cardList;
|
||||
@@ -138,28 +167,28 @@ public class FloatingZone extends FloatingCardArea {
|
||||
private FloatingZone(final CMatchUI matchUI, final PlayerView player0, final ZoneType zone0) {
|
||||
super(matchUI, new FScrollPane(false, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
|
||||
window.add(getScrollPane(), "grow, push");
|
||||
window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //pfps so that old content does not reappear?
|
||||
window.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); //pfps so that old content does not reappear?
|
||||
getScrollPane().setViewportView(this);
|
||||
setOpaque(false);
|
||||
switch (zone0) {
|
||||
case Exile:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_EXILE));
|
||||
break;
|
||||
case Graveyard:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_GRAVEYARD));
|
||||
break;
|
||||
case Hand:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_HAND));
|
||||
break;
|
||||
case Library:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_LIBRARY));
|
||||
break;
|
||||
case Flashback:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_FLASHBACK));
|
||||
break;
|
||||
default:
|
||||
locPref = null;
|
||||
break;
|
||||
case Exile:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_EXILE));
|
||||
break;
|
||||
case Graveyard:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_GRAVEYARD));
|
||||
break;
|
||||
case Hand:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_HAND));
|
||||
break;
|
||||
case Library:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_LIBRARY));
|
||||
break;
|
||||
case Flashback:
|
||||
window.setIconImage(FSkin.getImage(FSkinProp.IMG_ZONE_FLASHBACK));
|
||||
break;
|
||||
default:
|
||||
locPref = null;
|
||||
break;
|
||||
}
|
||||
zone = zone0;
|
||||
setPlayer(player0);
|
||||
@@ -167,19 +196,20 @@ public class FloatingZone extends FloatingCardArea {
|
||||
}
|
||||
|
||||
private void toggleSorted() {
|
||||
sortedByName = !sortedByName;
|
||||
setTitle();
|
||||
refresh();
|
||||
// revalidation does not appear to be necessary here
|
||||
getWindow().repaint();
|
||||
sortedByName = !sortedByName;
|
||||
setTitle();
|
||||
refresh();
|
||||
// revalidation does not appear to be necessary here
|
||||
getWindow().repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onShow() {
|
||||
super.onShow();
|
||||
super.onShow();
|
||||
if (!hasBeenShown) {
|
||||
getWindow().getTitleBar().addMouseListener(new FMouseAdapter() {
|
||||
@Override public final void onRightClick(final MouseEvent e) {
|
||||
@Override
|
||||
public final void onRightClick(final MouseEvent e) {
|
||||
toggleSorted();
|
||||
}
|
||||
});
|
||||
@@ -188,34 +218,36 @@ public class FloatingZone extends FloatingCardArea {
|
||||
|
||||
private void setTitle() {
|
||||
title = Lang.getPossessedObject(player.getName(), zone.name()) + " (%d)" +
|
||||
( sortedByName ? " - sorted by name (right click in title to not sort)" : " (right click in title to sort)" ) ;
|
||||
}
|
||||
(sortedByName ? " - sorted by name (right click in title to not sort)" : " (right click in title to sort)");
|
||||
}
|
||||
|
||||
private void setPlayer(PlayerView player0) {
|
||||
if (player == player0) { return; }
|
||||
if (player == player0) {
|
||||
return;
|
||||
}
|
||||
player = player0;
|
||||
setTitle();
|
||||
setTitle();
|
||||
|
||||
boolean isAi = player0.isAI();
|
||||
switch (zone) {
|
||||
case Exile:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_EXILE : FPref.ZONE_LOC_HUMAN_EXILE;
|
||||
break;
|
||||
case Graveyard:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_GRAVEYARD : FPref.ZONE_LOC_HUMAN_GRAVEYARD;
|
||||
break;
|
||||
case Hand:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_HAND : FPref.ZONE_LOC_HUMAN_HAND;
|
||||
break;
|
||||
case Library:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_LIBRARY : FPref.ZONE_LOC_HUMAN_LIBRARY;
|
||||
break;
|
||||
case Flashback:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_FLASHBACK : FPref.ZONE_LOC_HUMAN_FLASHBACK;
|
||||
break;
|
||||
default:
|
||||
locPref = null;
|
||||
break;
|
||||
case Exile:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_EXILE : FPref.ZONE_LOC_HUMAN_EXILE;
|
||||
break;
|
||||
case Graveyard:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_GRAVEYARD : FPref.ZONE_LOC_HUMAN_GRAVEYARD;
|
||||
break;
|
||||
case Hand:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_HAND : FPref.ZONE_LOC_HUMAN_HAND;
|
||||
break;
|
||||
case Library:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_LIBRARY : FPref.ZONE_LOC_HUMAN_LIBRARY;
|
||||
break;
|
||||
case Flashback:
|
||||
locPref = isAi ? FPref.ZONE_LOC_AI_FLASHBACK : FPref.ZONE_LOC_HUMAN_FLASHBACK;
|
||||
break;
|
||||
default:
|
||||
locPref = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2121,6 +2121,44 @@ public class GameSimulatorTest extends SimulationTestCase {
|
||||
|
||||
assertEquals(1, simWC.getPowerBonusFromCounters());
|
||||
assertEquals(3, simGame.getPlayers().get(0).getCreaturesInPlay().size());
|
||||
}
|
||||
|
||||
public void testEverAfterWithWaywardServant() {
|
||||
Game game = initAndCreateGame();
|
||||
Player p = game.getPlayers().get(0);
|
||||
String everAfter = "Ever After";
|
||||
String waywardServant = "Wayward Servant";
|
||||
String goblin = "Raging Goblin";
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
addCard("Swamp", p);
|
||||
|
||||
Card cardEverAfter = addCardToZone(everAfter, p, ZoneType.Hand);
|
||||
Card cardWaywardServant = addCardToZone(waywardServant, p, ZoneType.Graveyard);
|
||||
Card cardRagingGoblin = addCardToZone(goblin, p, ZoneType.Graveyard);
|
||||
|
||||
game.getPhaseHandler().devModeSet(PhaseType.MAIN1, p);
|
||||
game.getAction().checkStateEffects(true);
|
||||
|
||||
SpellAbility playSa = cardEverAfter.getSpellAbilities().get(0);
|
||||
playSa.setActivatingPlayer(p);
|
||||
playSa.getTargets().add(cardWaywardServant);
|
||||
playSa.getTargets().add(cardRagingGoblin);
|
||||
|
||||
GameSimulator sim = createSimulator(game, p);
|
||||
int origScore = sim.getScoreForOrigGame().value;
|
||||
int score = sim.simulateSpellAbility(playSa).value;
|
||||
assertTrue(String.format("score=%d vs. origScore=%d", score, origScore), score > origScore);
|
||||
|
||||
Game simGame = sim.getSimulatedGameState();
|
||||
|
||||
Card simGoblin = findCardWithName(simGame, goblin);
|
||||
|
||||
simGame.getAction().checkStateEffects(true);
|
||||
simGame.getPhaseHandler().devAdvanceToPhase(PhaseType.MAIN2);
|
||||
|
||||
assertEquals(21, simGame.getPlayers().get(0).getLife());
|
||||
assertEquals(true, simGoblin.isRed() && simGoblin.isBlack());
|
||||
assertEquals(true, simGoblin.getType().hasSubtype("Zombie"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user