- Added rudimentary support for Puzzle Mode achievements separate from Constructed achievements.

- Currently has only one achievement that counts the total number of puzzles solved (in tiers - 1/10/25/50).
- TODO: ideally we should implement dynamically generated achievement for each available puzzle, but I'm not sure how to accomplish this.
This commit is contained in:
Agetian
2017-06-04 05:50:45 +00:00
parent 886a76cfa0
commit 61f3052d53
5 changed files with 53 additions and 1 deletions

2
.gitattributes vendored
View File

@@ -20860,6 +20860,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/ProgressiveAchievement.java -text
forge-gui/src/main/java/forge/achievement/PuzzleAchievements.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
@@ -20867,6 +20868,7 @@ forge-gui/src/main/java/forge/achievement/StormChaser.java -text
forge-gui/src/main/java/forge/achievement/StreakAchievement.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/TotalPuzzlesSolved.java -text
forge-gui/src/main/java/forge/achievement/VariantWins.java -text
forge-gui/src/main/java/forge/assets/FSkinProp.java -text
forge-gui/src/main/java/forge/assets/IHasSkinProp.java -text

View File

@@ -70,6 +70,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
cb.addItem(FModel.getAchievements(GameType.Draft));
cb.addItem(FModel.getAchievements(GameType.Sealed));
cb.addItem(FModel.getAchievements(GameType.Quest));
cb.addItem(FModel.getAchievements(GameType.Puzzle));
cb.addItem(AltWinAchievements.instance);
cb.addItem(PlaneswalkerAchievements.instance);
cb.addItem(ChallengeAchievements.instance);

View File

@@ -0,0 +1,22 @@
package forge.achievement;
import forge.properties.ForgeConstants;
public class PuzzleAchievements extends AchievementCollection {
public PuzzleAchievements() {
super("Puzzle Mode", ForgeConstants.ACHIEVEMENTS_DIR + "puzzle.xml", false);
}
@Override
protected void addSharedAchivements() {
//prevent including shared achievements
}
@Override
protected void addAchievements() {
// TODO: ideally there should be dynamically generated achievements for solving each
// available puzzle.
add(new TotalPuzzlesSolved(1, 10, 25, 50));
}
}

View File

@@ -0,0 +1,25 @@
package forge.achievement;
import forge.game.Game;
import forge.game.player.Player;
public class TotalPuzzlesSolved extends ProgressiveAchievement {
public TotalPuzzlesSolved(int bronze0, int silver0, int gold0, int mythic0) {
super("TotalPuzzlesSolved", "Total Puzzles Solved", null,
String.format(bronze0 == 1 ? "Solve a puzzle" : "Solve %d puzzles", bronze0), bronze0,
String.format("Solve %d puzzles", silver0), silver0,
String.format("Solve %d puzzles", gold0), gold0,
String.format("Solve %d puzzles", mythic0), mythic0);
}
@Override
protected boolean eval(Player player, Game game) {
return game.getMatch().isMatchOver() && game.getMatch().isWonBy(player.getLobbyPlayer());
}
@Override
protected String getNoun() {
return "Puzzle";
}
}

View File

@@ -207,6 +207,7 @@ public final class FModel {
achievements.put(GameType.Draft, new DraftAchievements());
achievements.put(GameType.Sealed, new SealedAchievements());
achievements.put(GameType.Quest, new QuestAchievements());
achievements.put(GameType.Puzzle, new PuzzleAchievements());
//preload AI profiles
AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR);
@@ -288,6 +289,7 @@ public final class FModel {
case Draft:
case Sealed:
case Quest:
case Puzzle:
break;
case QuestDraft:
gameType = GameType.Quest;