Show badges based on highest tier of each square you've beaten

This commit is contained in:
drdev
2016-01-07 03:49:54 +00:00
parent a198b911b3
commit 52803dd93a
5 changed files with 55 additions and 15 deletions

View File

@@ -10,6 +10,7 @@ import forge.Graphics;
import forge.animation.ForgeAnimation; import forge.animation.ForgeAnimation;
import forge.assets.FImage; import forge.assets.FImage;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinImage;
import forge.card.CardDetailUtil; import forge.card.CardDetailUtil;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.card.CardDetailUtil.DetailColors; import forge.card.CardDetailUtil.DetailColors;
@@ -23,6 +24,7 @@ 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.screens.LoadingOverlay; import forge.screens.LoadingOverlay;
import forge.toolbox.FScrollPane; import forge.toolbox.FScrollPane;
@@ -112,6 +114,8 @@ public class ConquestMultiverseScreen extends FScreen implements IConquestEventL
int rows = Region.ROWS_PER_REGION; int rows = Region.ROWS_PER_REGION;
float colWidth = w / cols; float colWidth = w / cols;
float rowHeight = regionHeight / rows; float rowHeight = regionHeight / rows;
float eventIconSize = Math.min(colWidth, rowHeight) / 3;
float eventIconOffset = Math.round(eventIconSize * 0.1f);
ConquestPlane plane = model.getCurrentPlane(); ConquestPlane plane = model.getCurrentPlane();
FCollectionView<Region> regions = plane.getRegions(); FCollectionView<Region> regions = plane.getRegions();
@@ -161,7 +165,31 @@ public class ConquestMultiverseScreen extends FScreen implements IConquestEventL
//draw event icon and overlay based on event record for each event in the region //draw event icon and overlay based on event record for each event in the region
for (int r = 0; r < rows; r++) { for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) { for (int c = 0; c < cols; c++) {
if (!planeData.hasConquered(i, r, c)) { x0 = x + c * colWidth;
y0 = y + (rows - r - 1) * rowHeight;
ConquestRecord eventRecord = planeData.getEventRecord(i, r, c);
if (eventRecord != null && eventRecord.getWins() > 0) {
//draw badge in upper-right corner of conquered squares
FSkinImage badge;
switch (eventRecord.getTier()) {
case 1:
badge = FSkinImage.PW_BADGE_COMMON;
break;
case 2:
badge = FSkinImage.PW_BADGE_UNCOMMON;
break;
case 3:
badge = FSkinImage.PW_BADGE_RARE;
break;
default:
badge = FSkinImage.PW_BADGE_MYTHIC;
break;
}
//shift slightly right to account for transparent edge of icon
g.drawImage(badge, Math.round(x0 + colWidth - eventIconOffset - eventIconSize * 0.9f), Math.round(y0 + eventIconOffset), eventIconSize, eventIconSize);
}
else {
//draw fog of war by default if area hasn't been conquered //draw fog of war by default if area hasn't been conquered
color = FOG_OF_WAR_COLOR; color = FOG_OF_WAR_COLOR;
@@ -178,7 +206,7 @@ public class ConquestMultiverseScreen extends FScreen implements IConquestEventL
} }
} }
g.fillRect(color, x + c * colWidth, y + (rows - r - 1) * rowHeight, colWidth, rowHeight); g.fillRect(color, x0, y0, colWidth, rowHeight);
} }
} }
} }

View File

@@ -8,16 +8,22 @@ import forge.planarconquest.ConquestController.GameRunner;
public abstract class ConquestEvent { public abstract class ConquestEvent {
private final ConquestLocation location; private final ConquestLocation location;
private final int tier;
private Deck opponentDeck; private Deck opponentDeck;
public ConquestEvent(ConquestLocation location0) { public ConquestEvent(ConquestLocation location0, int tier0) {
location = location0; location = location0;
tier = tier0;
} }
public ConquestLocation getLocation() { public ConquestLocation getLocation() {
return location; return location;
} }
public int getTier() {
return tier;
}
public Deck getOpponentDeck() { public Deck getOpponentDeck() {
if (opponentDeck == null) { if (opponentDeck == null) {
opponentDeck = buildOpponentDeck(); opponentDeck = buildOpponentDeck();

View File

@@ -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) { return new ConquestEvent(this, 1) {
private final PaperCard commander = Aggregates.random(getRegion().getCommanders()); private final PaperCard commander = Aggregates.random(getRegion().getCommanders());
@Override @Override

View File

@@ -38,6 +38,13 @@ public class ConquestPlaneData implements IXmlWritable {
return result != null && result.getWins() > 0; return result != null && result.getWins() > 0;
} }
public ConquestRecord getEventRecord(ConquestLocation loc) {
return getEventRecord(loc.getRegionIndex(), loc.getRow(), loc.getCol());
}
public ConquestRecord 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 ConquestRecord 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();
@@ -50,7 +57,7 @@ public class ConquestPlaneData implements IXmlWritable {
} }
public void addWin(ConquestEvent event) { public void addWin(ConquestEvent event) {
getOrCreateResult(event).addWin(); getOrCreateResult(event).addWin(event.getTier());
} }
public void addLoss(ConquestEvent event) { public void addLoss(ConquestEvent event) {

View File

@@ -5,7 +5,7 @@ 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, level; private int wins, losses, tier;
public ConquestRecord() { public ConquestRecord() {
} }
@@ -13,13 +13,13 @@ public class ConquestRecord implements IXmlWritable {
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);
level = xml.read("level", 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("level", level); xml.write("tier", tier);
} }
public int getWins() { public int getWins() {
@@ -30,19 +30,18 @@ public class ConquestRecord implements IXmlWritable {
return losses; return losses;
} }
public int getLevel() { public int getTier() {
return level; return tier;
} }
public void addWin() { public void addWin(int tier0) {
wins++; wins++;
if (tier0 > tier) {
tier = tier0;
}
} }
public void addLoss() { public void addLoss() {
losses++; losses++;
} }
public void levelUp() {
level++;
}
} }