mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28: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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user