Make it so record of each tier is tracked separately

This commit is contained in:
drdev
2016-01-09 16:59:43 +00:00
parent 103e2be7b2
commit 26bc9acd9b
7 changed files with 111 additions and 37 deletions

View File

@@ -19,17 +19,17 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
private Deck deck;
public ConquestCommander(PaperCard card0) {
this(card0, new Deck(card0.getName()));
this(card0, new Deck(card0.getName()), null);
}
public ConquestCommander(PaperCard card0, DeckGenPool cardPool0, boolean forAi) {
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi));
}
private ConquestCommander(PaperCard card0, Deck deck0) {
this(card0, deck0, new ConquestRecord());
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi), null);
}
private ConquestCommander(PaperCard card0, Deck deck0, ConquestRecord record0) {
card = card0;
deck = deck0;
if (record0 == null) {
record0 = new ConquestRecord();
}
record = record0;
//determine origin of commander

View File

@@ -186,10 +186,12 @@ public final class ConquestData {
public void addWin(ConquestEvent event) {
getOrCreatePlaneData(event.getLocation().getPlane()).addWin(event);
getSelectedCommander().getRecord().addWin();
}
public void addLoss(ConquestEvent event) {
getOrCreatePlaneData(event.getLocation().getPlane()).addLoss(event);
getSelectedCommander().getRecord().addLoss();
}
public int getAEtherShards() {

View File

@@ -5,6 +5,9 @@ import java.util.Set;
import forge.deck.Deck;
import forge.game.GameType;
import forge.planarconquest.ConquestController.GameRunner;
import forge.util.XmlReader;
import forge.util.XmlWriter;
import forge.util.XmlWriter.IXmlWritable;
public abstract class ConquestEvent {
private final ConquestLocation location;
@@ -40,4 +43,80 @@ public abstract class ConquestEvent {
public static interface IConquestEventLauncher {
void startGame(GameRunner gameRunner);
}
public static class ConquestEventRecord implements IXmlWritable {
private final ConquestRecord[] tiers = new ConquestRecord[4];
public ConquestEventRecord() {
}
public ConquestEventRecord(XmlReader xml) {
xml.read("tiers", tiers, ConquestRecord.class);
}
@Override
public void saveToXml(XmlWriter xml) {
xml.write("tiers", tiers);
}
public boolean hasConquered() {
//it's enough to check first tier, as second tier wouldn't unlock without beating it at least once
ConquestRecord record = tiers[0];
return record != null && record.getWins() > 0;
}
public int getTotalWins() {
int wins = 0;
for (int i = 0; i < tiers.length; i++) {
ConquestRecord record = tiers[i];
if (record != null) {
wins += record.getWins();
}
}
return wins;
}
public int getTotalLosses() {
int losses = 0;
for (int i = 0; i < tiers.length; i++) {
ConquestRecord record = tiers[i];
if (record != null) {
losses += record.getLosses();
}
}
return losses;
}
public int getWins(int tier) {
ConquestRecord record = tiers[tier];
return record != null ? record.getWins() : 0;
}
public int getLosses(int tier) {
ConquestRecord record = tiers[tier];
return record != null ? record.getLosses() : 0;
}
private ConquestRecord getOrCreateRecord(int tier) {
ConquestRecord record = tiers[tier];
if (record == null) {
record = new ConquestRecord();
tiers[tier] = record;
}
return record;
}
public void addWin(int tier) {
getOrCreateRecord(tier).addWin();
}
public void addLoss(int tier) {
getOrCreateRecord(tier).addLoss();
}
public int getHighestConqueredTier() {
for (int i = tiers.length - 1; i >= 0; i--) {
ConquestRecord record = tiers[i];
if (record != null && record.getWins() > 0) {
return i;
}
}
return -1;
}
}
}

View File

@@ -115,7 +115,7 @@ public class ConquestLocation implements IXmlWritable {
public ConquestEvent getEvent() {
//TODO: Make this pull from predefined events
return new ConquestEvent(this, 1) {
return new ConquestEvent(this, 0) {
private final PaperCard commander = Aggregates.random(getRegion().getCommanders());
@Override

View File

@@ -2,24 +2,25 @@ package forge.planarconquest;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.planarconquest.ConquestEvent.ConquestEventRecord;
import forge.planarconquest.ConquestPlane.Region;
import forge.util.XmlReader;
import forge.util.XmlWriter;
import forge.util.XmlWriter.IXmlWritable;
public class ConquestPlaneData implements IXmlWritable {
private final ConquestRecord[] eventResults;
private final ConquestEventRecord[] eventResults;
private ConquestLocation location;
public ConquestPlaneData(ConquestPlane plane0) {
location = new ConquestLocation(plane0, 0, 0, 0);
eventResults = new ConquestRecord[plane0.getEventCount()];
eventResults = new ConquestEventRecord[plane0.getEventCount()];
}
public ConquestPlaneData(XmlReader xml) {
location = xml.read("location", ConquestLocation.class);
eventResults = new ConquestRecord[location.getPlane().getEventCount()];
xml.read("eventResults", eventResults, ConquestRecord.class);
eventResults = new ConquestEventRecord[location.getPlane().getEventCount()];
xml.read("eventResults", eventResults, ConquestEventRecord.class);
}
@Override
public void saveToXml(XmlWriter xml) {
@@ -34,23 +35,23 @@ public class ConquestPlaneData implements IXmlWritable {
return hasConquered(regionIndex * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + row * Region.COLS_PER_REGION + col);
}
private boolean hasConquered(int index) {
ConquestRecord result = eventResults[index];
return result != null && result.getWins() > 0;
ConquestEventRecord result = eventResults[index];
return result != null && result.hasConquered();
}
public ConquestRecord getEventRecord(ConquestLocation loc) {
public ConquestEventRecord getEventRecord(ConquestLocation loc) {
return getEventRecord(loc.getRegionIndex(), loc.getRow(), loc.getCol());
}
public ConquestRecord getEventRecord(int regionIndex, int row, int col) {
public ConquestEventRecord getEventRecord(int regionIndex, int row, int col) {
return eventResults[regionIndex * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + row * Region.COLS_PER_REGION + col];
}
private ConquestRecord getOrCreateResult(ConquestEvent event) {
private ConquestEventRecord 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();
ConquestRecord result = eventResults[index];
ConquestEventRecord result = eventResults[index];
if (result == null) {
result = new ConquestRecord();
result = new ConquestEventRecord();
eventResults[index] = result;
}
return result;
@@ -68,7 +69,7 @@ public class ConquestPlaneData implements IXmlWritable {
}
public void addLoss(ConquestEvent event) {
getOrCreateResult(event).addLoss();
getOrCreateResult(event).addLoss(event.getTier());
}
public int getConqueredCount() {

View File

@@ -5,21 +5,19 @@ import forge.util.XmlWriter;
import forge.util.XmlWriter.IXmlWritable;
public class ConquestRecord implements IXmlWritable {
private int wins, losses, tier;
private int wins, losses;
public ConquestRecord() {
}
public ConquestRecord(XmlReader xml) {
wins = xml.read("wins", 0);
losses = xml.read("losses", 0);
tier = xml.read("tier", 0);
}
@Override
public void saveToXml(XmlWriter xml) {
xml.write("wins", wins);
xml.write("losses", losses);
xml.write("tier", tier);
}
public int getWins() {
@@ -30,15 +28,8 @@ public class ConquestRecord implements IXmlWritable {
return losses;
}
public int getTier() {
return tier;
}
public void addWin(int tier0) {
public void addWin() {
wins++;
if (tier0 > tier) {
tier = tier0;
}
}
public void addLoss() {