mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 04:08:01 +00:00
Add Commanders screen for Planar Conquest
This commit is contained in:
6
.gitattributes
vendored
6
.gitattributes
vendored
@@ -1259,10 +1259,11 @@ forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/CardTypeFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/ColorFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/ComboBoxFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/DeckFolderFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/DeckStatTypeFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java -text
|
||||
forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java -text
|
||||
@@ -1333,6 +1334,7 @@ forge-gui-mobile/src/forge/screens/match/winlose/ViewWinLose.java -text
|
||||
forge-gui-mobile/src/forge/screens/online/OnlineChatScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/online/OnlineLobbyScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/online/OnlineMenu.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestCommandersScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestDeckEditor.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMapScreen.java -text
|
||||
forge-gui-mobile/src/forge/screens/planarconquest/ConquestMenu.java -text
|
||||
@@ -18298,11 +18300,11 @@ 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/ConquestEvent.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestEventResult.java -text
|
||||
forge-gui/src/main/java/forge/planarconquest/ConquestLocation.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/ConquestRecord.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/HumanCostDecision.java -text
|
||||
|
||||
@@ -16,6 +16,7 @@ import forge.game.card.CardView;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.model.FModel;
|
||||
import forge.planarconquest.ConquestCommander;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.screens.match.MatchController;
|
||||
@@ -126,6 +127,9 @@ public class CardZoom extends FOverlay {
|
||||
if (item instanceof IPaperCard) {
|
||||
return CardView.getCardForUi((IPaperCard)item);
|
||||
}
|
||||
if (item instanceof ConquestCommander) {
|
||||
return CardView.getCardForUi(((ConquestCommander)item).getCard());
|
||||
}
|
||||
if (item instanceof InventoryItem) {
|
||||
InventoryItem ii = (InventoryItem)item;
|
||||
return new CardView(-1, null, ii.getName(), null, ImageKeys.getImageKey(ii, false));
|
||||
|
||||
@@ -15,7 +15,6 @@ import forge.game.IHasGameType;
|
||||
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||
import forge.itemmanager.filters.DeckColorFilter;
|
||||
import forge.itemmanager.filters.DeckFormatFilter;
|
||||
import forge.itemmanager.filters.DeckSearchFilter;
|
||||
import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
@@ -70,7 +69,7 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
|
||||
|
||||
@Override
|
||||
protected TextSearchFilter<DeckProxy> createSearchFilter() {
|
||||
return new DeckSearchFilter(this);
|
||||
return new TextSearchFilter<DeckProxy>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,10 +5,9 @@ import com.google.common.base.Predicate;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.SFilterUtil;
|
||||
import forge.itemmanager.SItemManagerUtil.StatTypes;
|
||||
|
||||
|
||||
public class CardColorFilter extends StatTypeFilter<PaperCard> {
|
||||
public class CardColorFilter extends ColorFilter<PaperCard> {
|
||||
public CardColorFilter(ItemManager<? super PaperCard> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
@@ -18,20 +17,6 @@ public class CardColorFilter extends StatTypeFilter<PaperCard> {
|
||||
return new CardColorFilter(itemManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildWidget(Widget widget) {
|
||||
/*if (itemManager instanceof SpellShopManager) {
|
||||
addToggleButton(widget, StatTypes.PACK_OR_DECK);
|
||||
}*/
|
||||
addToggleButton(widget, StatTypes.WHITE);
|
||||
addToggleButton(widget, StatTypes.BLUE);
|
||||
addToggleButton(widget, StatTypes.BLACK);
|
||||
addToggleButton(widget, StatTypes.RED);
|
||||
addToggleButton(widget, StatTypes.GREEN);
|
||||
addToggleButton(widget, StatTypes.COLORLESS);
|
||||
addToggleButton(widget, StatTypes.MULTICOLOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<PaperCard> buildPredicate() {
|
||||
return SFilterUtil.buildColorFilter(buttonMap);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package forge.itemmanager.filters;
|
||||
|
||||
import forge.item.InventoryItem;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.SItemManagerUtil.StatTypes;
|
||||
|
||||
public abstract class ColorFilter<T extends InventoryItem> extends StatTypeFilter<T> {
|
||||
public ColorFilter(ItemManager<? super T> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildWidget(Widget widget) {
|
||||
addToggleButton(widget, StatTypes.WHITE);
|
||||
addToggleButton(widget, StatTypes.BLUE);
|
||||
addToggleButton(widget, StatTypes.BLACK);
|
||||
addToggleButton(widget, StatTypes.RED);
|
||||
addToggleButton(widget, StatTypes.GREEN);
|
||||
addToggleButton(widget, StatTypes.COLORLESS);
|
||||
addToggleButton(widget, StatTypes.MULTICOLOR);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package forge.itemmanager.filters;
|
||||
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.toolbox.FComboBox;
|
||||
import forge.toolbox.FDisplayObject;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
|
||||
public abstract class ComboBoxFilter<T extends InventoryItem, V> extends ItemFilter<T> {
|
||||
protected V filterValue;
|
||||
private boolean preventHandling = false;
|
||||
private FComboBox<Object> comboBox = new FComboBox<Object>();
|
||||
|
||||
protected ComboBoxFilter(String allText, Iterable<V> values, ItemManager<? super T> itemManager0) {
|
||||
this(allText, itemManager0);
|
||||
for (V value : values) {
|
||||
comboBox.addItem(value);
|
||||
}
|
||||
}
|
||||
protected ComboBoxFilter(String allText, V[] values, ItemManager<? super T> itemManager0) {
|
||||
this(allText, itemManager0);
|
||||
for (V value : values) {
|
||||
comboBox.addItem(value);
|
||||
}
|
||||
}
|
||||
private ComboBoxFilter(String allText, ItemManager<? super T> itemManager0) {
|
||||
super(itemManager0);
|
||||
|
||||
comboBox.setFont(FSkinFont.get(12));
|
||||
comboBox.addItem(allText);
|
||||
comboBox.setChangedHandler(new FEventHandler() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (preventHandling) { return; }
|
||||
|
||||
int index = comboBox.getSelectedIndex();
|
||||
if (index == -1) {
|
||||
//Do nothing when index set to -1
|
||||
}
|
||||
else if (index == 0) {
|
||||
filterValue = null;
|
||||
applyChange();
|
||||
}
|
||||
else {
|
||||
filterValue = (V)comboBox.getSelectedItem();
|
||||
applyChange();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
preventHandling = true;
|
||||
comboBox.setSelectedIndex(0);
|
||||
preventHandling = false;
|
||||
filterValue = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FDisplayObject getMainComponent() {
|
||||
return comboBox;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return filterValue == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildWidget(Widget widget) {
|
||||
widget.add(comboBox);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doWidgetLayout(float width, float height) {
|
||||
comboBox.setSize(width, height);
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,9 @@ import com.google.common.base.Predicate;
|
||||
import forge.deck.DeckProxy;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.SFilterUtil;
|
||||
import forge.itemmanager.SItemManagerUtil.StatTypes;
|
||||
|
||||
|
||||
public class DeckColorFilter extends StatTypeFilter<DeckProxy> {
|
||||
public class DeckColorFilter extends ColorFilter<DeckProxy> {
|
||||
public DeckColorFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
@@ -18,17 +17,6 @@ public class DeckColorFilter extends StatTypeFilter<DeckProxy> {
|
||||
return new DeckColorFilter(itemManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildWidget(Widget widget) {
|
||||
addToggleButton(widget, StatTypes.DECK_WHITE);
|
||||
addToggleButton(widget, StatTypes.DECK_BLUE);
|
||||
addToggleButton(widget, StatTypes.DECK_BLACK);
|
||||
addToggleButton(widget, StatTypes.DECK_RED);
|
||||
addToggleButton(widget, StatTypes.DECK_GREEN);
|
||||
addToggleButton(widget, StatTypes.DECK_COLORLESS);
|
||||
addToggleButton(widget, StatTypes.DECK_MULTICOLOR);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<DeckProxy> buildPredicate() {
|
||||
return SFilterUtil.buildDeckColorFilter(buttonMap);
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
package forge.itemmanager.filters;
|
||||
|
||||
import forge.deck.DeckProxy;
|
||||
import forge.itemmanager.ItemManager;
|
||||
|
||||
|
||||
public class DeckSearchFilter extends TextSearchFilter<DeckProxy> {
|
||||
public DeckSearchFilter(ItemManager<? super DeckProxy> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<DeckProxy> createCopy() {
|
||||
DeckSearchFilter copy = new DeckSearchFilter(itemManager);
|
||||
copy.getWidget(); //initialize widget
|
||||
copy.txtSearch.setText(this.txtSearch.getText());
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,229 @@
|
||||
package forge.screens.planarconquest;
|
||||
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
|
||||
import com.google.common.base.Predicate;
|
||||
|
||||
import forge.Forge;
|
||||
import forge.Graphics;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.card.CardFaceSymbols;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.ColorSet;
|
||||
import forge.deck.FDeckChooser;
|
||||
import forge.deck.FDeckViewer;
|
||||
import forge.item.PaperCard;
|
||||
import forge.itemmanager.ItemManager;
|
||||
import forge.itemmanager.ItemManagerConfig;
|
||||
import forge.itemmanager.SFilterUtil;
|
||||
import forge.itemmanager.filters.AdvancedSearchFilter;
|
||||
import forge.itemmanager.filters.ColorFilter;
|
||||
import forge.itemmanager.filters.ComboBoxFilter;
|
||||
import forge.itemmanager.filters.ItemFilter;
|
||||
import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.model.FModel;
|
||||
import forge.planarconquest.ConquestCommander;
|
||||
import forge.planarconquest.ConquestPlane;
|
||||
import forge.planarconquest.ConquestRecord;
|
||||
import forge.screens.FScreen;
|
||||
import forge.toolbox.FEvent;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
|
||||
public class ConquestCommandersScreen extends FScreen {
|
||||
private final CommanderManager lstCommanders = add(new CommanderManager());
|
||||
private final FLabel lblTip = add(new FLabel.Builder()
|
||||
.text("Double-tap to edit deck (Long-press to view)")
|
||||
.textColor(FLabel.INLINE_LABEL_COLOR)
|
||||
.align(HAlignment.CENTER).font(FSkinFont.get(12)).build());
|
||||
|
||||
private boolean needRefreshOnActivate = true;
|
||||
|
||||
public ConquestCommandersScreen() {
|
||||
super("", ConquestMenu.getMenu());
|
||||
|
||||
lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS);
|
||||
lstCommanders.setItemActivateHandler(new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
editSelectedDeck();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivate() {
|
||||
setHeaderCaption(FModel.getConquest().getName());
|
||||
|
||||
if (needRefreshOnActivate) {
|
||||
needRefreshOnActivate = false;
|
||||
refreshCommanders();
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshCommanders() {
|
||||
lstCommanders.setPool(FModel.getConquest().getModel().getCommanders());
|
||||
lstCommanders.setup(ItemManagerConfig.CONQUEST_COMMANDERS);
|
||||
}
|
||||
|
||||
private void editSelectedDeck() {
|
||||
final ConquestCommander commander = lstCommanders.getSelectedItem();
|
||||
if (commander == null) { return; }
|
||||
|
||||
needRefreshOnActivate = true;
|
||||
Forge.openScreen(new ConquestDeckEditor(commander));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doLayout(float startY, float width, float height) {
|
||||
float x = ItemFilter.PADDING;
|
||||
float y = startY;
|
||||
float w = width - 2 * x;
|
||||
float labelHeight = lblTip.getAutoSizeBounds().height;
|
||||
float listHeight = height - labelHeight - y - 2 * FDeckChooser.PADDING;
|
||||
|
||||
lstCommanders.setBounds(x, y, w, listHeight);
|
||||
y += listHeight + FDeckChooser.PADDING;
|
||||
lblTip.setBounds(x, y, w, labelHeight);
|
||||
}
|
||||
|
||||
private static class CommanderManager extends ItemManager<ConquestCommander> {
|
||||
private CommanderManager() {
|
||||
super(ConquestCommander.class, true);
|
||||
setCaption("Commanders");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addDefaultFilters() {
|
||||
addFilter(new CommanderColorFilter(this));
|
||||
addFilter(new CommanderOriginFilter(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextSearchFilter<? extends ConquestCommander> createSearchFilter() {
|
||||
return new TextSearchFilter<ConquestCommander>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AdvancedSearchFilter<? extends ConquestCommander> createAdvancedSearchFilter() {
|
||||
return new AdvancedSearchFilter<ConquestCommander>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemRenderer getListItemRenderer(final CompactModeHandler compactModeHandler) {
|
||||
return new ItemRenderer() {
|
||||
@Override
|
||||
public float getItemHeight() {
|
||||
return CardRenderer.getCardListItemHeight(compactModeHandler.isCompactMode()); //use same height for commanders as for cards
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean tap(Integer index, Entry<ConquestCommander, Integer> value, float x, float y, int count) {
|
||||
return CardRenderer.cardListItemTap(model.getOrderedList(), index, CommanderManager.this, x, y, count, compactModeHandler.isCompactMode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean longPress(Integer index, Entry<ConquestCommander, Integer> value, float x, float y) {
|
||||
FDeckViewer.show(value.getKey().getDeck());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawValue(Graphics g, Entry<ConquestCommander, Integer> value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) {
|
||||
ConquestCommander commander = value.getKey();
|
||||
PaperCard card = commander.getCard();
|
||||
ConquestRecord record = commander.getRecord();
|
||||
|
||||
//draw card art
|
||||
FImage cardArt = CardRenderer.getCardArt(card);
|
||||
float cardArtHeight = h + 2 * FList.PADDING;
|
||||
float cardArtWidth = cardArtHeight * CardRenderer.CARD_ART_RATIO;
|
||||
if (cardArt != null) {
|
||||
g.drawImage(cardArt, x - FList.PADDING, y - FList.PADDING, cardArtWidth, cardArtHeight);
|
||||
}
|
||||
|
||||
//draw name and color on first line
|
||||
x += cardArtWidth;
|
||||
float imageSize = CardRenderer.MANA_SYMBOL_SIZE;
|
||||
ColorSet cardColor = card.getRules().getColor();
|
||||
float availableWidth = w - cardArtWidth - CardFaceSymbols.getWidth(cardColor, imageSize) - FList.PADDING;
|
||||
g.drawText(card.getName(), font, foreColor, x, y, availableWidth, imageSize, false, HAlignment.LEFT, true);
|
||||
CardFaceSymbols.drawColorSet(g, cardColor, x + availableWidth + FList.PADDING, y, imageSize);
|
||||
|
||||
if (compactModeHandler.isCompactMode()) {
|
||||
return; //skip second line if compact mode
|
||||
}
|
||||
|
||||
//draw origin, record, and set/rarity on second line
|
||||
font = FSkinFont.get(12);
|
||||
float lineHeight = font.getLineHeight();
|
||||
|
||||
y += imageSize + FList.PADDING + CardRenderer.SET_BOX_MARGIN;
|
||||
String set = card.getEdition();
|
||||
float setWidth = CardRenderer.getSetWidth(font, set);
|
||||
availableWidth = w - cardArtWidth - setWidth;
|
||||
|
||||
g.drawText(commander.getOrigin() + " (" + record.getWins() + "W / " + record.getLosses() + "L)", font, foreColor, x, y, availableWidth, lineHeight, false, HAlignment.LEFT, true);
|
||||
|
||||
x += availableWidth + CardRenderer.SET_BOX_MARGIN;
|
||||
y -= CardRenderer.SET_BOX_MARGIN;
|
||||
CardRenderer.drawSetLabel(g, font, set, card.getRarity(), x, y, setWidth, lineHeight + 2 * CardRenderer.SET_BOX_MARGIN);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private static class CommanderColorFilter extends ColorFilter<ConquestCommander> {
|
||||
public CommanderColorFilter(ItemManager<? super ConquestCommander> itemManager0) {
|
||||
super(itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<ConquestCommander> createCopy() {
|
||||
return new CommanderColorFilter(itemManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Predicate<ConquestCommander> buildPredicate() {
|
||||
return new Predicate<ConquestCommander>() {
|
||||
private final Predicate<PaperCard> pred = SFilterUtil.buildColorFilter(buttonMap);
|
||||
|
||||
@Override
|
||||
public boolean apply(ConquestCommander input) {
|
||||
return pred.apply(input.getCard());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private static class CommanderOriginFilter extends ComboBoxFilter<ConquestCommander, ConquestPlane> {
|
||||
public CommanderOriginFilter(ItemManager<? super ConquestCommander> itemManager0) {
|
||||
super("All Planes", ConquestPlane.values(), itemManager0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemFilter<ConquestCommander> createCopy() {
|
||||
CommanderOriginFilter copy = new CommanderOriginFilter(itemManager);
|
||||
copy.filterValue = filterValue;
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<ConquestCommander> buildPredicate() {
|
||||
return new Predicate<ConquestCommander>() {
|
||||
@Override
|
||||
public boolean apply(ConquestCommander input) {
|
||||
if (filterValue == null) {
|
||||
return true;
|
||||
}
|
||||
return input.getOriginPlane() == filterValue;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import forge.toolbox.FEvent.FEventHandler;
|
||||
public class ConquestMenu extends FPopupMenu {
|
||||
private static final ConquestMenu conquestMenu = new ConquestMenu();
|
||||
private static final ConquestMapScreen mapScreen = new ConquestMapScreen();
|
||||
private static final ConquestCommandersScreen commandersScreen = new ConquestCommandersScreen();
|
||||
private static final ConquestPrefsScreen prefsScreen = new ConquestPrefsScreen();
|
||||
|
||||
private static final FMenuItem mapItem = new FMenuItem("Planar Map", FSkinImage.QUEST_MAP, new FEventHandler() {
|
||||
@@ -31,6 +32,12 @@ public class ConquestMenu extends FPopupMenu {
|
||||
Forge.openScreen(mapScreen);
|
||||
}
|
||||
});
|
||||
private static final FMenuItem commandersItem = new FMenuItem("Commanders", FSkinImage.DECKLIST, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
Forge.openScreen(commandersScreen);
|
||||
}
|
||||
});
|
||||
private static final FMenuItem prefsItem = new FMenuItem("Preferences", FSkinImage.SETTINGS, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
@@ -91,6 +98,7 @@ public class ConquestMenu extends FPopupMenu {
|
||||
protected void buildMenu() {
|
||||
FScreen currentScreen = Forge.getCurrentScreen();
|
||||
addItem(mapItem); mapItem.setSelected(currentScreen == mapScreen);
|
||||
addItem(commandersItem); mapItem.setSelected(currentScreen == commandersScreen);
|
||||
addItem(prefsItem); prefsItem.setSelected(currentScreen == prefsScreen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -298,7 +298,7 @@ public class LoadConquestScreen extends LaunchScreen {
|
||||
float iconSize = h + Utils.scale(1);
|
||||
float iconOffset = SettingsScreen.SETTING_PADDING - Utils.scale(2);
|
||||
|
||||
String cards = String.valueOf(value.getCollection().size());
|
||||
String cards = String.valueOf(value.getUnlockedCount());
|
||||
font = FSkinFont.get(12);
|
||||
float cardsWidth = font.getBounds(cards).width + iconSize + SettingsScreen.SETTING_PADDING;
|
||||
g.drawText(value.getPlaneswalker().getName() + " - " + value.getCurrentPlane().getName(), font, SettingsScreen.DESC_COLOR, x, y, w - cardsWidth, h, false, HAlignment.LEFT, false);
|
||||
|
||||
@@ -42,6 +42,8 @@ public enum ItemManagerConfig {
|
||||
null, null, 4, 0),
|
||||
QUEST_DECK_EDITOR(SColumnUtil.getQuestDeckEditorDefaultColumns(), false, false, false,
|
||||
GroupDef.DEFAULT, ColumnDef.CMC, 4, 1),
|
||||
CONQUEST_COMMANDERS(SColumnUtil.getDecksDefaultColumns(true, false), false, false, false,
|
||||
null, null, 3, 0),
|
||||
CONQUEST_COLLECTION(SColumnUtil.getConquestCollectionDefaultColumns(), false, false, false,
|
||||
null, null, 4, 0),
|
||||
CONQUEST_DECK_EDITOR(SColumnUtil.getConquestDeckEditorDefaultColumns(), false, false, false,
|
||||
|
||||
@@ -2,19 +2,45 @@ package forge.planarconquest;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.generation.DeckGenPool;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.PaperCard;
|
||||
import forge.planarconquest.ConquestPlane.Region;
|
||||
|
||||
public class ConquestCommander {
|
||||
public class ConquestCommander implements InventoryItem {
|
||||
private final PaperCard card;
|
||||
private final Deck deck;
|
||||
private final ConquestRecord record;
|
||||
private final ConquestPlane originPlane;
|
||||
private final String originRegionName;
|
||||
|
||||
public ConquestCommander(PaperCard card0) {
|
||||
card = card0;
|
||||
deck = new Deck(card0.getName());
|
||||
this(card0, new Deck(card0.getName()));
|
||||
}
|
||||
public ConquestCommander(PaperCard card0, DeckGenPool cardPool0, boolean forAi) {
|
||||
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi));
|
||||
}
|
||||
private ConquestCommander(PaperCard card0, Deck deck0) {
|
||||
card = card0;
|
||||
deck = ConquestUtil.generateDeck(card0, cardPool0, forAi);
|
||||
deck = deck0;
|
||||
record = new ConquestRecord();
|
||||
|
||||
//determine origin of commander
|
||||
ConquestPlane originPlane0 = null;
|
||||
String originRegionName0 = null;
|
||||
for (ConquestPlane plane : ConquestPlane.values()) {
|
||||
if (plane.getCommanders().contains(card)) {
|
||||
originPlane0 = plane;
|
||||
for (Region region : plane.getRegions()) {
|
||||
if (region.getCommanders().contains(card)) {
|
||||
originRegionName0 = region.getName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
originPlane = originPlane0;
|
||||
originRegionName = originRegionName0;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
@@ -41,6 +67,24 @@ public class ConquestCommander {
|
||||
return deck;
|
||||
}
|
||||
|
||||
public ConquestRecord getRecord() {
|
||||
return record;
|
||||
}
|
||||
|
||||
public String getOrigin() {
|
||||
return originPlane.getName() + " - " + originRegionName;
|
||||
}
|
||||
|
||||
public ConquestPlane getOriginPlane() {
|
||||
return originPlane;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemType() {
|
||||
return "Commander";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return card.getName();
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ public class ConquestController {
|
||||
List<PaperCard> mythics = new ArrayList<PaperCard>();
|
||||
int newCardCount = 0;
|
||||
for (PaperCard c : cardPool) {
|
||||
if ((pred == null || pred.apply(c.getRules())) && !model.getCollection().contains(c)) {
|
||||
if ((pred == null || pred.apply(c.getRules())) && !model.hasUnlockedCard(c)) {
|
||||
switch (c.getRarity()) {
|
||||
case Common:
|
||||
commons.add(c);
|
||||
@@ -439,7 +439,7 @@ public class ConquestController {
|
||||
}
|
||||
}
|
||||
|
||||
model.addCardsToCollection(rewards);
|
||||
model.unlockCards(rewards);
|
||||
|
||||
String message = messagePrefix;
|
||||
if (messageSuffix != null) {
|
||||
@@ -513,7 +513,7 @@ public class ConquestController {
|
||||
}
|
||||
|
||||
BoosterUtils.sort(rewards);
|
||||
model.addCardsToCollection(rewards);
|
||||
model.unlockCards(rewards);
|
||||
view.showCards("Booster contained " + count + " new card" + (count != 1 ? "s" : ""), rewards);
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ public class ConquestController {
|
||||
List<PaperCard> cards = new ArrayList<PaperCard>();
|
||||
for (Entry<PaperCard, Integer> entry : gameRunner.event.getOpponentDeck().getMain()) {
|
||||
PaperCard c = entry.getKey();
|
||||
if (!c.getRules().getType().isBasicLand() && !getModel().getCollection().contains(c)) {
|
||||
if (!c.getRules().getType().isBasicLand() && !getModel().hasUnlockedCard(c)) {
|
||||
cards.add(c);
|
||||
}
|
||||
}
|
||||
@@ -530,7 +530,7 @@ public class ConquestController {
|
||||
|
||||
BoosterUtils.sort(cards);
|
||||
PaperCard card = SGuiChoose.one("Choose a card from your opponent's deck", cards);
|
||||
model.addCardToCollection(card);
|
||||
model.unlockCard(card);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -548,7 +548,7 @@ public class ConquestController {
|
||||
}
|
||||
|
||||
private void add(PaperCard c) {
|
||||
if (!model.getCollection().contains(c)) {
|
||||
if (!model.hasUnlockedCard(c)) {
|
||||
newCount++;
|
||||
}
|
||||
cards.add(c);
|
||||
@@ -564,7 +564,7 @@ public class ConquestController {
|
||||
int index = Aggregates.randomInt(0, cards.size() - 1);
|
||||
c = cards.get(index);
|
||||
|
||||
if (!model.getCollection().contains(c)) {
|
||||
if (!model.hasUnlockedCard(c)) {
|
||||
newCount--;
|
||||
cards.remove(c);
|
||||
rewards.add(c);
|
||||
|
||||
@@ -70,13 +70,13 @@ public final class ConquestData {
|
||||
currentLocation = new ConquestLocation(startingPlane, -1, 0, Region.PORTAL_COL);
|
||||
planeswalker = planeswalker0;
|
||||
planeswalkerToken = PlaneswalkerAchievements.getTrophyImage(planeswalker.getName());
|
||||
addCardToCollection(planeswalker);
|
||||
unlockCard(planeswalker);
|
||||
|
||||
//generate deck for starting commander and add all cards to collection
|
||||
ConquestCommander commander = new ConquestCommander(startingCommander0, startingPlane.getCardPool(), false);
|
||||
commanders.add(commander);
|
||||
addCardToCollection(startingCommander0);
|
||||
addCardsToCollection(commander.getDeck().getMain().toFlatList());
|
||||
unlockCard(startingCommander0);
|
||||
unlockCards(commander.getDeck().getMain().toFlatList());
|
||||
decks.put(commander.getDeck().getName(), commander.getDeck());
|
||||
}
|
||||
|
||||
@@ -120,19 +120,31 @@ public final class ConquestData {
|
||||
return getOrCreatePlaneData(getCurrentPlane());
|
||||
}
|
||||
|
||||
public HashSet<PaperCard> getCollection() {
|
||||
public Iterable<PaperCard> getCollection() {
|
||||
return collection;
|
||||
}
|
||||
|
||||
public void addCardToCollection(PaperCard card) {
|
||||
public boolean hasUnlockedCard(PaperCard card) {
|
||||
return collection.contains(card);
|
||||
}
|
||||
|
||||
public void unlockCard(PaperCard card) {
|
||||
collection.add(card);
|
||||
newCards.add(card);
|
||||
}
|
||||
public void addCardsToCollection(Collection<PaperCard> cards) {
|
||||
public void unlockCards(Collection<PaperCard> cards) {
|
||||
collection.addAll(cards);
|
||||
newCards.addAll(cards);
|
||||
}
|
||||
|
||||
public int getUnlockedCount() {
|
||||
return collection.size();
|
||||
}
|
||||
|
||||
public Iterable<ConquestCommander> getCommanders() {
|
||||
return commanders;
|
||||
}
|
||||
|
||||
public ConquestDeckMap getDeckStorage() {
|
||||
return new ConquestDeckMap(decks);
|
||||
}
|
||||
|
||||
@@ -357,6 +357,10 @@ public enum ConquestPlane {
|
||||
return cardPool;
|
||||
}
|
||||
|
||||
public FCollectionView<PaperCard> getCommanders() {
|
||||
return commanders;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package forge.planarconquest;
|
||||
|
||||
import java.util.HashSet;
|
||||
import forge.item.PaperCard;
|
||||
import forge.model.FModel;
|
||||
import forge.planarconquest.ConquestPlane.Region;
|
||||
|
||||
public class ConquestPlaneData {
|
||||
private final ConquestPlane plane;
|
||||
private final ConquestEventResult[] eventResults;
|
||||
private final ConquestRecord[] eventResults;
|
||||
|
||||
public ConquestPlaneData(ConquestPlane plane0) {
|
||||
plane = plane0;
|
||||
eventResults = new ConquestEventResult[plane.getEventCount()];
|
||||
eventResults = new ConquestRecord[plane.getEventCount()];
|
||||
}
|
||||
|
||||
public boolean hasConqueredBoss() {
|
||||
@@ -30,16 +29,16 @@ public class ConquestPlaneData {
|
||||
return hasConquered(regionIndex * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + row * Region.COLS_PER_REGION + col);
|
||||
}
|
||||
private boolean hasConquered(int index) {
|
||||
ConquestEventResult result = eventResults[index];
|
||||
ConquestRecord result = eventResults[index];
|
||||
return result != null && result.getWins() > 0;
|
||||
}
|
||||
|
||||
private ConquestEventResult getOrCreateResult(ConquestEvent event) {
|
||||
private ConquestRecord getOrCreateResult(ConquestEvent event) {
|
||||
ConquestLocation loc = event.getLocation();
|
||||
int index = loc.getRegionIndex() * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + loc.getRow() * Region.COLS_PER_REGION + loc.getCol();
|
||||
ConquestEventResult result = eventResults[index];
|
||||
ConquestRecord result = eventResults[index];
|
||||
if (result == null) {
|
||||
result = new ConquestEventResult();
|
||||
result = new ConquestRecord();
|
||||
eventResults[index] = result;
|
||||
}
|
||||
return result;
|
||||
@@ -65,9 +64,9 @@ public class ConquestPlaneData {
|
||||
|
||||
public int getUnlockedCount() {
|
||||
int count = 0;
|
||||
HashSet<PaperCard> collection = FModel.getConquest().getModel().getCollection();
|
||||
ConquestData model = FModel.getConquest().getModel();
|
||||
for (PaperCard pc : plane.getCardPool().getAllCards()) {
|
||||
if (collection.contains(pc)) {
|
||||
if (model.hasUnlockedCard(pc)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package forge.planarconquest;
|
||||
|
||||
public class ConquestEventResult {
|
||||
public class ConquestRecord {
|
||||
private int wins, losses;
|
||||
|
||||
public int getWins() {
|
||||
@@ -94,7 +94,10 @@ public class ConquestUtil {
|
||||
}
|
||||
|
||||
public static CardPool getAvailablePool(Deck deck) {
|
||||
HashSet<PaperCard> availableCards = new HashSet<PaperCard>(FModel.getConquest().getModel().getCollection());
|
||||
HashSet<PaperCard> availableCards = new HashSet<PaperCard>();
|
||||
for (PaperCard pc : FModel.getConquest().getModel().getCollection()) {
|
||||
availableCards.add(pc);
|
||||
}
|
||||
|
||||
//remove all cards in main deck
|
||||
for (Entry<PaperCard, Integer> e : deck.getMain()) {
|
||||
|
||||
Reference in New Issue
Block a user