Add Commanders screen for Planar Conquest

This commit is contained in:
drdev
2015-12-06 22:45:57 +00:00
parent 3a9a1f1f09
commit 1a1364e574
19 changed files with 445 additions and 81 deletions

View File

@@ -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,

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -357,6 +357,10 @@ public enum ConquestPlane {
return cardPool;
}
public FCollectionView<PaperCard> getCommanders() {
return commanders;
}
public String toString() {
return name;
}

View File

@@ -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++;
}
}

View File

@@ -1,6 +1,6 @@
package forge.planarconquest;
public class ConquestEventResult {
public class ConquestRecord {
private int wins, losses;
public int getWins() {

View File

@@ -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()) {