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

3
.gitattributes vendored
View File

@@ -264,7 +264,6 @@ forge-game/.settings/org.eclipse.m2e.core.prefs -text
forge-game/pom.xml -text
forge-game/src/main/java/forge/GameCommand.java svneol=native#text/plain
forge-game/src/main/java/forge/ImageKeys.java -text
forge-game/src/main/java/forge/game/AchievementTracker.java -text
forge-game/src/main/java/forge/game/CardTraitBase.java -text
forge-game/src/main/java/forge/game/Direction.java -text
forge-game/src/main/java/forge/game/Game.java -text
@@ -542,6 +541,7 @@ forge-game/src/main/java/forge/game/phase/PhaseType.java -text
forge-game/src/main/java/forge/game/phase/Untap.java -text
forge-game/src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
forge-game/src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
forge-game/src/main/java/forge/game/player/AchievementTracker.java -text
forge-game/src/main/java/forge/game/player/GameLossReason.java -text
forge-game/src/main/java/forge/game/player/IGameEntitiesFactory.java -text
forge-game/src/main/java/forge/game/player/Player.java svneol=native#text/plain
@@ -16897,7 +16897,6 @@ forge-gui/src/main/java/forge/achievement/ArcaneMaster.java -text
forge-gui/src/main/java/forge/achievement/Blackjack.java -text
forge-gui/src/main/java/forge/achievement/ChallengeAchievements.java -text
forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java -text
forge-gui/src/main/java/forge/achievement/DeckChallengeAchievement.java -text
forge-gui/src/main/java/forge/achievement/DeckedOut.java -text
forge-gui/src/main/java/forge/achievement/Domain.java -text
forge-gui/src/main/java/forge/achievement/DraftAchievements.java -text

View File

@@ -1,12 +0,0 @@
package forge.game;
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;
public int spellsCast = 0;
public int maxStormCount = 0;
public int landsPlayed = 0;
}

View File

@@ -45,9 +45,9 @@ public class SpellApiBased extends Spell {
/* (non-Javadoc)
* @see forge.card.spellability.SpellAbility#resolve()
*/
@Override
public void resolve() {
effect.resolve(this);
getActivatingPlayer().getAchievementTracker().onSpellResolve(this);
}
}

View File

@@ -0,0 +1,34 @@
package forge.game.player;
import java.util.HashSet;
import forge.card.MagicColor;
import forge.game.card.Card;
import forge.game.spellability.SpellAbility;
//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 final HashSet<String> challengesCompleted = new HashSet<String>();
public int mulliganTo = 7;
public int spellsCast = 0;
public int maxStormCount = 0;
public int landsPlayed = 0;
public void onSpellAbilityPlayed(SpellAbility sa) {
final Card card = sa.getHostCard();
if (sa.getRestrictions().isPwAbility() && sa.hasParam("Ultimate")) {
activatedUltimates.add(card.getName());
}
if (card.determineColor().getColor() == MagicColor.ALL_COLORS) {
challengesCompleted.add("Chromatic");
}
}
public void onSpellResolve(SpellAbility spell) {
final Card card = spell.getHostCard();
if (card.hasKeyword("Epic")) {
challengesCompleted.add("Epic");
}
}
}

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);