mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
Make it so record of each tier is tracked separately
This commit is contained in:
@@ -4,6 +4,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
import com.badlogic.gdx.math.Vector2;
|
import com.badlogic.gdx.math.Vector2;
|
||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.Graphics;
|
import forge.Graphics;
|
||||||
import forge.animation.ForgeAnimation;
|
import forge.animation.ForgeAnimation;
|
||||||
@@ -15,11 +16,11 @@ import forge.card.CardRenderer;
|
|||||||
import forge.card.CardDetailUtil.DetailColors;
|
import forge.card.CardDetailUtil.DetailColors;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.planarconquest.ConquestData;
|
import forge.planarconquest.ConquestData;
|
||||||
|
import forge.planarconquest.ConquestEvent.ConquestEventRecord;
|
||||||
import forge.planarconquest.ConquestLocation;
|
import forge.planarconquest.ConquestLocation;
|
||||||
import forge.planarconquest.ConquestPlane;
|
import forge.planarconquest.ConquestPlane;
|
||||||
import forge.planarconquest.ConquestPlane.Region;
|
import forge.planarconquest.ConquestPlane.Region;
|
||||||
import forge.planarconquest.ConquestPlaneData;
|
import forge.planarconquest.ConquestPlaneData;
|
||||||
import forge.planarconquest.ConquestRecord;
|
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
import forge.util.collect.FCollectionView;
|
import forge.util.collect.FCollectionView;
|
||||||
@@ -144,18 +145,18 @@ public class ConquestMultiverseScreen extends FScreen {
|
|||||||
x0 = x + c * colWidth;
|
x0 = x + c * colWidth;
|
||||||
y0 = y + (rows - r - 1) * rowHeight;
|
y0 = y + (rows - r - 1) * rowHeight;
|
||||||
|
|
||||||
ConquestRecord eventRecord = planeData.getEventRecord(i, r, c);
|
ConquestEventRecord eventRecord = planeData.getEventRecord(i, r, c);
|
||||||
if (eventRecord != null && eventRecord.getWins() > 0) {
|
if (eventRecord != null && eventRecord.hasConquered()) {
|
||||||
//draw badge in upper-right corner of conquered squares
|
//draw badge in upper-right corner of conquered squares
|
||||||
FSkinImage badge;
|
FSkinImage badge;
|
||||||
switch (eventRecord.getTier()) {
|
switch (eventRecord.getHighestConqueredTier()) {
|
||||||
case 1:
|
case 0:
|
||||||
badge = FSkinImage.PW_BADGE_COMMON;
|
badge = FSkinImage.PW_BADGE_COMMON;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 1:
|
||||||
badge = FSkinImage.PW_BADGE_UNCOMMON;
|
badge = FSkinImage.PW_BADGE_UNCOMMON;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 2:
|
||||||
badge = FSkinImage.PW_BADGE_RARE;
|
badge = FSkinImage.PW_BADGE_RARE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -19,17 +19,17 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
|
|||||||
private Deck deck;
|
private Deck deck;
|
||||||
|
|
||||||
public ConquestCommander(PaperCard card0) {
|
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) {
|
public ConquestCommander(PaperCard card0, DeckGenPool cardPool0, boolean forAi) {
|
||||||
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi));
|
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi), null);
|
||||||
}
|
|
||||||
private ConquestCommander(PaperCard card0, Deck deck0) {
|
|
||||||
this(card0, deck0, new ConquestRecord());
|
|
||||||
}
|
}
|
||||||
private ConquestCommander(PaperCard card0, Deck deck0, ConquestRecord record0) {
|
private ConquestCommander(PaperCard card0, Deck deck0, ConquestRecord record0) {
|
||||||
card = card0;
|
card = card0;
|
||||||
deck = deck0;
|
deck = deck0;
|
||||||
|
if (record0 == null) {
|
||||||
|
record0 = new ConquestRecord();
|
||||||
|
}
|
||||||
record = record0;
|
record = record0;
|
||||||
|
|
||||||
//determine origin of commander
|
//determine origin of commander
|
||||||
|
|||||||
@@ -186,10 +186,12 @@ public final class ConquestData {
|
|||||||
|
|
||||||
public void addWin(ConquestEvent event) {
|
public void addWin(ConquestEvent event) {
|
||||||
getOrCreatePlaneData(event.getLocation().getPlane()).addWin(event);
|
getOrCreatePlaneData(event.getLocation().getPlane()).addWin(event);
|
||||||
|
getSelectedCommander().getRecord().addWin();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLoss(ConquestEvent event) {
|
public void addLoss(ConquestEvent event) {
|
||||||
getOrCreatePlaneData(event.getLocation().getPlane()).addLoss(event);
|
getOrCreatePlaneData(event.getLocation().getPlane()).addLoss(event);
|
||||||
|
getSelectedCommander().getRecord().addLoss();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAEtherShards() {
|
public int getAEtherShards() {
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ import java.util.Set;
|
|||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.planarconquest.ConquestController.GameRunner;
|
import forge.planarconquest.ConquestController.GameRunner;
|
||||||
|
import forge.util.XmlReader;
|
||||||
|
import forge.util.XmlWriter;
|
||||||
|
import forge.util.XmlWriter.IXmlWritable;
|
||||||
|
|
||||||
public abstract class ConquestEvent {
|
public abstract class ConquestEvent {
|
||||||
private final ConquestLocation location;
|
private final ConquestLocation location;
|
||||||
@@ -40,4 +43,80 @@ public abstract class ConquestEvent {
|
|||||||
public static interface IConquestEventLauncher {
|
public static interface IConquestEventLauncher {
|
||||||
void startGame(GameRunner gameRunner);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public class ConquestLocation implements IXmlWritable {
|
|||||||
|
|
||||||
public ConquestEvent getEvent() {
|
public ConquestEvent getEvent() {
|
||||||
//TODO: Make this pull from predefined events
|
//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());
|
private final PaperCard commander = Aggregates.random(getRegion().getCommanders());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,24 +2,25 @@ package forge.planarconquest;
|
|||||||
|
|
||||||
import forge.item.PaperCard;
|
import forge.item.PaperCard;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
import forge.planarconquest.ConquestEvent.ConquestEventRecord;
|
||||||
import forge.planarconquest.ConquestPlane.Region;
|
import forge.planarconquest.ConquestPlane.Region;
|
||||||
import forge.util.XmlReader;
|
import forge.util.XmlReader;
|
||||||
import forge.util.XmlWriter;
|
import forge.util.XmlWriter;
|
||||||
import forge.util.XmlWriter.IXmlWritable;
|
import forge.util.XmlWriter.IXmlWritable;
|
||||||
|
|
||||||
public class ConquestPlaneData implements IXmlWritable {
|
public class ConquestPlaneData implements IXmlWritable {
|
||||||
private final ConquestRecord[] eventResults;
|
private final ConquestEventRecord[] eventResults;
|
||||||
private ConquestLocation location;
|
private ConquestLocation location;
|
||||||
|
|
||||||
public ConquestPlaneData(ConquestPlane plane0) {
|
public ConquestPlaneData(ConquestPlane plane0) {
|
||||||
location = new ConquestLocation(plane0, 0, 0, 0);
|
location = new ConquestLocation(plane0, 0, 0, 0);
|
||||||
eventResults = new ConquestRecord[plane0.getEventCount()];
|
eventResults = new ConquestEventRecord[plane0.getEventCount()];
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConquestPlaneData(XmlReader xml) {
|
public ConquestPlaneData(XmlReader xml) {
|
||||||
location = xml.read("location", ConquestLocation.class);
|
location = xml.read("location", ConquestLocation.class);
|
||||||
eventResults = new ConquestRecord[location.getPlane().getEventCount()];
|
eventResults = new ConquestEventRecord[location.getPlane().getEventCount()];
|
||||||
xml.read("eventResults", eventResults, ConquestRecord.class);
|
xml.read("eventResults", eventResults, ConquestEventRecord.class);
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void saveToXml(XmlWriter xml) {
|
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);
|
return hasConquered(regionIndex * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + row * Region.COLS_PER_REGION + col);
|
||||||
}
|
}
|
||||||
private boolean hasConquered(int index) {
|
private boolean hasConquered(int index) {
|
||||||
ConquestRecord result = eventResults[index];
|
ConquestEventRecord result = eventResults[index];
|
||||||
return result != null && result.getWins() > 0;
|
return result != null && result.hasConquered();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConquestRecord getEventRecord(ConquestLocation loc) {
|
public ConquestEventRecord getEventRecord(ConquestLocation loc) {
|
||||||
return getEventRecord(loc.getRegionIndex(), loc.getRow(), loc.getCol());
|
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];
|
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();
|
ConquestLocation loc = event.getLocation();
|
||||||
int index = loc.getRegionIndex() * Region.ROWS_PER_REGION * Region.COLS_PER_REGION + loc.getRow() * Region.COLS_PER_REGION + loc.getCol();
|
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) {
|
if (result == null) {
|
||||||
result = new ConquestRecord();
|
result = new ConquestEventRecord();
|
||||||
eventResults[index] = result;
|
eventResults[index] = result;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -68,7 +69,7 @@ public class ConquestPlaneData implements IXmlWritable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addLoss(ConquestEvent event) {
|
public void addLoss(ConquestEvent event) {
|
||||||
getOrCreateResult(event).addLoss();
|
getOrCreateResult(event).addLoss(event.getTier());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getConqueredCount() {
|
public int getConqueredCount() {
|
||||||
|
|||||||
@@ -5,21 +5,19 @@ import forge.util.XmlWriter;
|
|||||||
import forge.util.XmlWriter.IXmlWritable;
|
import forge.util.XmlWriter.IXmlWritable;
|
||||||
|
|
||||||
public class ConquestRecord implements IXmlWritable {
|
public class ConquestRecord implements IXmlWritable {
|
||||||
private int wins, losses, tier;
|
private int wins, losses;
|
||||||
|
|
||||||
public ConquestRecord() {
|
public ConquestRecord() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConquestRecord(XmlReader xml) {
|
public ConquestRecord(XmlReader xml) {
|
||||||
wins = xml.read("wins", 0);
|
wins = xml.read("wins", 0);
|
||||||
losses = xml.read("losses", 0);
|
losses = xml.read("losses", 0);
|
||||||
tier = xml.read("tier", 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveToXml(XmlWriter xml) {
|
public void saveToXml(XmlWriter xml) {
|
||||||
xml.write("wins", wins);
|
xml.write("wins", wins);
|
||||||
xml.write("losses", losses);
|
xml.write("losses", losses);
|
||||||
xml.write("tier", tier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getWins() {
|
public int getWins() {
|
||||||
@@ -30,15 +28,8 @@ public class ConquestRecord implements IXmlWritable {
|
|||||||
return losses;
|
return losses;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTier() {
|
public void addWin() {
|
||||||
return tier;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addWin(int tier0) {
|
|
||||||
wins++;
|
wins++;
|
||||||
if (tier0 > tier) {
|
|
||||||
tier = tier0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLoss() {
|
public void addLoss() {
|
||||||
|
|||||||
Reference in New Issue
Block a user