Add Chromatic and Epic challenges

This commit is contained in:
drdev
2014-09-28 18:38:24 +00:00
parent 04f725a142
commit 1d02422553
10 changed files with 82 additions and 44 deletions

View File

@@ -1,5 +1,8 @@
package forge.achievement;
import forge.deck.Deck;
import forge.game.Game;
import forge.game.player.Player;
import forge.properties.ForgeConstants;
public class ChallengeAchievements extends AchievementCollection {
@@ -20,5 +23,44 @@ public class ChallengeAchievements extends AchievementCollection {
add(new NoSpells());
add(new NoLands());
add(new Domain());
add("Chromatic", "Chromatic", "Win a game after casting a 5 color spell", "With great color requirements comes great power.");
add("Epic", "Epic", "Win a game after resolving a spell with the Epic keyword", "When it's the last spell you ever cast, you better make it count!");
}
private void add(String key0, String displayName0, String description0, String flavorText0) {
add(new ChallengeAchievement(key0, displayName0, description0, flavorText0));
}
public static class ChallengeAchievement extends ProgressiveAchievement {
protected ChallengeAchievement(String key0, String displayName0, String description0, String flavorText0) {
super(key0, displayName0, description0, flavorText0);
}
@Override
protected final String getNoun() {
return "Win";
}
@Override
protected boolean eval(Player player, Game game) {
return player.getOutcome().hasWon() &&
player.getAchievementTracker().challengesCompleted.contains(getKey());
}
}
public static abstract class DeckChallengeAchievement extends ChallengeAchievement {
protected DeckChallengeAchievement(String key0, String displayName0, String condition0, String flavorText0) {
super(key0, displayName0, "Win a game using a deck " + condition0, flavorText0);
}
@Override
protected final boolean eval(Player player, Game game) {
if (player.getOutcome().hasWon()) {
return eval(player.getRegisteredPlayer().getDeck());
}
return false;
}
protected abstract boolean eval(Deck deck);
}
}

View File

@@ -1,26 +0,0 @@
package forge.achievement;
import forge.deck.Deck;
import forge.game.Game;
import forge.game.player.Player;
public abstract class DeckChallengeAchievement extends ProgressiveAchievement {
protected DeckChallengeAchievement(String key0, String displayName0, String condition0, String flavorText0) {
super(key0, displayName0, "Win a game using a deck " + condition0, flavorText0);
}
@Override
protected String getNoun() {
return "Win";
}
@Override
protected final boolean eval(Player player, Game game) {
if (player.getOutcome().hasWon()) {
return eval(player.getRegisteredPlayer().getDeck());
}
return false;
}
protected abstract boolean eval(Deck deck);
}

View File

@@ -2,6 +2,7 @@ package forge.achievement;
import java.util.Map.Entry;
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
import forge.deck.Deck;
import forge.item.PaperCard;

View File

@@ -2,6 +2,7 @@ package forge.achievement;
import java.util.Map.Entry;
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
import forge.deck.Deck;
import forge.item.PaperCard;

View File

@@ -2,6 +2,7 @@ package forge.achievement;
import java.util.Map.Entry;
import forge.achievement.ChallengeAchievements.DeckChallengeAchievement;
import forge.card.CardType;
import forge.deck.Deck;
import forge.item.PaperCard;

View File

@@ -121,9 +121,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) {
ability.getActivatingPlayer().getAchievementTracker().activatedUltimates.add(ability.getHostCard().getName());
}
ability.getActivatingPlayer().getAchievementTracker().onSpellAbilityPlayed(ability);
if (skipStack) {
AbilityUtils.resolve(ability);