diff --git a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java index 1d5a45bafec..c2321d44243 100644 --- a/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java +++ b/forge-gui-mobile/src/forge/screens/planarconquest/ConquestMultiverseScreen.java @@ -4,6 +4,7 @@ import java.util.List; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; + import forge.Forge; import forge.Graphics; import forge.animation.ForgeAnimation; @@ -15,11 +16,11 @@ import forge.card.CardRenderer; import forge.card.CardDetailUtil.DetailColors; import forge.model.FModel; import forge.planarconquest.ConquestData; +import forge.planarconquest.ConquestEvent.ConquestEventRecord; import forge.planarconquest.ConquestLocation; import forge.planarconquest.ConquestPlane; import forge.planarconquest.ConquestPlane.Region; import forge.planarconquest.ConquestPlaneData; -import forge.planarconquest.ConquestRecord; import forge.screens.FScreen; import forge.toolbox.FScrollPane; import forge.util.collect.FCollectionView; @@ -144,18 +145,18 @@ public class ConquestMultiverseScreen extends FScreen { x0 = x + c * colWidth; y0 = y + (rows - r - 1) * rowHeight; - ConquestRecord eventRecord = planeData.getEventRecord(i, r, c); - if (eventRecord != null && eventRecord.getWins() > 0) { + ConquestEventRecord eventRecord = planeData.getEventRecord(i, r, c); + if (eventRecord != null && eventRecord.hasConquered()) { //draw badge in upper-right corner of conquered squares FSkinImage badge; - switch (eventRecord.getTier()) { - case 1: + switch (eventRecord.getHighestConqueredTier()) { + case 0: badge = FSkinImage.PW_BADGE_COMMON; break; - case 2: + case 1: badge = FSkinImage.PW_BADGE_UNCOMMON; break; - case 3: + case 2: badge = FSkinImage.PW_BADGE_RARE; break; default: diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java index 943ceaac233..edf9572d46d 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestCommander.java @@ -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 diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java index 51534ac1739..012a9cd6281 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestData.java @@ -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() { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java b/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java index 9998cc15375..b0b8017bb58 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestEvent.java @@ -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; + } + } } diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java b/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java index bd495161d67..ed8a681a867 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestLocation.java @@ -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 diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java index 79aabdf7a94..5f704379aec 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestPlaneData.java @@ -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() { diff --git a/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java b/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java index 03e6747886a..a088e98ba70 100644 --- a/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java +++ b/forge-gui/src/main/java/forge/planarconquest/ConquestRecord.java @@ -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() {