mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
Add RagsToRiches achievement
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -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/Poisoned.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/TotalGameWins.java -text
|
||||
forge-gui/src/main/java/forge/achievement/TotalMatchWins.java -text
|
||||
|
||||
@@ -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
|
||||
public class AchievementTracker {
|
||||
public final HashSet<String> activatedUltimates = new HashSet<String>();
|
||||
public int mulliganTo = 7;
|
||||
}
|
||||
|
||||
@@ -88,7 +88,6 @@ public class Game implements IGameStateObject {
|
||||
private final ReplacementHandler replacementHandler = new ReplacementHandler(this);
|
||||
private final EventBus events = new EventBus("game events");
|
||||
private final GameLog gameLog = new GameLog();
|
||||
private final AchievementTracker achievementTracker = new AchievementTracker();
|
||||
|
||||
private final Zone stackZone = new Zone(ZoneType.Stack, this);
|
||||
|
||||
@@ -333,15 +332,6 @@ public class Game implements IGameStateObject {
|
||||
return gameLog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the achievement tracker
|
||||
*
|
||||
* @return the achievement tracker
|
||||
*/
|
||||
public final AchievementTracker getAchievementTracker() {
|
||||
return achievementTracker;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the stack zone.
|
||||
*
|
||||
|
||||
@@ -1641,8 +1641,9 @@ public class GameAction {
|
||||
Player p = whoCanMulligan.get(i);
|
||||
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;
|
||||
}
|
||||
|
||||
if (toMulligan != null && !toMulligan.isEmpty()) {
|
||||
if (!isCommander) {
|
||||
|
||||
@@ -190,6 +190,12 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
|
||||
|
||||
private int numManaConversion = 0;
|
||||
|
||||
private final AchievementTracker achievementTracker = new AchievementTracker();
|
||||
|
||||
public final AchievementTracker getAchievementTracker() {
|
||||
return achievementTracker;
|
||||
}
|
||||
|
||||
public final PlayerOutcome getOutcome() {
|
||||
return stats.getOutcome();
|
||||
}
|
||||
@@ -3351,6 +3357,7 @@ public class Player extends GameEntity implements Comparable<Player>, IIdentifia
|
||||
final int newHand = getCardsIn(ZoneType.Hand).size();
|
||||
stats.notifyHasMulliganed();
|
||||
stats.notifyOpeningHandSize(newHand);
|
||||
achievementTracker.mulliganTo = newHand;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -89,6 +89,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
||||
add(new Overkill(-25, -50, -100, -200));
|
||||
add(new LifeToSpare(20, 40, 80, 160));
|
||||
add(new Hellbent());
|
||||
add(new RagsToRiches());
|
||||
}
|
||||
|
||||
protected abstract void addAchievements();
|
||||
|
||||
@@ -83,7 +83,7 @@ public class PlaneswalkerAchievements extends AchievementCollection {
|
||||
//only call update achievements for any ultimates activated during the game
|
||||
if (player.getOutcome().hasWon()) {
|
||||
boolean needSave = false;
|
||||
for (String ultimate : player.getGame().getAchievementTracker().activatedUltimates) {
|
||||
for (String ultimate : player.getAchievementTracker().activatedUltimates) {
|
||||
Achievement achievement = achievements.get(ultimate);
|
||||
if (achievement != null) {
|
||||
achievement.update(gui, player);
|
||||
|
||||
38
forge-gui/src/main/java/forge/achievement/RagsToRiches.java
Normal file
38
forge-gui/src/main/java/forge/achievement/RagsToRiches.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -122,7 +122,7 @@ public class HumanPlaySpellAbility {
|
||||
if (isFree || payment.isFullyPaid()) {
|
||||
//track when planeswalker ultimates are activated
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user