mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Add commander row
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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/ConquestDataIO.java -text
|
||||||
forge-gui/src/main/java/forge/planarconquest/ConquestDeckMap.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/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/ConquestPreferences.java -text
|
||||||
forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java -text
|
forge-gui/src/main/java/forge/planarconquest/ConquestUtil.java -text
|
||||||
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text
|
forge-gui/src/main/java/forge/player/GamePlayerUtil.java -text
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package forge.screens.planarconquest;
|
package forge.screens.planarconquest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||||
|
|
||||||
import forge.Graphics;
|
import forge.Graphics;
|
||||||
@@ -9,27 +11,36 @@ import forge.assets.FSkinFont;
|
|||||||
import forge.assets.TextRenderer;
|
import forge.assets.TextRenderer;
|
||||||
import forge.assets.FSkinColor.Colors;
|
import forge.assets.FSkinColor.Colors;
|
||||||
import forge.card.CardRenderer;
|
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.model.FModel;
|
||||||
|
import forge.planarconquest.ConquestCommander;
|
||||||
import forge.planarconquest.ConquestData;
|
import forge.planarconquest.ConquestData;
|
||||||
import forge.planarconquest.ConquestPlane.Region;
|
import forge.planarconquest.ConquestPlane.Region;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
|
import forge.toolbox.FCardPanel;
|
||||||
import forge.toolbox.FContainer;
|
import forge.toolbox.FContainer;
|
||||||
|
import forge.toolbox.FDisplayObject;
|
||||||
import forge.toolbox.FEvent;
|
import forge.toolbox.FEvent;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class ConquestMapScreen extends FScreen {
|
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 BTN_PRESSED_COLOR = FSkinColor.get(Colors.CLR_THEME2);
|
||||||
private static final FSkinColor LINE_COLOR = BTN_PRESSED_COLOR.stepColor(-40);
|
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 BACK_COLOR = BTN_PRESSED_COLOR.stepColor(-80);
|
||||||
private static final FSkinColor FORE_COLOR = FSkinColor.get(Colors.CLR_TEXT);
|
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 LINE_THICKNESS = Utils.scale(1);
|
||||||
private static final float ARROW_ICON_THICKNESS = Utils.scale(3);
|
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 float REGION_SLIDER_HEIGHT = Math.round(Utils.AVG_FINGER_HEIGHT * 0.7f);
|
||||||
private static final FSkinFont FONT = FSkinFont.get(15);
|
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;
|
private ConquestData model;
|
||||||
|
|
||||||
@@ -49,14 +60,17 @@ public class ConquestMapScreen extends FScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doLayout(float startY, float width, float height) {
|
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 FLabel btnPrev, btnNext;
|
||||||
private final TextRenderer textRenderer = new TextRenderer();
|
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() {
|
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
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
@@ -155,4 +169,55 @@ public class ConquestMapScreen extends FScreen {
|
|||||||
btnNext.setBounds(width - REGION_SLIDER_HEIGHT, y, size, size);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import forge.properties.ForgeConstants;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ public final class ConquestData {
|
|||||||
private int difficulty;
|
private int difficulty;
|
||||||
private ConquestPlane startingPlane, currentPlane;
|
private ConquestPlane startingPlane, currentPlane;
|
||||||
private int currentRegionIndex;
|
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 CardPool collection = new CardPool();
|
||||||
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
|
private final HashMap<String, Deck> decks = new HashMap<String, Deck>();
|
||||||
@@ -62,7 +63,7 @@ public final class ConquestData {
|
|||||||
|
|
||||||
private void addCommander(PaperCard card) {
|
private void addCommander(PaperCard card) {
|
||||||
ConquestCommander commander = new ConquestCommander(card, currentPlane.getCardPool());
|
ConquestCommander commander = new ConquestCommander(card, currentPlane.getCardPool());
|
||||||
commanders.add(commander);
|
getCurrentPlaneData().getCommanders().add(commander);
|
||||||
decks.put(commander.getDeck().getName(), commander.getDeck());
|
decks.put(commander.getDeck().getName(), commander.getDeck());
|
||||||
collection.addAll(commander.getDeck().getMain());
|
collection.addAll(commander.getDeck().getMain());
|
||||||
collection.add(card);
|
collection.add(card);
|
||||||
@@ -84,6 +85,15 @@ public final class ConquestData {
|
|||||||
return currentPlane;
|
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() {
|
public Region getCurrentRegion() {
|
||||||
return currentPlane.getRegions().get(currentRegionIndex);
|
return currentPlane.getRegions().get(currentRegionIndex);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,11 @@ import org.xml.sax.InputSource;
|
|||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
import com.thoughtworks.xstream.XStream;
|
import com.thoughtworks.xstream.XStream;
|
||||||
|
|
||||||
import forge.deck.CardPool;
|
import forge.deck.CardPool;
|
||||||
import forge.properties.ForgeConstants;
|
import forge.properties.ForgeConstants;
|
||||||
|
import forge.quest.io.QuestDataIO.DeckToXml;
|
||||||
|
import forge.quest.io.QuestDataIO.ItemPoolToXml;
|
||||||
import forge.util.FileUtil;
|
import forge.util.FileUtil;
|
||||||
import forge.util.IgnoringXStream;
|
import forge.util.IgnoringXStream;
|
||||||
import forge.util.ItemPool;
|
import forge.util.ItemPool;
|
||||||
@@ -47,6 +50,8 @@ public class ConquestDataIO {
|
|||||||
|
|
||||||
protected static XStream getSerializer(final boolean isIgnoring) {
|
protected static XStream getSerializer(final boolean isIgnoring) {
|
||||||
final XStream xStream = isIgnoring ? new IgnoringXStream() : new XStream();
|
final XStream xStream = isIgnoring ? new IgnoringXStream() : new XStream();
|
||||||
|
xStream.registerConverter(new ItemPoolToXml());
|
||||||
|
xStream.registerConverter(new DeckToXml());
|
||||||
xStream.autodetectAnnotations(true);
|
xStream.autodetectAnnotations(true);
|
||||||
xStream.alias("CardPool", ItemPool.class);
|
xStream.alias("CardPool", ItemPool.class);
|
||||||
xStream.alias("DeckSection", CardPool.class);
|
xStream.alias("DeckSection", CardPool.class);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -675,12 +675,10 @@ public class QuestDataIO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
public static class DeckToXml extends ItemPoolToXml {
|
||||||
|
|
||||||
private static class DeckToXml extends ItemPoolToXml {
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see com.thoughtworks.xstream.converters.ConverterMatcher#canConvert(java.lang.Class)
|
* @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")
|
@SuppressWarnings("rawtypes")
|
||||||
@Override
|
@Override
|
||||||
public boolean canConvert(final Class clasz) {
|
public boolean canConvert(final Class clasz) {
|
||||||
|
|||||||
Reference in New Issue
Block a user