mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Show badges based on highest tier of each square you've beaten
This commit is contained in:
@@ -10,6 +10,7 @@ import forge.Graphics;
|
||||
import forge.animation.ForgeAnimation;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.card.CardDetailUtil;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardDetailUtil.DetailColors;
|
||||
@@ -23,6 +24,7 @@ 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.screens.LoadingOverlay;
|
||||
import forge.toolbox.FScrollPane;
|
||||
@@ -112,6 +114,8 @@ public class ConquestMultiverseScreen extends FScreen implements IConquestEventL
|
||||
int rows = Region.ROWS_PER_REGION;
|
||||
float colWidth = w / cols;
|
||||
float rowHeight = regionHeight / rows;
|
||||
float eventIconSize = Math.min(colWidth, rowHeight) / 3;
|
||||
float eventIconOffset = Math.round(eventIconSize * 0.1f);
|
||||
|
||||
ConquestPlane plane = model.getCurrentPlane();
|
||||
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
|
||||
for (int r = 0; r < rows; r++) {
|
||||
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
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,16 +8,22 @@ import forge.planarconquest.ConquestController.GameRunner;
|
||||
|
||||
public abstract class ConquestEvent {
|
||||
private final ConquestLocation location;
|
||||
private final int tier;
|
||||
private Deck opponentDeck;
|
||||
|
||||
public ConquestEvent(ConquestLocation location0) {
|
||||
public ConquestEvent(ConquestLocation location0, int tier0) {
|
||||
location = location0;
|
||||
tier = tier0;
|
||||
}
|
||||
|
||||
public ConquestLocation getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public int getTier() {
|
||||
return tier;
|
||||
}
|
||||
|
||||
public Deck getOpponentDeck() {
|
||||
if (opponentDeck == null) {
|
||||
opponentDeck = buildOpponentDeck();
|
||||
|
||||
@@ -115,7 +115,7 @@ public class ConquestLocation implements IXmlWritable {
|
||||
|
||||
public ConquestEvent getEvent() {
|
||||
//TODO: Make this pull from predefined events
|
||||
return new ConquestEvent(this) {
|
||||
return new ConquestEvent(this, 1) {
|
||||
private final PaperCard commander = Aggregates.random(getRegion().getCommanders());
|
||||
|
||||
@Override
|
||||
|
||||
@@ -38,6 +38,13 @@ public class ConquestPlaneData implements IXmlWritable {
|
||||
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) {
|
||||
ConquestLocation loc = event.getLocation();
|
||||
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) {
|
||||
getOrCreateResult(event).addWin();
|
||||
getOrCreateResult(event).addWin(event.getTier());
|
||||
}
|
||||
|
||||
public void addLoss(ConquestEvent event) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import forge.util.XmlWriter;
|
||||
import forge.util.XmlWriter.IXmlWritable;
|
||||
|
||||
public class ConquestRecord implements IXmlWritable {
|
||||
private int wins, losses, level;
|
||||
private int wins, losses, tier;
|
||||
|
||||
public ConquestRecord() {
|
||||
}
|
||||
@@ -13,13 +13,13 @@ public class ConquestRecord implements IXmlWritable {
|
||||
public ConquestRecord(XmlReader xml) {
|
||||
wins = xml.read("wins", 0);
|
||||
losses = xml.read("losses", 0);
|
||||
level = xml.read("level", 0);
|
||||
tier = xml.read("tier", 0);
|
||||
}
|
||||
@Override
|
||||
public void saveToXml(XmlWriter xml) {
|
||||
xml.write("wins", wins);
|
||||
xml.write("losses", losses);
|
||||
xml.write("level", level);
|
||||
xml.write("tier", tier);
|
||||
}
|
||||
|
||||
public int getWins() {
|
||||
@@ -30,19 +30,18 @@ public class ConquestRecord implements IXmlWritable {
|
||||
return losses;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
return level;
|
||||
public int getTier() {
|
||||
return tier;
|
||||
}
|
||||
|
||||
public void addWin() {
|
||||
public void addWin(int tier0) {
|
||||
wins++;
|
||||
if (tier0 > tier) {
|
||||
tier = tier0;
|
||||
}
|
||||
}
|
||||
|
||||
public void addLoss() {
|
||||
losses++;
|
||||
}
|
||||
|
||||
public void levelUp() {
|
||||
level++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user