...
 
Commits (14)
......@@ -5415,6 +5415,51 @@ public class Card extends GameEntity implements Comparable<Card> {
}
return protectKey;
}
public String getHexproofKey() {
String hexproofKey = "";
boolean hR = false; boolean hG = false; boolean hB = false; boolean hU = false; boolean hW = false;
for (final KeywordInterface inst : getKeywords()) {
String kw = inst.getOriginal();
if (!kw.startsWith("Hexproof")) {
continue;
}
if (kw.equals("Hexproof")) {
hexproofKey += "generic:";
}
if (kw.startsWith("Hexproof:")) {
String[] k = kw.split(":");
if (k[2].toString().equals("red")) {
if (!hR) {
hR = true;
hexproofKey += "R:";
}
} else if (k[2].toString().equals("green")) {
if (!hG) {
hG = true;
hexproofKey += "G:";
}
} else if (k[2].toString().equals("black")) {
if (!hB) {
hB = true;
hexproofKey += "B:";
}
} else if (k[2].toString().equals("blue")) {
if (!hU) {
hU = true;
hexproofKey += "U:";
}
} else if (k[2].toString().equals("white")) {
if (!hW) {
hW = true;
hexproofKey += "W:";
}
} else if (k[2].toString().equals("monocolored")) {
hexproofKey += "monocolored:";
}
}
}
return hexproofKey;
}
public Zone getZone() {
return currentZone;
}
......
......@@ -1018,6 +1018,7 @@ public class CardView extends GameEntityView {
}
public String getProtectionKey() { return get(TrackableProperty.ProtectionKey); }
public String getHexproofKey() { return get(TrackableProperty.HexproofKey); }
public boolean hasDeathtouch() { return get(TrackableProperty.HasDeathtouch); }
public boolean hasDefender() { return get(TrackableProperty.HasDefender); }
public boolean hasDoubleStrike() { return get(TrackableProperty.HasDoubleStrike); }
......@@ -1031,12 +1032,8 @@ public class CardView extends GameEntityView {
public boolean hasMenace() { return get(TrackableProperty.HasMenace); }
public boolean hasReach() { return get(TrackableProperty.HasReach); }
public boolean hasShroud() { return get(TrackableProperty.HasShroud); }
public boolean hasTrample() {
return get(TrackableProperty.HasTrample);
}
public boolean hasVigilance() {
return get(TrackableProperty.HasVigilance);
}
public boolean hasTrample() { return get(TrackableProperty.HasTrample); }
public boolean hasVigilance() { return get(TrackableProperty.HasVigilance); }
public boolean hasHaste() {
return get(TrackableProperty.HasHaste);
......@@ -1077,6 +1074,8 @@ public class CardView extends GameEntityView {
updateAbilityText(c, state);
//set protectionKey for Icons
set(TrackableProperty.ProtectionKey, c.getProtectionKey());
//set hexproofKeys for Icons
set(TrackableProperty.HexproofKey, c.getHexproofKey());
}
public boolean isBasicLand() {
......
......@@ -99,7 +99,8 @@ public enum TrackableProperty {
HasVigilance(TrackableTypes.BooleanType),
//protectionkey
ProtectionKey(TrackableTypes.StringType),
//hexproofkey
HexproofKey(TrackableTypes.StringType),
HasHaste(TrackableTypes.BooleanType),
HasInfect(TrackableTypes.BooleanType),
HasStorm(TrackableTypes.BooleanType),
......
......@@ -30,6 +30,7 @@ public final class CardOverlaysMenu {
menu.add(getMenuItem_CardOverlay("Mana Cost", FPref.UI_OVERLAY_CARD_MANA_COST));
menu.add(getMenuItem_CardOverlay("Power/Toughness", FPref.UI_OVERLAY_CARD_POWER));
menu.add(getMenuItem_CardOverlay("Card Id", FPref.UI_OVERLAY_CARD_ID));
menu.add(getMenuItem_CardOverlay("Ability Icon", FPref.UI_OVERLAY_ABILITY_ICONS));
return menu;
}
......
......@@ -135,7 +135,17 @@ public class CardFaceSymbols {
MANA_IMAGES.put("shroud", FSkin.getImage(FSkinProp.IMG_ABILITY_SHROUD));
MANA_IMAGES.put("trample", FSkin.getImage(FSkinProp.IMG_ABILITY_TRAMPLE));
MANA_IMAGES.put("vigilance", FSkin.getImage(FSkinProp.IMG_ABILITY_VIGILANCE));
//hexproof from
MANA_IMAGES.put("hexproofR", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_R));
MANA_IMAGES.put("hexproofG", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_G));
MANA_IMAGES.put("hexproofB", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_B));
MANA_IMAGES.put("hexproofU", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_U));
MANA_IMAGES.put("hexproofW", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_W));
MANA_IMAGES.put("hexproofC", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_C));
MANA_IMAGES.put("hexproofUB", FSkin.getImage(FSkinProp.IMG_ABILITY_HEXPROOF_UB));
//token icon
MANA_IMAGES.put("token", FSkin.getImage(FSkinProp.IMG_ABILITY_TOKEN));
//protection from
MANA_IMAGES.put("protectAll", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_ALL));
MANA_IMAGES.put("protectB", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_B));
MANA_IMAGES.put("protectBU", FSkin.getImage(FSkinProp.IMG_ABILITY_PROTECT_BU));
......
......@@ -50,6 +50,7 @@ import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -511,7 +512,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
int abiX = cardXOffset + (cardWidth / 2) + (cardWidth / 3);
int abiSpace = (cardWidth / 7);
int abiY = cardWidth < 200 ? cardYOffset + 25 : cardYOffset + 50;
if (ZoneType.Battlefield.equals(card.getZone())){
if (ZoneType.Battlefield.equals(card.getZone()) && showAbilityIcons()){
if (card.getCurrentState().hasFlying()) {
CardFaceSymbols.drawAbilitySymbol("flying", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
......@@ -545,10 +546,43 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
abiY += abiSpace;
}
if (card.getCurrentState().hasHexproof()) {
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
if (!card.getCurrentState().getHexproofKey().isEmpty()){
String[] splitK = card.getCurrentState().getHexproofKey().split(":");
List<String> listHK = Arrays.asList(splitK);
if (listHK.contains("generic")) {
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("R")) {
CardFaceSymbols.drawAbilitySymbol("hexproofR", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("B")) {
CardFaceSymbols.drawAbilitySymbol("hexproofB", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("U")) {
CardFaceSymbols.drawAbilitySymbol("hexproofU", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("G")) {
CardFaceSymbols.drawAbilitySymbol("hexproofG", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("W")) {
CardFaceSymbols.drawAbilitySymbol("hexproofW", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (listHK.contains("monocolored")) {
CardFaceSymbols.drawAbilitySymbol("hexproofC", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
} else {
CardFaceSymbols.drawAbilitySymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
}
if (card.getCurrentState().hasShroud()) {
else if (card.getCurrentState().hasShroud()) {
CardFaceSymbols.drawAbilitySymbol("shroud", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
......@@ -963,6 +997,10 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
}
private boolean showAbilityIcons() {
return isShowingOverlays() && isPreferenceEnabled(FPref.UI_OVERLAY_ABILITY_ICONS);
}
public void repaintOverlays() {
repaint();
doLayout();
......
......@@ -25,7 +25,11 @@ import forge.screens.home.NewGameMenu;
import forge.screens.match.MatchController;
import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem;
import forge.toolbox.*;
import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FGestureAdapter;
import forge.toolbox.FOptionPane;
import forge.toolbox.FOverlay;
import forge.util.Callback;
import forge.util.FileUtil;
import forge.util.Localizer;
......
......@@ -37,7 +37,13 @@ import forge.sound.IAudioClip;
import forge.sound.IAudioMusic;
import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose;
import forge.util.*;
import forge.util.Callback;
import forge.util.FileUtil;
import forge.util.ImageFetcher;
import forge.util.LibGDXImageFetcher;
import forge.util.ThreadUtil;
import forge.util.WaitCallback;
import forge.util.WaitRunnable;
public class GuiMobile implements IGuiBase {
private final String assetsDir;
......
......@@ -265,9 +265,19 @@ public enum FSkinImage implements FImage {
IMG_ABILITY_LIFELINK (FSkinProp.IMG_ABILITY_LIFELINK, SourceFile.ABILITIES),
IMG_ABILITY_MENACE (FSkinProp.IMG_ABILITY_MENACE, SourceFile.ABILITIES),
IMG_ABILITY_REACH (FSkinProp.IMG_ABILITY_REACH, SourceFile.ABILITIES),
IMG_ABILITY_SHROUD (FSkinProp.IMG_ABILITY_SHROUD, SourceFile.ABILITIES),
IMG_ABILITY_SHROUD (FSkinProp.IMG_ABILITY_SHROUD, SourceFile.ABILITIES),
IMG_ABILITY_TRAMPLE (FSkinProp.IMG_ABILITY_TRAMPLE, SourceFile.ABILITIES),
IMG_ABILITY_VIGILANCE (FSkinProp.IMG_ABILITY_VIGILANCE, SourceFile.ABILITIES),
//HEXPROOF FROM
IMG_ABILITY_HEXPROOF_R (FSkinProp.IMG_ABILITY_HEXPROOF_R, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_G (FSkinProp.IMG_ABILITY_HEXPROOF_G, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_B (FSkinProp.IMG_ABILITY_HEXPROOF_B, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_U (FSkinProp.IMG_ABILITY_HEXPROOF_U, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_W (FSkinProp.IMG_ABILITY_HEXPROOF_W, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_C (FSkinProp.IMG_ABILITY_HEXPROOF_C, SourceFile.ABILITIES),
IMG_ABILITY_HEXPROOF_UB (FSkinProp.IMG_ABILITY_HEXPROOF_UB, SourceFile.ABILITIES),
//token icon
IMG_ABILITY_TOKEN (FSkinProp.IMG_ABILITY_TOKEN, SourceFile.ABILITIES),
//PROTECT ICONS
IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES),
IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES),
......
......@@ -118,7 +118,17 @@ public class CardFaceSymbols {
MANA_IMAGES.put("shroud", FSkinImage.IMG_ABILITY_SHROUD);
MANA_IMAGES.put("trample", FSkinImage.IMG_ABILITY_TRAMPLE);
MANA_IMAGES.put("vigilance", FSkinImage.IMG_ABILITY_VIGILANCE);
//hexproof from
MANA_IMAGES.put("hexproofR", FSkinImage.IMG_ABILITY_HEXPROOF_R);
MANA_IMAGES.put("hexproofG", FSkinImage.IMG_ABILITY_HEXPROOF_G);
MANA_IMAGES.put("hexproofB", FSkinImage.IMG_ABILITY_HEXPROOF_B);
MANA_IMAGES.put("hexproofU", FSkinImage.IMG_ABILITY_HEXPROOF_U);
MANA_IMAGES.put("hexproofW", FSkinImage.IMG_ABILITY_HEXPROOF_W);
MANA_IMAGES.put("hexproofC", FSkinImage.IMG_ABILITY_HEXPROOF_C);
MANA_IMAGES.put("hexproofUB", FSkinImage.IMG_ABILITY_HEXPROOF_UB);
//token icon
MANA_IMAGES.put("token", FSkinImage.IMG_ABILITY_TOKEN);
//protection from
MANA_IMAGES.put("protectAll", FSkinImage.IMG_ABILITY_PROTECT_ALL);
MANA_IMAGES.put("protectB", FSkinImage.IMG_ABILITY_PROTECT_B);
MANA_IMAGES.put("protectBU", FSkinImage.IMG_ABILITY_PROTECT_BU);
......
......@@ -5,13 +5,19 @@ import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.utils.Align;
import com.google.common.collect.ImmutableList;
import forge.Graphics;
import forge.assets.*;
import forge.assets.FBufferedImage;
import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.FSkinTexture;
import forge.assets.ImageCache;
import forge.assets.TextRenderer;
import forge.card.CardDetailUtil.DetailColors;
import forge.card.CardRenderer.CardStackPosition;
import forge.card.mana.ManaCost;
import forge.game.GameView;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.game.card.CardView;
import forge.game.zone.ZoneType;
import forge.model.FModel;
import forge.properties.ForgeConstants;
......
......@@ -19,7 +19,13 @@ import forge.CachedCardImage;
import forge.FThreads;
import forge.Graphics;
import forge.StaticData;
import forge.assets.*;
import forge.assets.FImageComplex;
import forge.assets.FRotatedImage;
import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.FTextureRegionImage;
import forge.assets.ImageCache;
import forge.card.CardDetailUtil.DetailColors;
import forge.card.CardZoom.ActivateHandler;
import forge.card.mana.ManaCost;
......@@ -42,6 +48,7 @@ import forge.toolbox.FList;
import forge.util.Utils;
import org.apache.commons.lang3.StringUtils;
import forge.util.TextBounds;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -551,7 +558,11 @@ public class CardRenderer {
float abiSpace = cw / 5.7f;
float abiCount = 0;
if (onbattlefield && onTop) {
if (onbattlefield && onTop && showAbilityIcons(card)) {
if (card.isToken()){
CardFaceSymbols.drawSymbol("token", g, abiX, abiY, abiScale, abiScale);
abiY += abiSpace;
}
if (card.getCurrentState().hasFlying()) {
CardFaceSymbols.drawSymbol("flying", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
......@@ -609,11 +620,65 @@ public class CardRenderer {
abiCount += 1;
}
if (card.getCurrentState().hasHexproof()) {
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
if (!card.getCurrentState().getHexproofKey().isEmpty()){
String[] splitK = card.getCurrentState().getHexproofKey().split(":");
List<String> listHK = Arrays.asList(splitK);
if (listHK.contains("generic")) {
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("R")) {
CardFaceSymbols.drawSymbol("hexproofR", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("B")) {
CardFaceSymbols.drawSymbol("hexproofB", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("U")) {
CardFaceSymbols.drawSymbol("hexproofU", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("G")) {
CardFaceSymbols.drawSymbol("hexproofG", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("W")) {
CardFaceSymbols.drawSymbol("hexproofW", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
if (listHK.contains("monocolored")) {
CardFaceSymbols.drawSymbol("hexproofC", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
} else {
CardFaceSymbols.drawSymbol("hexproof", g, abiX, abiY, abiScale, abiScale);
if (unselectable){
g.setAlphaComposite(0.6f); g.fillRect(Color.BLACK, abiX, abiY, abiScale, abiScale ); g.setAlphaComposite(oldAlpha);}
abiY += abiSpace;
abiCount += 1;
}
}
else if (card.getCurrentState().hasShroud()) {
CardFaceSymbols.drawSymbol("shroud", g, abiX, abiY, abiScale, abiScale);
......@@ -1003,6 +1068,10 @@ public class CardRenderer {
isPreferenceEnabled(FPref.UI_OVERLAY_CARD_MANA_COST);
}
private static boolean showAbilityIcons(CardView card) {
return isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_ABILITY_ICONS);
}
private static boolean showCardIdOverlay(CardView card) {
return card.getId() > 0 && isShowingOverlays(card) && isPreferenceEnabled(FPref.UI_OVERLAY_CARD_ID);
}
......
......@@ -10,8 +10,15 @@ import com.google.common.collect.ImmutableList;
import forge.Forge;
import forge.Forge.KeyInputAdapter;
import forge.Graphics;
import forge.assets.*;
import forge.card.*;
import forge.assets.FImage;
import forge.assets.FSkin;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.FTextureRegionImage;
import forge.card.CardDb;
import forge.card.CardEdition;
import forge.card.CardPreferences;
import forge.card.CardRulesPredicates;
import forge.deck.io.DeckPreferences;
import forge.item.PaperCard;
import forge.itemmanager.CardManager;
......@@ -30,9 +37,13 @@ import forge.planarconquest.ConquestUtil;
import forge.properties.ForgePreferences.FPref;
import forge.screens.FScreen;
import forge.screens.TabPageScreen;
import forge.toolbox.*;
import forge.toolbox.FContainer;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType;
import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose;
import forge.util.Callback;
import forge.util.ItemPool;
import forge.util.Lang;
......@@ -41,7 +52,11 @@ import forge.util.Utils;
import forge.util.storage.IStorage;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class FDeckEditor extends TabPageScreen<FDeckEditor> {
......
......@@ -55,7 +55,14 @@ import forge.util.ItemPool;
import forge.util.LayoutHelper;
import forge.util.Localizer;
import java.util.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......
......@@ -22,7 +22,11 @@ import forge.util.Callback;
import forge.util.TextUtil;
import forge.util.Utils;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.badlogic.gdx.utils.Align;
......
......@@ -11,7 +11,11 @@ import forge.assets.ImageCache;
import forge.card.CardRenderer;
import forge.card.CardRenderer.CardStackPosition;
import forge.card.CardZoom;
import forge.deck.*;
import forge.deck.ArchetypeDeckGenerator;
import forge.deck.CardThemedDeckGenerator;
import forge.deck.CommanderDeckGenerator;
import forge.deck.DeckProxy;
import forge.deck.FDeckViewer;
import forge.item.InventoryItem;
import forge.item.PaperCard;
import forge.itemmanager.ColumnDef;
......@@ -33,8 +37,11 @@ import forge.toolbox.FScrollPane;
import forge.util.Localizer;
import forge.util.Utils;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
......
......@@ -35,7 +35,10 @@ import forge.toolbox.FList;
import com.badlogic.gdx.math.Rectangle;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......
package forge.screens.constructed;
import java.util.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.deck.DeckType;
import forge.deck.FDeckChooser;
import forge.deck.*;
import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.Gdx;
......
......@@ -4,7 +4,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
import forge.util.*;
import forge.util.Callback;
import forge.util.Lang;
import forge.util.Localizer;
import forge.util.NameGenerator;
import forge.util.Utils;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.utils.Align;
import com.google.common.collect.ImmutableList;
......
package forge.screens.match;
import java.util.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import com.badlogic.gdx.graphics.Color;
......
......@@ -15,8 +15,14 @@ import forge.interfaces.IWinLoseView;
import forge.item.PaperCard;
import forge.menu.FMagnifyView;
import forge.model.FModel;
import forge.toolbox.*;
import forge.toolbox.FButton;
import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FOverlay;
import forge.toolbox.FTextArea;
import forge.util.TextUtil;
import forge.util.Utils;
import forge.util.gui.SGuiChoose;
......
......@@ -2,7 +2,18 @@ package forge.screens.planarconquest;
import java.util.List;
import forge.planarconquest.*;
import forge.planarconquest.ConquestAwardPool;
import forge.planarconquest.ConquestBattle;
import forge.planarconquest.ConquestChaosBattle;
import forge.planarconquest.ConquestData;
import forge.planarconquest.ConquestEvent;
import forge.planarconquest.ConquestLocation;
import forge.planarconquest.ConquestPlane;
import forge.planarconquest.ConquestPlaneData;
import forge.planarconquest.ConquestRegion;
import forge.planarconquest.ConquestReward;
import forge.planarconquest.ConquestUtil;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.graphics.Color;
......
......@@ -18,8 +18,13 @@ import forge.itemmanager.filters.HistoricFormatSelect;
import forge.model.CardCollections;
import forge.model.FModel;
import forge.properties.ForgeConstants;
import forge.quest.*;
import forge.quest.QuestController;
import forge.quest.QuestMode;
import forge.quest.QuestUtil;
import forge.quest.QuestWorld;
import forge.quest.StartingPoolPreferences;
import forge.quest.StartingPoolPreferences.PoolType;
import forge.quest.StartingPoolType;
import forge.quest.data.DeckConstructionRules;
import forge.quest.data.GameFormatQuest;
import forge.quest.data.QuestPreferences.QPref;
......@@ -27,9 +32,17 @@ import forge.screens.FScreen;
import forge.screens.LoadingOverlay;
import forge.screens.home.NewGameMenu;
import forge.screens.quest.QuestMenu.LaunchReason;
import forge.toolbox.*;
import forge.toolbox.FCheckBox;
import forge.toolbox.FComboBox;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel;
import forge.toolbox.FNumericTextField;
import forge.toolbox.FOptionPane;
import forge.toolbox.FRadioButton;
import forge.toolbox.FRadioButton.RadioButtonGroup;
import forge.toolbox.FScrollPane;
import forge.util.FileUtil;
import forge.util.ThreadUtil;
import forge.util.Utils;
......@@ -38,8 +51,13 @@ import forge.util.storage.IStorage;
import org.apache.commons.lang3.text.WordUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class NewQuestScreen extends FScreen {
......
......@@ -3,8 +3,12 @@ package forge.screens.quest;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Align;
import forge.Graphics;
import forge.assets.*;
import forge.assets.FImage;
import forge.assets.FSkinColor;
import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinFont;
import forge.assets.FSkinImage;
import forge.assets.ImageCache;
import forge.quest.IQuestEvent;
import forge.screens.settings.SettingsScreen;
import forge.toolbox.FDisplayObject;
......
package forge.screens.settings;
import forge.download.*;
import forge.download.GuiDownloadAchievementImages;
import forge.download.GuiDownloadPicturesLQ;
import forge.download.GuiDownloadPrices;
import forge.download.GuiDownloadQuestImages;
import forge.download.GuiDownloadSetPicturesLQ;
import forge.download.GuiDownloadService;
import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils;
import com.badlogic.gdx.utils.Align;
......
......@@ -331,6 +331,10 @@ public class SettingsPage extends TabPage<SettingsScreen> {
localizer.getMessage("lblShowCardIDOverlays"),
localizer.getMessage("nlShowCardIDOverlays")),
5);
lstSettings.addItem(new BooleanSetting(FPref.UI_OVERLAY_ABILITY_ICONS,
"Show Ability Icons",
"Show ability icons for cards, otherwise they're hidden."),
5);
//Vibration Options
lstSettings.addItem(new BooleanSetting(FPref.UI_VIBRATE_ON_LIFE_LOSS,
......
......@@ -10,7 +10,8 @@ import forge.Graphics;
import forge.interfaces.IComboBox;
import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem;
import forge.toolbox.FEvent.*;
import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType;
public class FComboBox<T> extends FTextField implements IComboBox<T> {
private final List<T> items = new ArrayList<>();
......
......@@ -9,7 +9,12 @@ import forge.util.Callback;
import forge.util.Localizer;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class GuiChoose {
......
......@@ -1080,61 +1080,61 @@ lblSearch=Suche
lblPriority=Priorität
lblTurn=Zug
lblPhase=Phase
lblEmpty=Empty
lbltoResolve=to Resolve.
lblStormCount=Storm Count
lblEmpty=Leer
lbltoResolve=zur Abwicklung.
lblStormCount=Sturmzähler
#PlayerControllerHuman.java
lblYouHaveWonTheCoinToss=%s, you have won the coin toss.
lblYouLostTheLastGame=%s, you lost the last game.
lblWouldYouLiketoPlayorDraw=Would you like to play or draw?
lblWhoWouldYouLiketoStartthisGame=Who would you like to start this game? (Click on the portrait.)
lblPlay=Play
lblDraw=Draw
lblTooFewCardsMainDeck=Too few cards in your main deck (minimum %s), please make modifications to your deck again.
lblTooManyCardsSideboard=Too many cards in your sideboard (maximum %s), please make modifications to your deck again.
lblAssignCombatDamageWerentBlocked=Do you want to assign its combat damage as though it weren't blocked?
lblChosenCards=Chosen Cards
lblAttacker=Attacker
lblTriggeredby=Triggered by
lblChooseWhichCardstoReveal=Choose Which Cards to Reveal
lblChooseCardsActivateOpeningHandandOrder=Choose cards to activate from opening hand and their order
lblActivateFirst=Activate first
lblChooseOptionalCosts=Choose optional Costs
lblOptionalCosts=Optional Costs
lblDoYouWanttoScry=Do you want to scry?
lblChooseCardstoSpliceonto=Choose cards to Splice onto
lblDoNextActioninSequence=Do Next Action in Sequence
lblPleaseDefineanActionSequenceFirst=Please define an action sequence first.
lblRememberActionSequence=Remember Action Sequence
lblYouMustHavePrioritytoUseThisFeature=You must have priority to use this feature.
lblNameTheCard=Name the card
lblWhichPlayerShouldRoll=Which player should roll?
lblChooseResult=Choose result
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=The chosen card is not a permanent or can't exist independently on the battlefield.\nIf you'd like to cast a non-permanent spell, or if you'd like to cast a permanent spell and place it on stack, please use the Cast Spell/Play Land button.
lblError=Error
lblWinGame=Win Game
lblSetLifetoWhat=Set life to what?
lblSetLifeforWhichPlayer=Set life for which player
lblChoosePermanentstoTap=Choose permanents to tap
lblChoosePermanentstoUntap=Choose permanents to untap
lblWhichTypeofCounter=Which type of counter?
lblHowManyCounters=How many counters?
lblRemoveCountersFromWhichCard=Remove counters from which card?
lblAddCountersToWhichCard=Add counters to which card?
lblChooseaCard=Choose a card
lblNoPlayerPriorityDeckCantBeTutoredFrom=No player has priority at the moment, so their deck can't be tutored from.
lblNoPlayerPriorityGameStateCannotBeSetup=No player has priority at the moment, so game state cannot be setup.
lblErrorLoadingBattleSetupFile=Error loading battle setup file!
lblSelectCardstoAddtoYourDeck=Select cards to add to your deck
lblAddTheseToMyDeck=Add these to my deck
lblChooseaPile=Choose a pile
lblSelectOrderForSimultaneousAbilities=Select order for simultaneous abilities
lblReorderSimultaneousAbilities=Reorder simultaneous abilities
lblResolveFirst=Resolve first
lblMoveCardstoToporBbottomofLibrary=Move cards to top or bottom of library
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Select cards to be put on the bottom of your library
lblCardsToPutOnTheBottom=Cards to put on the bottom
lblArrangeCardsToBePutOnTopOfYourLibrary=Arrange cards to be put on top of your library
lblTopOfLibrary=Top of Library
lblSelectCardsToBePutIntoTheGraveyard=Select cards to be put into the graveyard
lblCardsToPutInTheGraveyard=Cards to put in the graveyard
lblYouHaveWonTheCoinToss=%s, du hast den Münzwurf gewonnen.
lblYouLostTheLastGame=%s, du hast das letzte Spiel verloren.
lblWouldYouLiketoPlayorDraw=Willst du lieber zuerst spielen oder ziehen.
lblWhoWouldYouLiketoStartthisGame=Wer soll das Spiel beginnen? (Klicke auf das Portrait.)
lblPlay=Spielen
lblDraw=Ziehen
lblTooFewCardsMainDeck=Zu wenig Karten in deinem Deck (mindestens %s). Bitte passe dein Deck an.
lblTooManyCardsSideboard=Zu viele Karten in deinem Deck (maximal %s). Bitte passe dein Deck an.
lblAssignCombatDamageWerentBlocked=Möchtest du den Kampfschaden deklarieren, als wäre nicht geblockt worden?
lblChosenCards=Wähle Karten
lblAttacker=Angreifer
lblTriggeredby=Ausgelöst durch
lblChooseWhichCardstoReveal=Wähle die vorzuzeigenden Karten
lblChooseCardsActivateOpeningHandandOrder=Wähle die aus der Starthand zu aktivierenden Karten und ihre Reihenfolge
lblActivateFirst=Aktiviere zuerst
lblChooseOptionalCosts=Wähle optionale Kosten
lblOptionalCosts=Optionale Kosten
lblDoYouWanttoScry=Hellsicht anwenden?
lblChooseCardstoSpliceonto=Wähle Karte, an welche gekoppelt werden soll
lblDoNextActioninSequence=Nächste Aktion ausführen
lblPleaseDefineanActionSequenceFirst=Bitte lege erst die Aktionsreigefolge fest.
lblRememberActionSequence=Merke Aktionsreihenfolge
lblYouMustHavePrioritytoUseThisFeature=Um diese Funktion zu nutzen brauchst du die Priorität.
lblNameTheCard=Nenne die Karte
lblWhichPlayerShouldRoll=Welcher Spieler soll würfeln?
lblChooseResult=Wähle Ergebnis
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=Die gewählte Karte ist keine bleibende oder kann nicht alleine auf dem Spielfeld existieren.\nWenn du einen Nicht-bleibenden-Karte-Spruch sprechen, oder einen Bleibende-Karte-Spruch auf dem Stapel plazieren möchtest, nutze bitte den "Zauber wirken/Land spielen"-Knopf.
lblError=Fehler
lblWinGame=Gewinne Spiel
lblSetLifetoWhat=Setze Lebenspunkte auf?
lblSetLifeforWhichPlayer=Setze Lebenspunkte für Spieler
lblChoosePermanentstoTap=Wähle Karte zum Tappen
lblChoosePermanentstoUntap=Wähle Karte zum Enttappen
lblWhichTypeofCounter=Welche Art von Marken?
lblHowManyCounters=Wie viele Marken?
lblRemoveCountersFromWhichCard=Entferne Marken von welcher Karte?
lblAddCountersToWhichCard=Lege Marken auf welche Karte?
lblChooseaCard=Wähle eine Karte
lblNoPlayerPriorityDeckCantBeTutoredFrom=Kein Spieler hat Priorität im Moment, daher kein Zugriff auf entsprechendes Deck.
lblNoPlayerPriorityGameStateCannotBeSetup=Kein Spieler hat Priorität im Moment, daher der Spielstand nicht gesetzt werden.
lblErrorLoadingBattleSetupFile=Fehler beim Laden der Spielvorgaben!
lblSelectCardstoAddtoYourDeck=Wähle Karten, um sie deinem Deck hinzuzufügen.
lblAddTheseToMyDeck=Zu meinem Deck hinzufügen
lblChooseaPile=Wähle einen Stapel
lblSelectOrderForSimultaneousAbilities=Wähle Reihenfolge für simultane Fähigkeiten
lblReorderSimultaneousAbilities=Ordne Reihenfolge für simultane Fähigkeiten neu
lblResolveFirst=Zuerst abwickeln
lblMoveCardstoToporBbottomofLibrary=Bewege Karte an Anfang oder Ende der Bibliothek
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=Wähle Karte, welche unter die Bibliothek gelegt werden soll
lblCardsToPutOnTheBottom=Karten, welche unter die Bibliothek gelegt werden sollen
lblArrangeCardsToBePutOnTopOfYourLibrary=Ordne Karten, welche unter die Bibliothek gelegt werden sollen
lblTopOfLibrary=Oben auf Bibliothek
lblSelectCardsToBePutIntoTheGraveyard=Wähle Karten, welche auf den Friedhof gelegt werden sollen
lblCardsToPutInTheGraveyard=Karten, welche auf den Friedhof gelegt werden sollen
This diff is collapsed.
......@@ -309,7 +309,17 @@ public enum FSkinProp {
IMG_ABILITY_SHROUD (new int[] {330, 330, 80, 80}, PropType.ABILITY),
IMG_ABILITY_TRAMPLE (new int[] {412, 330, 80, 80}, PropType.ABILITY),
IMG_ABILITY_VIGILANCE (new int[] {2, 412, 80, 80}, PropType.ABILITY),
//Hexproof From
IMG_ABILITY_HEXPROOF_R (new int[] {2, 494, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_G (new int[] {412, 412, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_B (new int[] {248, 412, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_U (new int[] {84, 494, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_W (new int[] {248, 494, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_C (new int[] {330, 412, 80, 80}, PropType.ABILITY),
IMG_ABILITY_HEXPROOF_UB (new int[] {166, 494, 80, 80}, PropType.ABILITY),
//token icon
IMG_ABILITY_TOKEN (new int[] {330, 494, 80, 80}, PropType.ABILITY),
//Protection From
IMG_ABILITY_PROTECT_ALL (new int[] {248, 84, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_B (new int[] {330, 84, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_BU (new int[] {412, 84, 80, 80}, PropType.ABILITY),
......
......@@ -78,6 +78,7 @@ public class ForgePreferences extends PreferencesStore<ForgePreferences.FPref> {
UI_OVERLAY_CARD_POWER ("true"),
UI_OVERLAY_CARD_MANA_COST ("true"),
UI_OVERLAY_CARD_ID ("true"),
UI_OVERLAY_ABILITY_ICONS("true"),
UI_ENABLE_ONLINE_IMAGE_FETCHER ("false"),
UI_IMAGE_CACHE_MAXIMUM("400"),
UI_OVERLAY_FOIL_EFFECT ("true"),
......