mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
- 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:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -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/PlaneswalkerAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/Poisoned.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/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/QuestAchievements.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/RagsToRiches.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/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/StreakAchievement.java -text
|
||||||
forge-gui/src/main/java/forge/achievement/TotalGameWins.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/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/achievement/VariantWins.java -text
|
||||||
forge-gui/src/main/java/forge/assets/FSkinProp.java -text
|
forge-gui/src/main/java/forge/assets/FSkinProp.java -text
|
||||||
forge-gui/src/main/java/forge/assets/IHasSkinProp.java -text
|
forge-gui/src/main/java/forge/assets/IHasSkinProp.java -text
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
|||||||
//don't update achievements if player cheated during game
|
//don't update achievements if player cheated during game
|
||||||
if (controller.hasCheated()) {
|
if (controller.hasCheated()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Game game = controller.getGame();
|
final Game game = controller.getGame();
|
||||||
final Player player = controller.getPlayer();
|
final Player player = controller.getPlayer();
|
||||||
@@ -70,6 +70,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
|||||||
cb.addItem(FModel.getAchievements(GameType.Draft));
|
cb.addItem(FModel.getAchievements(GameType.Draft));
|
||||||
cb.addItem(FModel.getAchievements(GameType.Sealed));
|
cb.addItem(FModel.getAchievements(GameType.Sealed));
|
||||||
cb.addItem(FModel.getAchievements(GameType.Quest));
|
cb.addItem(FModel.getAchievements(GameType.Quest));
|
||||||
|
cb.addItem(FModel.getAchievements(GameType.Puzzle));
|
||||||
cb.addItem(AltWinAchievements.instance);
|
cb.addItem(AltWinAchievements.instance);
|
||||||
cb.addItem(PlaneswalkerAchievements.instance);
|
cb.addItem(PlaneswalkerAchievements.instance);
|
||||||
cb.addItem(ChallengeAchievements.instance);
|
cb.addItem(ChallengeAchievements.instance);
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -207,6 +207,7 @@ public final class FModel {
|
|||||||
achievements.put(GameType.Draft, new DraftAchievements());
|
achievements.put(GameType.Draft, new DraftAchievements());
|
||||||
achievements.put(GameType.Sealed, new SealedAchievements());
|
achievements.put(GameType.Sealed, new SealedAchievements());
|
||||||
achievements.put(GameType.Quest, new QuestAchievements());
|
achievements.put(GameType.Quest, new QuestAchievements());
|
||||||
|
achievements.put(GameType.Puzzle, new PuzzleAchievements());
|
||||||
|
|
||||||
//preload AI profiles
|
//preload AI profiles
|
||||||
AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR);
|
AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR);
|
||||||
@@ -288,6 +289,7 @@ public final class FModel {
|
|||||||
case Draft:
|
case Draft:
|
||||||
case Sealed:
|
case Sealed:
|
||||||
case Quest:
|
case Quest:
|
||||||
|
case Puzzle:
|
||||||
break;
|
break;
|
||||||
case QuestDraft:
|
case QuestDraft:
|
||||||
gameType = GameType.Quest;
|
gameType = GameType.Quest;
|
||||||
|
|||||||
Reference in New Issue
Block a user