Merge pull request #440 from kevlahnota/master

refactor deckgen for adventure
This commit is contained in:
Anthony Calosa
2022-05-21 16:42:54 +08:00
committed by GitHub
2 changed files with 34 additions and 55 deletions

View File

@@ -219,6 +219,16 @@ public class ConsoleCommandInterpreter {
}
return "Enemy deck list dumped to stdout.";
});
registerCommand(new String[]{"dumpEnemyColorIdentity"}, s -> {
for(EnemyData E : new Array.ArrayIterator<>(WorldData.getAllEnemies())){
Deck D = E.generateDeck(Current.player().isFantasyMode());
DeckProxy DP = new DeckProxy(D, "Constructed", GameType.Constructed, null);
ColorSet colorSet = DP.getColor();
System.out.printf("%s Colors: %s | Deck Colors: %s (%s)\n", E.name, E.colors, DP.getColorIdentity().toEnumSet().toString(), DP.getName()
);
}
return "Enemy color Identity dumped to stdout.";
});
registerCommand(new String[]{"heal", "amount"}, s -> {
if(s.length<1) return "Command needs 1 parameter";
int N = 0;

View File

@@ -8,8 +8,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.tuple.Pair;
@@ -61,6 +59,7 @@ import forge.util.storage.IStorage;
*/
// TODO This class can be used for home menu constructed deck generation as well.
public class DeckgenUtil {
private static List<DeckProxy> advPrecons = Lists.newArrayList(), advThemes = Lists.newArrayList();
public static Deck buildCardGenDeck(GameFormat format, boolean isForAI){
try {
@@ -437,7 +436,14 @@ public class DeckgenUtil {
/** @return {@link forge.deck.Deck} */
public static Deck getRandomOrPreconOrThemeDeck(String colors, boolean forAi, boolean isTheme) {
final List<String> selection = new ArrayList<>();
List<DeckProxy> allDecks = new ArrayList<>();
Deck deck = null;
if (advPrecons.isEmpty()) {
advPrecons.addAll(DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()));
}
if (advThemes.isEmpty()) {
advThemes.addAll(DeckProxy.getAllThemeDecks());
advThemes.addAll(DeckProxy.getNonEasyQuestDuelDecks());
}
if (!colors.isEmpty()) {
for (char c : colors.toLowerCase().toCharArray()) {
switch (c) {
@@ -449,61 +455,24 @@ public class DeckgenUtil {
}
}
}
//limit selection to three
if (!selection.isEmpty() && selection.size() < 4) {
//monocolor
if (selection.size() == 1) {
if (isTheme) {
//duels and theme
allDecks = Stream.concat(DeckProxy.getAllThemeDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().isMonoColor()
&& deckProxy.getColor().hasExactlyColor(ColorSet.fromNames(selection).getColor())),
DeckProxy.getNonEasyQuestDuelDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().isMonoColor()
&& deckProxy.getColor().hasExactlyColor(ColorSet.fromNames(selection).getColor())))
.collect(Collectors.toList());
} else {
allDecks = DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()).parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().isMonoColor() && deckProxy.getColor().hasExactlyColor(ColorSet.fromNames(selection).getColor()))
.collect(Collectors.toList());
}
try {
if (!selection.isEmpty() && selection.size() < 4) {
Predicate<DeckProxy> pred = Predicates.and(deckProxy -> deckProxy.getMainSize() <= 60, deckProxy -> deckProxy.getColorIdentity().hasAllColors(ColorSet.fromNames(colors.toCharArray()).getColor()));
if (isTheme)
deck = Aggregates.random(Iterables.filter(advThemes, pred)).getDeck();
else
deck = Aggregates.random(Iterables.filter(advPrecons, pred)).getDeck();
} else {
if (isTheme) {
//duels and theme
allDecks = Stream.concat(DeckProxy.getAllThemeDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().hasAllColors(ColorSet.fromNames(selection).getColor())),
DeckProxy.getNonEasyQuestDuelDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().hasAllColors(ColorSet.fromNames(selection).getColor())))
.collect(Collectors.toList());
} else {
allDecks = DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()).parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.filter(deckProxy -> deckProxy.getColor() != null && deckProxy.getColor().hasAllColors(ColorSet.fromNames(selection).getColor()))
.collect(Collectors.toList());
}
}
} else {
//no specific colors
if (isTheme) {
//duels and theme
allDecks = Stream.concat(DeckProxy.getAllThemeDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60),
DeckProxy.getNonEasyQuestDuelDecks().parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60))
.collect(Collectors.toList());
} else {
allDecks = DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()).parallelStream()
.filter(deckProxy -> deckProxy.getMainSize() <= 60)
.collect(Collectors.toList());
if (isTheme)
deck = Aggregates.random(Iterables.filter(advThemes, deckProxy -> deckProxy.getMainSize() <= 60)).getDeck();
else
deck = Aggregates.random(Iterables.filter(advPrecons, deckProxy -> deckProxy.getMainSize() <= 60)).getDeck();
}
} catch (Exception e) {
e.printStackTrace();
}
if (!allDecks.isEmpty()) {
return Aggregates.random(allDecks).getDeck();
if (deck != null) {
return deck;
}
return DeckgenUtil.buildColorDeck(selection, null, forAi);
}