Add commander row

This commit is contained in:
drdev
2014-11-24 03:55:45 +00:00
parent 471f866d06
commit e17f55b39e
6 changed files with 101 additions and 10 deletions

1
.gitattributes vendored
View File

@@ -17149,6 +17149,7 @@ forge-gui/src/main/java/forge/planarconquest/ConquestData.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestDeckMap.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestPlane.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestPreferences.java -text
forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java -text
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text

View File

@@ -1,5 +1,7 @@
package forge.screens.planarconquest;
import java.util.List;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.Graphics;
@@ -9,27 +11,36 @@ import forge.assets.FSkinFont;
import forge.assets.TextRenderer;
import forge.assets.FSkinColor.Colors;
import forge.card.CardRenderer;
import forge.card.CardRenderer.CardStackPosition;
import forge.game.card.Card;
import forge.game.card.CardView;
import forge.model.FModel;
import forge.planarconquest.ConquestCommander;
import forge.planarconquest.ConquestData;
import forge.planarconquest.ConquestPlane.Region;
import forge.screens.FScreen;
import forge.toolbox.FCardPanel;
import forge.toolbox.FContainer;
import forge.toolbox.FDisplayObject;
import forge.toolbox.FEvent;
import forge.toolbox.FLabel;
import forge.toolbox.FEvent.FEventHandler;
import forge.util.Utils;
public class ConquestMapScreen extends FScreen {
private static final float PADDING = Utils.scale(5);
private static final FSkinColor BTN_PRESSED_COLOR = FSkinColor.get(Colors.CLR_THEME2);
private static final FSkinColor LINE_COLOR = BTN_PRESSED_COLOR.stepColor(-40);
private static final FSkinColor BACK_COLOR = BTN_PRESSED_COLOR.stepColor(-80);
private static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
private static final FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS);
private static final float LINE_THICKNESS = Utils.scale(1);
private static final float ARROW_ICON_THICKNESS = Utils.scale(3);
private static final float REGION_SLIDER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.7f);
private static final FSkinFont FONT = FSkinFont.get(15);
private final RegionArt regionArt = add(new RegionArt());
private final RegionDisplay regionDisplay = add(new RegionDisplay());
private final CommanderRow commanderRow = add(new CommanderRow());
private ConquestData model;
@@ -49,14 +60,17 @@ public class ConquestMapScreen extends FScreen {
@Override
protected void doLayout(float startY, float width, float height) {
regionArt.setBounds(0, startY, width, width / CardRenderer.CARD_ART_RATIO + REGION_SLIDER_HEIGHT);
float y = startY;
regionDisplay.setBounds(0, y, width, width / CardRenderer.CARD_ART_RATIO + REGION_SLIDER_HEIGHT);
y += regionDisplay.getHeight() + PADDING;
commanderRow.setBounds(0, y, width, 2 * Utils.AVG_FINGER_HEIGHT);
}
private class RegionArt extends FContainer {
private class RegionDisplay extends FContainer {
private final FLabel btnPrev, btnNext;
private final TextRenderer textRenderer = new TextRenderer();
public RegionArt() {
public RegionDisplay() {
btnPrev = add(new FLabel.Builder().icon(new ArrowIcon(REGION_SLIDER_HEIGHT, REGION_SLIDER_HEIGHT, false)).pressedColor(BTN_PRESSED_COLOR).align(HAlignment.CENTER).command(new FEventHandler() {
@Override
public void handleEvent(FEvent e) {
@@ -155,4 +169,55 @@ public class ConquestMapScreen extends FScreen {
btnNext.setBounds(width - REGION_SLIDER_HEIGHT, y, size, size);
}
}
private class CommanderRow extends FContainer {
private CommanderPanel[] panels = new CommanderPanel[4];
private CommanderRow() {
for (int i = 0; i < panels.length; i++) {
panels[i] = add(new CommanderPanel(i));
}
}
@Override
protected void doLayout(float width, float height) {
float panelHeight = height;
float panelWidth = panelHeight / FCardPanel.ASPECT_RATIO;
float extraSpace = width - panelWidth * panels.length;
float gap = extraSpace / (panels.length + 3);
float dx = panelWidth + gap;
float x = 2 * gap;
for (int i = 0; i < panels.length; i++) {
panels[i].setBounds(x, 0, panelWidth, panelHeight);
x += dx;
}
}
private class CommanderPanel extends FDisplayObject {
private final int index;
private CardView card;
private CommanderPanel(int index0) {
index = index0;
}
@Override
public void draw(Graphics g) {
float w = getWidth();
float h = getHeight();
g.drawRect(LINE_THICKNESS, BORDER_COLOR, -LINE_THICKNESS, -LINE_THICKNESS, w + 2 * LINE_THICKNESS, h + 2 * LINE_THICKNESS);
if (card == null) {
List<ConquestCommander> commanders = model.getCurrentPlaneData().getCommanders();
if (index < commanders.size()) {
card = Card.getCardForUi(commanders.get(index).getCard()).getView();
}
}
if (card != null) {
CardRenderer.drawCardWithOverlays(g, card, 0, 0, w, h, CardStackPosition.Top);
}
}
}
}
}

View File

@@ -25,6 +25,7 @@ import forge.properties.ForgeConstants;
import java.io.File;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
@@ -44,7 +45,7 @@ public final class ConquestData {
private int difficulty;
private ConquestPlane startingPlane, currentPlane;
private int currentRegionIndex;
private List<ConquestCommander> commanders = new ArrayList<ConquestCommander>();
private EnumMap<ConquestPlane, ConquestPlaneData> planeDataMap = new EnumMap<ConquestPlane, ConquestPlaneData>(ConquestPlane.class);
private final CardPool collection = new CardPool();
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
@@ -62,7 +63,7 @@ public final class ConquestData {
private void addCommander(PaperCard card) {
ConquestCommander commander = new ConquestCommander(card, currentPlane.getCardPool());
commanders.add(commander);
getCurrentPlaneData().getCommanders().add(commander);
decks.put(commander.getDeck().getName(), commander.getDeck());
collection.addAll(commander.getDeck().getMain());
collection.add(card);
@@ -84,6 +85,15 @@ public final class ConquestData {
return currentPlane;
}
public ConquestPlaneData getCurrentPlaneData() {
ConquestPlaneData planeData = planeDataMap.get(currentPlane);
if (planeData == null) {
planeData = new ConquestPlaneData();
planeDataMap.put(currentPlane, planeData);
}
return planeData;
}
public Region getCurrentRegion() {
return currentPlane.getRegions().get(currentRegionIndex);
}

View File

@@ -33,8 +33,11 @@ import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import com.thoughtworks.xstream.XStream;
import forge.deck.CardPool;
import forge.properties.ForgeConstants;
import forge.quest.io.QuestDataIO.DeckToXml;
import forge.quest.io.QuestDataIO.ItemPoolToXml;
import forge.util.FileUtil;
import forge.util.IgnoringXStream;
import forge.util.ItemPool;
@@ -47,6 +50,8 @@ public class ConquestDataIO {
protected static XStream getSerializer(final boolean isIgnoring) {
final XStream xStream = isIgnoring ? new IgnoringXStream() : new XStream();
xStream.registerConverter(new ItemPoolToXml());
xStream.registerConverter(new DeckToXml());
xStream.autodetectAnnotations(true);
xStream.alias("CardPool", ItemPool.class);
xStream.alias("DeckSection", CardPool.class);

View File

@@ -0,0 +1,12 @@
package forge.planarconquest;
import java.util.ArrayList;
import java.util.List;
public class ConquestPlaneData {
private final List<ConquestCommander> commanders = new ArrayList<ConquestCommander>();
public List<ConquestCommander> getCommanders() {
return commanders;
}
}

View File

@@ -675,12 +675,10 @@ public class QuestDataIO {
}
return output;
}
}
private static class DeckToXml extends ItemPoolToXml {
public static class DeckToXml extends ItemPoolToXml {
/* (non-Javadoc)
* @see com.thoughtworks.xstream.converters.ConverterMatcher#canConvert(java.lang.Class)
@@ -748,7 +746,7 @@ public class QuestDataIO {
}
}
private static class ItemPoolToXml implements Converter {
public static class ItemPoolToXml implements Converter {
@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(final Class clasz) {