Add RagsToRiches achievement

This commit is contained in:
drdev
2014-09-27 20:16:21 +00:00
parent 35a31fc2d3
commit a5be45a160
9 changed files with 52 additions and 13 deletions

1
.gitattributes vendored
View File

@@ -16907,6 +16907,7 @@ forge-gui/src/main/java/forge/achievement/Overkill.java -text
forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java -text forge-gui/src/main/java/forge/achievement/PlaneswalkerAchievements.java -text
forge-gui/src/main/java/forge/achievement/Poisoned.java -text forge-gui/src/main/java/forge/achievement/Poisoned.java -text
forge-gui/src/main/java/forge/achievement/QuestAchievements.java -text forge-gui/src/main/java/forge/achievement/QuestAchievements.java -text
forge-gui/src/main/java/forge/achievement/RagsToRiches.java -text
forge-gui/src/main/java/forge/achievement/SealedAchievements.java -text forge-gui/src/main/java/forge/achievement/SealedAchievements.java -text
forge-gui/src/main/java/forge/achievement/TotalGameWins.java -text forge-gui/src/main/java/forge/achievement/TotalGameWins.java -text
forge-gui/src/main/java/forge/achievement/TotalMatchWins.java -text forge-gui/src/main/java/forge/achievement/TotalMatchWins.java -text

View File

@@ -5,4 +5,5 @@ import java.util.HashSet;
//class for storing information during a game that is used at the end of the game to determine achievements //class for storing information during a game that is used at the end of the game to determine achievements
public class AchievementTracker { public class AchievementTracker {
public final HashSet<String> activatedUltimates = new HashSet<String>(); public final HashSet<String> activatedUltimates = new HashSet<String>();
public int mulliganTo = 7;
} }

View File

@@ -88,7 +88,6 @@ public class Game implements IGameStateObject {
private final ReplacementHandler replacementHandler = new ReplacementHandler(this); private final ReplacementHandler replacementHandler = new ReplacementHandler(this);
private final EventBus events = new EventBus("game events"); private final EventBus events = new EventBus("game events");
private final GameLog gameLog = new GameLog(); private final GameLog gameLog = new GameLog();
private final AchievementTracker achievementTracker = new AchievementTracker();
private final Zone stackZone = new Zone(ZoneType.Stack, this); private final Zone stackZone = new Zone(ZoneType.Stack, this);
@@ -333,15 +332,6 @@ public class Game implements IGameStateObject {
return gameLog; return gameLog;
} }
/**
* Gets the achievement tracker
*
* @return the achievement tracker
*/
public final AchievementTracker getAchievementTracker() {
return achievementTracker;
}
/** /**
* Gets the stack zone. * Gets the stack zone.
* *

View File

@@ -1641,8 +1641,9 @@ public class GameAction {
Player p = whoCanMulligan.get(i); Player p = whoCanMulligan.get(i);
List<Card> toMulligan = p.canMulligan() ? p.getController().getCardsToMulligan(isCommander, firstPlayer) : null; List<Card> toMulligan = p.canMulligan() ? p.getController().getCardsToMulligan(isCommander, firstPlayer) : null;
if (game.isGameOver()) // conceded on mulligan prompt if (game.isGameOver()) { // conceded on mulligan prompt
return; return;
}
if (toMulligan != null && !toMulligan.isEmpty()) { if (toMulligan != null && !toMulligan.isEmpty()) {
if (!isCommander) { if (!isCommander) {

View File

@@ -190,6 +190,12 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
private int numManaConversion = 0; private int numManaConversion = 0;
private final AchievementTracker achievementTracker = new AchievementTracker();
public final AchievementTracker getAchievementTracker() {
return achievementTracker;
}
public final PlayerOutcome getOutcome() { public final PlayerOutcome getOutcome() {
return stats.getOutcome(); return stats.getOutcome();
} }
@@ -3351,6 +3357,7 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
final int newHand = getCardsIn(ZoneType.Hand).size(); final int newHand = getCardsIn(ZoneType.Hand).size();
stats.notifyHasMulliganed(); stats.notifyHasMulliganed();
stats.notifyOpeningHandSize(newHand); stats.notifyOpeningHandSize(newHand);
achievementTracker.mulliganTo = newHand;
} }
/** /**

View File

@@ -89,6 +89,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
add(new Overkill(-25, -50, -100, -200)); add(new Overkill(-25, -50, -100, -200));
add(new LifeToSpare(20, 40, 80, 160)); add(new LifeToSpare(20, 40, 80, 160));
add(new Hellbent()); add(new Hellbent());
add(new RagsToRiches());
} }
protected abstract void addAchievements(); protected abstract void addAchievements();

View File

@@ -83,7 +83,7 @@ public class PlaneswalkerAchievements extends AchievementCollection {
//only call update achievements for any ultimates activated during the game //only call update achievements for any ultimates activated during the game
if (player.getOutcome().hasWon()) { if (player.getOutcome().hasWon()) {
boolean needSave = false; boolean needSave = false;
for (String ultimate : player.getGame().getAchievementTracker().activatedUltimates) { for (String ultimate : player.getAchievementTracker().activatedUltimates) {
Achievement achievement = achievements.get(ultimate); Achievement achievement = achievements.get(ultimate);
if (achievement != null) { if (achievement != null) {
achievement.update(gui, player); achievement.update(gui, player);

View File

@@ -0,0 +1,38 @@
package forge.achievement;
import forge.game.Game;
import forge.game.player.Player;
public class RagsToRiches extends Achievement {
private static final int NO_MULLIGAN = 7;
public RagsToRiches() {
super("RagsToRiches", "Rags to Riches", "Win a game after mulliganing to",
"4 cards", 4,
"3 cards", 3,
"2 cards", 2,
"1 card", 1);
best = NO_MULLIGAN; //initialize best to max value so any amount of mulliganing is smaller
}
@Override
public boolean needSave() {
return best < NO_MULLIGAN;
}
@Override
protected int evaluate(Player player, Game game) {
if (player.getOutcome().hasWon() && player.getAchievementTracker().mulliganTo < NO_MULLIGAN) {
return player.getAchievementTracker().mulliganTo;
}
return NO_MULLIGAN; //indicate that player didn't win
}
@Override
public String getSubTitle() {
if (best < NO_MULLIGAN) {
return "Best: " + best + " cards";
}
return null;
}
}

View File

@@ -122,7 +122,7 @@ public class HumanPlaySpellAbility {
if (isFree || payment.isFullyPaid()) { if (isFree || payment.isFullyPaid()) {
//track when planeswalker ultimates are activated //track when planeswalker ultimates are activated
if (ability.getRestrictions().isPwAbility() && ability.hasParam("Ultimate") && ability.getActivatingPlayer().getController() instanceof PlayerControllerHuman) { if (ability.getRestrictions().isPwAbility() && ability.hasParam("Ultimate") && ability.getActivatingPlayer().getController() instanceof PlayerControllerHuman) {
game.getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName()); ability.getActivatingPlayer().getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
} }
if (skipStack) { if (skipStack) {