mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Add Commanders screen for Planar Conquest
This commit is contained in:
@@ -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