diff --git a/.gitattributes b/.gitattributes index 616114075ab..743a38e3abb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java index 3c7d800bb83..e7d24846a54 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java @@ -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 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); + } + } + } + } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java index 41bc1088d4e..131ce258548 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java @@ -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 commanders = new ArrayList(); + private EnumMap planeDataMap = new EnumMap(ConquestPlane.class); private final CardPool collection = new CardPool(); private final HashMap decks = new HashMap(); @@ -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); } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java b/forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java index 9a07229c974..b81d958138b 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestDataIO.java @@ -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); diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java new file mode 100644 index 00000000000..c3ecca88fc3 --- /dev/null +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java @@ -0,0 +1,12 @@ +package forge.planarconquest; + +import java.util.ArrayList; +import java.util.List; + +public class ConquestPlaneData { + private final List commanders = new ArrayList(); + + public List getCommanders() { + return commanders; + } +} diff --git a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java index affd0225a99..d46b71f7a16 100644 --- a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java +++ b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java @@ -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) {