From 7ebd5ef70ea81f387fd2dafdda682a26ccbc591b Mon Sep 17 00:00:00 2001 From: austinio7116 Date: Fri, 7 Sep 2018 14:38:36 +0100 Subject: [PATCH] Added randomly generated quest challenges to the random standard quest world --- .../forge/quest/QuestChallengeGenerator.java | 195 ++++++++++++++++++ .../java/forge/quest/QuestController.java | 9 + 2 files changed, 204 insertions(+) create mode 100644 forge-gui/src/main/java/forge/quest/QuestChallengeGenerator.java diff --git a/forge-gui/src/main/java/forge/quest/QuestChallengeGenerator.java b/forge-gui/src/main/java/forge/quest/QuestChallengeGenerator.java new file mode 100644 index 00000000000..ebdb0b31cfc --- /dev/null +++ b/forge-gui/src/main/java/forge/quest/QuestChallengeGenerator.java @@ -0,0 +1,195 @@ +package forge.quest; + +import com.google.common.base.Predicate; +import forge.deck.DeckgenUtil; +import forge.game.GameFormat; +import forge.item.PaperCard; +import forge.model.FModel; +import forge.util.MyRandom; +import forge.util.storage.IStorage; + +import java.util.*; + +public class QuestChallengeGenerator { + + public static QuestEventChallengeList generateChallenges(){ + Map challenges = new HashMap<>(); + int id = 0; + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().getModern()); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(1000); + qc.setWinsReqd(MyRandom.getRandom().nextInt(5)); + qc.setDifficulty(QuestEventDifficulty.MEDIUM); + qc.setCardReward("1 multicolor rare"); + challenges.put(Integer.toString(id),qc); + id++; + } + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getAIHeadstartChallenge(1); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(1000); + qc.setCardReward("1 multicolor rare"); + qc.setWinsReqd(MyRandom.getRandom().nextInt(5)); + qc.setDifficulty(QuestEventDifficulty.EASY); + challenges.put(Integer.toString(id),qc); + id++; + } + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().get("Legacy")); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(5000); + qc.setCardReward("2 multicolor rares"); + qc.setWinsReqd(MyRandom.getRandom().nextInt(25)); + qc.setDifficulty(QuestEventDifficulty.HARD); + challenges.put(Integer.toString(id),qc); + id++; + } + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getAIHeadstartChallenge(2); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(5000); + qc.setCardReward("2 multicolor rares"); + qc.setWinsReqd(MyRandom.getRandom().nextInt(25)); + qc.setDifficulty(QuestEventDifficulty.MEDIUM); + challenges.put(Integer.toString(id),qc); + id++; + } + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getFormatChallenge(FModel.getFormats().get("Vintage")); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(10000); + qc.setCardReward("3 multicolor rares"); + qc.setWinsReqd(MyRandom.getRandom().nextInt(50)); + qc.setDifficulty(QuestEventDifficulty.EXPERT); + challenges.put(Integer.toString(id),qc); + id++; + } + for (int i=0;i<5;++i) { + QuestEventChallenge qc = getAIHeadstartChallenge(3); + qc.setId(new Integer(id).toString()); + qc.setCreditsReward(10000); + qc.setCardReward("3 multicolor rares"); + qc.setWinsReqd(MyRandom.getRandom().nextInt(50)); + qc.setDifficulty(QuestEventDifficulty.HARD); + challenges.put(Integer.toString(id),qc); + id++; + } + return new QuestEventChallengeList(challenges); + } + + public static QuestEventChallenge getFormatChallenge(GameFormat format){ + QuestEventChallenge qc = new QuestEventChallenge(); + + qc.setEventDeck(DeckgenUtil.buildLDACArchetypeDeck(format,true)); + qc.setTitle(format.getName() + " " + qc.getEventDeck().getName() + " challenge"); + qc.setName(format.getName() + " " + qc.getEventDeck().getName() + " challenge"); + qc.setOpponentName(qc.getEventDeck().getName()); + qc.setDescription("Take on a " + format.getName() + " format deck"); + qc.setOpponentName(qc.getEventDeck().getName()); + qc.setRepeatable(true); + return qc; + } + + public static QuestEventChallenge getAIHeadstartChallenge(int extras){ + QuestEventChallenge qc = new QuestEventChallenge(); + + qc.setEventDeck(DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true)); + qc.setTitle(qc.getEventDeck().getName() + " headstart challenge"); + qc.setName(qc.getEventDeck().getName() + " headstart challenge"); + qc.setOpponentName(qc.getEventDeck().getName()); + qc.setDescription("The AI gets a bit of a headstart..."); + ArrayList cards = new ArrayList<>(); + for(int i=0; i < extras; ++i) { + cards.add(qc.getEventDeck().getMain().toFlatList().get( + MyRandom.getRandom().nextInt(qc.getEventDeck().getMain().toFlatList().size())).getName()); + } + qc.setAiExtraCards(cards); + qc.setOpponentName(qc.getEventDeck().getName()); + qc.setRepeatable(true); + return qc; + } + + public static class QuestEventChallengeList implements IStorage{ + + private Map challenges; + + public QuestEventChallengeList(Map list){ + challenges = list; + } + + @Override + public String getFullPath() { + return null; + } + + @Override + public QuestEventChallenge get(String id) { + return challenges.get(id); + } + + @Override + public QuestEventChallenge find(Predicate condition) { + for(QuestEventChallenge challenge:challenges.values()){ + if(condition.apply(challenge)){ + return challenge; + } + } + return null; + } + + @Override + public Collection getItemNames() { + List names = new ArrayList<>(); + for(QuestEventChallenge challenge:challenges.values()){ + names.add(challenge.getName()); + } + return names; + } + + @Override + public boolean contains(String id) { + return challenges.containsKey(id); + } + + @Override + public int size() { + return challenges.keySet().size(); + } + + @Override + public void add(QuestEventChallenge item) { + + } + + @Override + public void delete(String id) { + challenges.remove(id); + } + + @Override + public IStorage> getFolders() { + return null; + } + + @Override + public IStorage tryGetFolder(String path) { + return null; + } + + @Override + public IStorage getFolderOrCreate(String path) { + return null; + } + + @Override + public String getName() { + return "QuestChallenges"; + } + + @Override + public Iterator iterator() { + return challenges.values().iterator(); + } + } +} diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index 1d319a1dbde..ebd35b52300 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -418,6 +418,9 @@ public class QuestController { * @return QuestEventManager */ public IStorage getChallenges() { + if (getWorld().getName().equals(QuestWorld.STANDARDWORLDNAME)){ + allChallenges = QuestChallengeGenerator.generateChallenges(); + } if (this.allChallenges == null) { resetChallengesManager(); } @@ -455,6 +458,10 @@ public class QuestController { public void resetChallengesManager() { QuestWorld world = getWorld(); String path; + if (world.getName().equals(QuestWorld.STANDARDWORLDNAME)){ + allChallenges = QuestChallengeGenerator.generateChallenges(); + return; + } if (world == null || !world.isCustom()){ path = world == null || world.getChallengesDir() == null ? ForgeConstants.DEFAULT_CHALLENGES_DIR : ForgeConstants.QUEST_WORLD_DIR + world.getChallengesDir(); }else{ @@ -543,6 +550,8 @@ public class QuestController { maxChallenges = 5; } + maxChallenges = 5; + // Generate IDs as needed. if (achievements.getCurrentChallenges().size() < maxChallenges) { for (final QuestEventChallenge qc : allChallenges) {