From 3d3df48a432b96a294d290e247268b01eea79d8d Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 17 Sep 2014 00:13:16 +0000 Subject: [PATCH] Add NeedForSpeed achievement --- .gitattributes | 1 + .../achievement/AchievementCollection.java | 10 +++++- .../achievement/ConstructedAchievements.java | 2 +- .../forge/achievement/DraftAchievements.java | 2 +- .../java/forge/achievement/NeedForSpeed.java | 34 +++++++++++++++++++ .../forge/achievement/QuestAchievements.java | 2 +- .../forge/achievement/SealedAchievements.java | 2 +- 7 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 forge-gui/src/main/java/forge/achievement/NeedForSpeed.java diff --git a/.gitattributes b/.gitattributes index 42aa8d34f35..1ed13f939d1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -16661,6 +16661,7 @@ forge-gui/src/main/java/forge/achievement/GameWinStreak.java -text forge-gui/src/main/java/forge/achievement/Hellbent.java -text forge-gui/src/main/java/forge/achievement/LifeToSpare.java -text forge-gui/src/main/java/forge/achievement/MatchWinStreak.java -text +forge-gui/src/main/java/forge/achievement/NeedForSpeed.java -text forge-gui/src/main/java/forge/achievement/Overkill.java -text forge-gui/src/main/java/forge/achievement/QuestAchievements.java -text forge-gui/src/main/java/forge/achievement/SealedAchievements.java -text diff --git a/forge-gui/src/main/java/forge/achievement/AchievementCollection.java b/forge-gui/src/main/java/forge/achievement/AchievementCollection.java index 17eac80ea3e..a51a35c280d 100644 --- a/forge-gui/src/main/java/forge/achievement/AchievementCollection.java +++ b/forge-gui/src/main/java/forge/achievement/AchievementCollection.java @@ -26,6 +26,7 @@ import forge.util.XmlUtil; public abstract class AchievementCollection implements Iterable { private final Map achievements = new LinkedHashMap(); private final String name, filename; + private final boolean isLimitedFormat; static { FileUtil.ensureDirectoryExists(ForgeConstants.ACHIEVEMENTS_DIR); @@ -38,9 +39,10 @@ public abstract class AchievementCollection implements Iterable { cb.addItem(FModel.getAchievements(GameType.Quest)); } - protected AchievementCollection(String name0, String filename0) { + protected AchievementCollection(String name0, String filename0, boolean isLimitedFormat0) { name = name0; filename = filename0; + isLimitedFormat = isLimitedFormat0; buildTopShelf(); buildCoreShelves(); buildBottomShelf(); @@ -52,6 +54,12 @@ public abstract class AchievementCollection implements Iterable { add("MatchWinStreak", new MatchWinStreak(10, 25, 50)); add("TotalGameWins", new TotalGameWins(250, 500, 1000)); add("TotalMatchWins", new TotalMatchWins(100, 250, 500)); + if (isLimitedFormat) { //make need for speed goal more realistic for limited formats + add("NeedForSpeed", new NeedForSpeed(8, 6, 4)); + } + else { + add("NeedForSpeed", new NeedForSpeed(5, 3, 1)); + } add("Overkill", new Overkill(-25, -50, -100)); add("LifeToSpare", new LifeToSpare(20, 40, 80)); add("Hellbent", new Hellbent()); diff --git a/forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java b/forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java index cb79764edd9..4fcc66efb3a 100644 --- a/forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/ConstructedAchievements.java @@ -5,7 +5,7 @@ import forge.properties.ForgeConstants; public class ConstructedAchievements extends AchievementCollection { public ConstructedAchievements() { - super("Constructed", ForgeConstants.ACHIEVEMENTS_DIR + "constructed.xml"); + super("Constructed", ForgeConstants.ACHIEVEMENTS_DIR + "constructed.xml", false); } //add achievements that should appear at the top above core achievements for each game mode diff --git a/forge-gui/src/main/java/forge/achievement/DraftAchievements.java b/forge-gui/src/main/java/forge/achievement/DraftAchievements.java index a68aadb049d..1ff8ef7b51c 100644 --- a/forge-gui/src/main/java/forge/achievement/DraftAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/DraftAchievements.java @@ -4,7 +4,7 @@ import forge.properties.ForgeConstants; public class DraftAchievements extends AchievementCollection { public DraftAchievements() { - super("Booster Draft", ForgeConstants.ACHIEVEMENTS_DIR + "draft.xml"); + super("Booster Draft", ForgeConstants.ACHIEVEMENTS_DIR + "draft.xml", true); } //add achievements that should appear at the top above core achievements for each game mode diff --git a/forge-gui/src/main/java/forge/achievement/NeedForSpeed.java b/forge-gui/src/main/java/forge/achievement/NeedForSpeed.java new file mode 100644 index 00000000000..0de34d490ad --- /dev/null +++ b/forge-gui/src/main/java/forge/achievement/NeedForSpeed.java @@ -0,0 +1,34 @@ +package forge.achievement; + +import forge.game.Game; +import forge.game.player.Player; + +public class NeedForSpeed extends Achievement { + public NeedForSpeed(int bronze0, int silver0, int gold0) { + super("Need for Speed", + String.format("Win a game by turn %d.", bronze0), bronze0, + String.format("Win a game by turn %d.", silver0), silver0, + String.format("Win a game by turn %d.", gold0), gold0); + best = Integer.MAX_VALUE; //initialize best to max value so any + } + + public boolean needSave() { + return best != Integer.MAX_VALUE; + } + + @Override + protected int evaluate(Player player, Game game) { + if (player.getOutcome().hasWon()) { + return player.getTurn(); + } + return Integer.MAX_VALUE; //indicate that player didn't win + } + + @Override + public String getSubTitle() { + if (best < Integer.MAX_VALUE) { + return "Best: Turn " + best; + } + return null; + } +} diff --git a/forge-gui/src/main/java/forge/achievement/QuestAchievements.java b/forge-gui/src/main/java/forge/achievement/QuestAchievements.java index 92a4dac11c9..55fafbfe5f4 100644 --- a/forge-gui/src/main/java/forge/achievement/QuestAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/QuestAchievements.java @@ -4,7 +4,7 @@ import forge.properties.ForgeConstants; public class QuestAchievements extends AchievementCollection { public QuestAchievements() { - super("Quest Mode", ForgeConstants.ACHIEVEMENTS_DIR + "quest.xml"); + super("Quest Mode", ForgeConstants.ACHIEVEMENTS_DIR + "quest.xml", false); } //add achievements that should appear at the top above core achievements for each game mode diff --git a/forge-gui/src/main/java/forge/achievement/SealedAchievements.java b/forge-gui/src/main/java/forge/achievement/SealedAchievements.java index e95228ff0be..d5feb8a6eb2 100644 --- a/forge-gui/src/main/java/forge/achievement/SealedAchievements.java +++ b/forge-gui/src/main/java/forge/achievement/SealedAchievements.java @@ -4,7 +4,7 @@ import forge.properties.ForgeConstants; public class SealedAchievements extends AchievementCollection { public SealedAchievements() { - super("Sealed Deck", ForgeConstants.ACHIEVEMENTS_DIR + "sealed.xml"); + super("Sealed Deck", ForgeConstants.ACHIEVEMENTS_DIR + "sealed.xml", true); } //add achievements that should appear at the top above core achievements for each game mode