[Mobile] Added Deckbox and Commander Background for ImageView

- updated Assets required!
This commit is contained in:
Anthony Calosa
2020-10-11 14:18:21 +08:00
parent 35a4316261
commit 688fad9023
7 changed files with 120 additions and 18 deletions

View File

@@ -30,7 +30,8 @@ public class FSkin {
private static final Map<FSkinProp, FSkinImage> images = new HashMap<>(512); private static final Map<FSkinProp, FSkinImage> images = new HashMap<>(512);
private static final Map<Integer, TextureRegion> avatars = new HashMap<>(150); private static final Map<Integer, TextureRegion> avatars = new HashMap<>(150);
private static final Map<Integer, TextureRegion> sleeves = new HashMap<>(64); private static final Map<Integer, TextureRegion> sleeves = new HashMap<>(64);
private static final Map<Integer, TextureRegion> borders = new HashMap<>(2); private static final Map<Integer, TextureRegion> borders = new HashMap<>();
private static final Map<Integer, TextureRegion> deckbox = new HashMap<>();
private static Array<String> allSkins; private static Array<String> allSkins;
private static FileHandle preferredDir; private static FileHandle preferredDir;
@@ -196,6 +197,7 @@ public class FSkin {
final FileHandle f10 = getDefaultSkinFile(ForgeConstants.SPRITE_BORDER_FILE); final FileHandle f10 = getDefaultSkinFile(ForgeConstants.SPRITE_BORDER_FILE);
final FileHandle f11 = getSkinFile(ForgeConstants.SPRITE_BUTTONS_FILE); final FileHandle f11 = getSkinFile(ForgeConstants.SPRITE_BUTTONS_FILE);
final FileHandle f12 = getSkinFile(ForgeConstants.SPRITE_START_FILE); final FileHandle f12 = getSkinFile(ForgeConstants.SPRITE_START_FILE);
final FileHandle f13 = getDefaultSkinFile(ForgeConstants.SPRITE_DECKBOX_FILE);
try { try {
textures.put(f1.path(), new Texture(f1)); textures.put(f1.path(), new Texture(f1));
@@ -331,10 +333,18 @@ public class FSkin {
FSkin.sleeves.put(scount++, new TextureRegion(txDefaultSleeves, i, j, 360, 500)); FSkin.sleeves.put(scount++, new TextureRegion(txDefaultSleeves, i, j, 360, 500));
} }
} }
//borders
Texture bordersBW = new Texture(f10); Texture bordersBW = new Texture(f10);
FSkin.borders.put(0, new TextureRegion(bordersBW, 2, 2, 672, 936)); FSkin.borders.put(0, new TextureRegion(bordersBW, 2, 2, 672, 936));
FSkin.borders.put(1, new TextureRegion(bordersBW, 676, 2, 672, 936)); FSkin.borders.put(1, new TextureRegion(bordersBW, 676, 2, 672, 936));
//deckboxes
Texture deckboxes = new Texture(f13);
//gold bg
FSkin.deckbox.put(0, new TextureRegion(deckboxes, 2, 2, 488, 680));
//deck box for card art
FSkin.deckbox.put(1, new TextureRegion(deckboxes, 492, 2, 488, 680));
//generic deck box
FSkin.deckbox.put(2, new TextureRegion(deckboxes, 982, 2, 488, 680));
preferredIcons.dispose(); preferredIcons.dispose();
pxDefaultAvatars.dispose(); pxDefaultAvatars.dispose();
@@ -430,5 +440,9 @@ public class FSkin {
return borders; return borders;
} }
public static Map<Integer, TextureRegion> getDeckbox() {
return deckbox;
}
public static boolean isLoaded() { return loaded; } public static boolean isLoaded() { return loaded; }
} }

View File

@@ -63,6 +63,7 @@ public class FDeckChooser extends FScreen {
private Callback<Deck> callback; private Callback<Deck> callback;
private NetDeckCategory netDeckCategory; private NetDeckCategory netDeckCategory;
private boolean refreshingDeckType; private boolean refreshingDeckType;
private boolean firstactivation = true;
private final DeckManager lstDecks; private final DeckManager lstDecks;
private final FButton btnNewDeck = new FButton(Localizer.getInstance().getMessage("lblNewDeck")); private final FButton btnNewDeck = new FButton(Localizer.getInstance().getMessage("lblNewDeck"));
@@ -226,6 +227,11 @@ public class FDeckChooser extends FScreen {
@Override @Override
public void onActivate() { public void onActivate() {
//todo investigate why if we don't override, it will display blank for deckview when first activated
if(isAi() && firstactivation) {
needRefreshOnActivate = true;
firstactivation = false;
}
if (needRefreshOnActivate) { if (needRefreshOnActivate) {
needRefreshOnActivate = false; needRefreshOnActivate = false;
refreshDecksList(selectedDeckType, true, null); refreshDecksList(selectedDeckType, true, null);

View File

@@ -1,17 +1,22 @@
package forge.itemmanager.views; package forge.itemmanager.views;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import forge.Forge; import forge.Forge;
import forge.Forge.KeyInputAdapter; import forge.Forge.KeyInputAdapter;
import forge.Graphics; import forge.Graphics;
import forge.assets.FImage; import forge.assets.FImage;
import forge.assets.FImageComplex;
import forge.assets.FSkin;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.assets.FSkinColor.Colors; import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.ImageCache; import forge.assets.ImageCache;
import forge.card.CardFaceSymbols;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.card.CardRenderer.CardStackPosition; import forge.card.CardRenderer.CardStackPosition;
import forge.card.CardZoom; import forge.card.CardZoom;
import forge.card.ColorSet;
import forge.deck.ArchetypeDeckGenerator; import forge.deck.ArchetypeDeckGenerator;
import forge.deck.CardThemedDeckGenerator; import forge.deck.CardThemedDeckGenerator;
import forge.deck.CommanderDeckGenerator; import forge.deck.CommanderDeckGenerator;
@@ -869,7 +874,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
ItemInfo item = getItemAtPoint(x + getLeft(), y + getTop()); ItemInfo item = getItemAtPoint(x + getLeft(), y + getTop());
if (item != null) { if (item != null) {
if(item.getKey() instanceof CardThemedDeckGenerator || item.getKey() instanceof CommanderDeckGenerator if(item.getKey() instanceof CardThemedDeckGenerator || item.getKey() instanceof CommanderDeckGenerator
|| item.getKey() instanceof ArchetypeDeckGenerator){ || item.getKey() instanceof ArchetypeDeckGenerator || item.getKey() instanceof DeckProxy){
FDeckViewer.show(((DeckProxy)item.getKey()).getDeck()); FDeckViewer.show(((DeckProxy)item.getKey()).getDeck());
return true; return true;
} }
@@ -922,6 +927,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
private int index; private int index;
private CardStackPosition pos; private CardStackPosition pos;
private boolean selected; private boolean selected;
private final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE;
private ItemInfo(T item0, Group group0) { private ItemInfo(T item0, Group group0) {
item = item0; item = item0;
@@ -955,7 +961,8 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
final float w = getWidth(); final float w = getWidth();
final float h = getHeight(); final float h = getHeight();
if (selected) { //if round border is enabled, the select highlight is also rounded.. if (selected) {
//if round border is enabled, the select highlight is also rounded..
if (Forge.enableUIMask) { if (Forge.enableUIMask) {
//fillroundrect has rough/aliased corner //fillroundrect has rough/aliased corner
g.fillRoundRect(Color.GREEN, x - SEL_BORDER_SIZE, y - SEL_BORDER_SIZE, g.fillRoundRect(Color.GREEN, x - SEL_BORDER_SIZE, y - SEL_BORDER_SIZE,
@@ -970,14 +977,56 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
} }
if (item instanceof PaperCard) { if (item instanceof PaperCard) {
CardRenderer.drawCard(g, (PaperCard)item, x, y, w, h, pos); CardRenderer.drawCard(g, (PaperCard) item, x, y, w, h, pos);
} } else if (item instanceof DeckProxy) {
else { DeckProxy dp = ((DeckProxy) item);
ColorSet deckColor = dp.getColor();
float scale = 0.75f;
Texture img = ImageCache.getImage(item);
if (img != null) {//generated decks have missing info...
if (Forge.enableUIMask){
//commander bg
g.drawImage(FSkin.getDeckbox().get(0),x, y, w, h);
TextureRegion tr = ImageCache.croppedBorderImage(img);
g.drawImage(tr, x+(w-w*scale)/2, y+(h-h*scale)/1.5f, w*scale, h*scale);
} else {
g.drawImage(img, x, y, w, h);
}
g.drawText(item.getName(), GROUP_HEADER_FONT, Color.WHITE, x + PADDING, y + PADDING*2, w - 2 * PADDING, h - 2 * PADDING, true, Align.center, false);
} else {
if (!dp.isGeneratedDeck()){
FImageComplex card = CardRenderer.getCardArt(dp.getHighestCMCCard().getImageKey(false), false, false, false);
if (card != null){
//card art
card.draw(g, x+((w-w*scale)/2), y+((h-h*scale)/0.75f), w*scale, h*scale/1.85f);
//deck box
g.drawImage(FSkin.getDeckbox().get(1),x, y, w, h);
}
} else {
//generic box
g.drawImage(FSkin.getDeckbox().get(2),x, y, w, h);
}
if (deckColor != null) {
//deck color identity
float symbolSize = IMAGE_SIZE;
if (columnCount == 4)
symbolSize = IMAGE_SIZE * 1.25f;
else if (columnCount == 3)
symbolSize = IMAGE_SIZE * 1.5f;
else if (columnCount == 2)
symbolSize = IMAGE_SIZE * 1.75f;
else if (columnCount == 1)
symbolSize = IMAGE_SIZE * 2f;
CardFaceSymbols.drawColorSet(g, deckColor, x +((w/2) - (CardFaceSymbols.getWidth(deckColor, symbolSize)/1.9f)), y + (h*0.8f), symbolSize);
}
//deck name
g.drawText(item.getName(), GROUP_HEADER_FONT, Color.WHITE, x + PADDING, y + (h/16) + PADDING, w - 2 * PADDING, h - 2 * PADDING, true, Align.center, false);
}
} else {
Texture img = ImageCache.getImage(item); Texture img = ImageCache.getImage(item);
if (img != null) { if (img != null) {
g.drawImage(img, x, y, w, h); g.drawImage(img, x, y, w, h);
} } else {
else {
g.fillRect(Color.BLACK, x, y, w, h); g.fillRect(Color.BLACK, x, y, w, h);
g.drawText(item.getName(), GROUP_HEADER_FONT, Color.WHITE, x + PADDING, y + PADDING, w - 2 * PADDING, h - 2 * PADDING, true, Align.center, false); g.drawText(item.getName(), GROUP_HEADER_FONT, Color.WHITE, x + PADDING, y + PADDING, w - 2 * PADDING, h - 2 * PADDING, true, Align.center, false);
} }

View File

@@ -101,17 +101,22 @@ public class ConquestRewardDialog extends FScrollPane {
float startX = x; float startX = x;
int cardCount = cardRevealers.size(); int cardCount = cardRevealers.size();
cardRevealers.get(0).setBounds(x, y, cardWidth, cardHeight); try {
for (int i = 1; i < cardCount; i++) { cardRevealers.get(0).setBounds(x, y, cardWidth, cardHeight);
if (i % columnCount == 0) { for (int i = 1; i < cardCount; i++) {
x = startX; if (i % columnCount == 0) {
y += cardHeight + PADDING; x = startX;
y += cardHeight + PADDING;
}
else {
x += cardWidth + PADDING;
}
cardRevealers.get(i).setBounds(x, y, cardWidth, cardHeight);
} }
else { } catch (Exception ex) {
x += cardWidth + PADDING; System.err.println(ex.getMessage());
}
cardRevealers.get(i).setBounds(x, y, cardWidth, cardHeight);
} }
return new ScrollBounds(visibleWidth, y + cardHeight + PADDING); return new ScrollBounds(visibleWidth, y + cardHeight + PADDING);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

View File

@@ -1,11 +1,15 @@
package forge.deck; package forge.deck;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
import forge.card.CardSplitType;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Function; import com.google.common.base.Function;
@@ -260,6 +264,29 @@ public class DeckProxy implements InventoryItem {
return highestRarity; return highestRarity;
} }
public PaperCard getHighestCMCCard() {
PaperCard key = null;
Map<PaperCard, Integer> keyCMC = new HashMap<>(64);
for (final Entry <PaperCard, Integer> pc : getDeck().getAllCardsInASinglePool()) {
if (pc.getKey().getRules().getManaCost() != null) {
if (pc.getKey().getRules().getSplitType() != CardSplitType.Split)
keyCMC.put(pc.getKey(),pc.getKey().getRules().getManaCost().getCMC());
}
}
if (!keyCMC.isEmpty()) {
int max = Collections.max(keyCMC.values());
//get any max cmc
for (Entry<PaperCard, Integer> entry : keyCMC.entrySet()) {
if (entry.getValue()==max) {
return entry.getKey();
}
}
}
return key;
}
public Set<GameFormat> getFormats() { public Set<GameFormat> getFormats() {
if (formats == null) { if (formats == null) {
formats = FModel.getFormats().getAllFormatsOfDeck(getDeck()); formats = FModel.getFormats().getAllFormatsOfDeck(getDeck());

View File

@@ -100,6 +100,7 @@ public final class ForgeConstants {
public static final String SPRITE_ABILITY_FILE = "sprite_ability.png"; public static final String SPRITE_ABILITY_FILE = "sprite_ability.png";
public static final String SPRITE_BORDER_FILE = "sprite_border.png"; public static final String SPRITE_BORDER_FILE = "sprite_border.png";
public static final String SPRITE_BUTTONS_FILE = "sprite_buttons.png"; public static final String SPRITE_BUTTONS_FILE = "sprite_buttons.png";
public static final String SPRITE_DECKBOX_FILE = "sprite_deckbox.png";
public static final String SPRITE_START_FILE = "sprite_start.png"; public static final String SPRITE_START_FILE = "sprite_start.png";
public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png"; public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png";
public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png"; public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png";