mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
[Mobile] Added Deckbox and Commander Background for ImageView
- updated Assets required!
This commit is contained in:
@@ -30,7 +30,8 @@ public class FSkin {
|
||||
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> 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 FileHandle preferredDir;
|
||||
@@ -196,6 +197,7 @@ public class FSkin {
|
||||
final FileHandle f10 = getDefaultSkinFile(ForgeConstants.SPRITE_BORDER_FILE);
|
||||
final FileHandle f11 = getSkinFile(ForgeConstants.SPRITE_BUTTONS_FILE);
|
||||
final FileHandle f12 = getSkinFile(ForgeConstants.SPRITE_START_FILE);
|
||||
final FileHandle f13 = getDefaultSkinFile(ForgeConstants.SPRITE_DECKBOX_FILE);
|
||||
|
||||
try {
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
//borders
|
||||
Texture bordersBW = new Texture(f10);
|
||||
FSkin.borders.put(0, new TextureRegion(bordersBW, 2, 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();
|
||||
pxDefaultAvatars.dispose();
|
||||
@@ -430,5 +440,9 @@ public class FSkin {
|
||||
return borders;
|
||||
}
|
||||
|
||||
public static Map<Integer, TextureRegion> getDeckbox() {
|
||||
return deckbox;
|
||||
}
|
||||
|
||||
public static boolean isLoaded() { return loaded; }
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ public class FDeckChooser extends FScreen {
|
||||
private Callback<Deck> callback;
|
||||
private NetDeckCategory netDeckCategory;
|
||||
private boolean refreshingDeckType;
|
||||
private boolean firstactivation = true;
|
||||
|
||||
private final DeckManager lstDecks;
|
||||
private final FButton btnNewDeck = new FButton(Localizer.getInstance().getMessage("lblNewDeck"));
|
||||
@@ -226,6 +227,11 @@ public class FDeckChooser extends FScreen {
|
||||
|
||||
@Override
|
||||
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) {
|
||||
needRefreshOnActivate = false;
|
||||
refreshDecksList(selectedDeckType, true, null);
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
package forge.itemmanager.views;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import forge.Forge;
|
||||
import forge.Forge.KeyInputAdapter;
|
||||
import forge.Graphics;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FImageComplex;
|
||||
import forge.assets.FSkin;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FSkinColor.Colors;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardFaceSymbols;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardRenderer.CardStackPosition;
|
||||
import forge.card.CardZoom;
|
||||
import forge.card.ColorSet;
|
||||
import forge.deck.ArchetypeDeckGenerator;
|
||||
import forge.deck.CardThemedDeckGenerator;
|
||||
import forge.deck.CommanderDeckGenerator;
|
||||
@@ -869,7 +874,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
ItemInfo item = getItemAtPoint(x + getLeft(), y + getTop());
|
||||
if (item != null) {
|
||||
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());
|
||||
return true;
|
||||
}
|
||||
@@ -922,6 +927,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
private int index;
|
||||
private CardStackPosition pos;
|
||||
private boolean selected;
|
||||
private final float IMAGE_SIZE = CardRenderer.MANA_SYMBOL_SIZE;
|
||||
|
||||
private ItemInfo(T item0, Group group0) {
|
||||
item = item0;
|
||||
@@ -955,7 +961,8 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
final float w = getWidth();
|
||||
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) {
|
||||
//fillroundrect has rough/aliased corner
|
||||
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) {
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
if (img != null) {
|
||||
g.drawImage(img, x, y, w, h);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -101,6 +101,7 @@ public class ConquestRewardDialog extends FScrollPane {
|
||||
|
||||
float startX = x;
|
||||
int cardCount = cardRevealers.size();
|
||||
try {
|
||||
cardRevealers.get(0).setBounds(x, y, cardWidth, cardHeight);
|
||||
for (int i = 1; i < cardCount; i++) {
|
||||
if (i % columnCount == 0) {
|
||||
@@ -112,6 +113,10 @@ public class ConquestRewardDialog extends FScrollPane {
|
||||
}
|
||||
cardRevealers.get(i).setBounds(x, y, cardWidth, cardHeight);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
System.err.println(ex.getMessage());
|
||||
}
|
||||
|
||||
return new ScrollBounds(visibleWidth, y + cardHeight + PADDING);
|
||||
}
|
||||
|
||||
|
||||
BIN
forge-gui/res/skins/default/sprite_deckbox.png
Normal file
BIN
forge-gui/res/skins/default/sprite_deckbox.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 195 KiB |
@@ -1,11 +1,15 @@
|
||||
package forge.deck;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import forge.card.CardSplitType;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
@@ -260,6 +264,29 @@ public class DeckProxy implements InventoryItem {
|
||||
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() {
|
||||
if (formats == null) {
|
||||
formats = FModel.getFormats().getAllFormatsOfDeck(getDeck());
|
||||
|
||||
@@ -100,6 +100,7 @@ public final class ForgeConstants {
|
||||
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_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_MANAICONS_FILE = "sprite_manaicons.png";
|
||||
public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png";
|
||||
|
||||
Reference in New Issue
Block a user