mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Formatting QuestEventDuelManager.
This commit is contained in:
@@ -38,85 +38,84 @@ import java.util.*;
|
|||||||
*/
|
*/
|
||||||
public class QuestEventDuelManager {
|
public class QuestEventDuelManager {
|
||||||
|
|
||||||
private final MapOfLists<QuestEventDifficulty, QuestEventDuel> sortedDuels = new EnumMapOfLists<>(QuestEventDifficulty.class, CollectionSuppliers.<QuestEventDuel>arrayLists());
|
private final MapOfLists<QuestEventDifficulty, QuestEventDuel> sortedDuels = new EnumMapOfLists<>(QuestEventDifficulty.class, CollectionSuppliers.<QuestEventDuel>arrayLists());
|
||||||
private final IStorage<QuestEventDuel> allDuels;
|
private final IStorage<QuestEventDuel> allDuels;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate all events and difficulty lists.
|
* Instantiate all events and difficulty lists.
|
||||||
*
|
*
|
||||||
* @param dir   File object
|
* @param dir   File object
|
||||||
*/
|
*/
|
||||||
public QuestEventDuelManager(final File dir) {
|
public QuestEventDuelManager(final File dir) {
|
||||||
allDuels = new StorageBase<>("Quest duels", new QuestDuelReader(dir));
|
allDuels = new StorageBase<>("Quest duels", new QuestDuelReader(dir));
|
||||||
assembleDuelDifficultyLists();
|
assembleDuelDifficultyLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<QuestEventDuel> getAllDuels() {
|
public Iterable<QuestEventDuel> getAllDuels() {
|
||||||
return allDuels;
|
return allDuels;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Iterable<QuestEventDuel> getDuels(QuestEventDifficulty difficulty) {
|
public Iterable<QuestEventDuel> getDuels(QuestEventDifficulty difficulty) {
|
||||||
return sortedDuels.get(difficulty);
|
return sortedDuels.get(difficulty);
|
||||||
}
|
}
|
||||||
|
|
||||||
// define fallback orders if there aren't enough opponents defined for a particular difficultly level
|
// define fallback orders if there aren't enough opponents defined for a particular difficultly level
|
||||||
private static List<QuestEventDifficulty> easyOrder = Arrays.asList(QuestEventDifficulty.EASY, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.HARD, QuestEventDifficulty.EXPERT);
|
private static List<QuestEventDifficulty> easyOrder = Arrays.asList(QuestEventDifficulty.EASY, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.HARD, QuestEventDifficulty.EXPERT);
|
||||||
private static List<QuestEventDifficulty> mediumOrder = Arrays.asList(QuestEventDifficulty.MEDIUM, QuestEventDifficulty.HARD, QuestEventDifficulty.EASY, QuestEventDifficulty.EXPERT);
|
private static List<QuestEventDifficulty> mediumOrder = Arrays.asList(QuestEventDifficulty.MEDIUM, QuestEventDifficulty.HARD, QuestEventDifficulty.EASY, QuestEventDifficulty.EXPERT);
|
||||||
private static List<QuestEventDifficulty> hardOrder = Arrays.asList(QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY, QuestEventDifficulty.EXPERT);
|
private static List<QuestEventDifficulty> hardOrder = Arrays.asList(QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY, QuestEventDifficulty.EXPERT);
|
||||||
private static List<QuestEventDifficulty> expertOrder = Arrays.asList(QuestEventDifficulty.EXPERT, QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY);
|
private static List<QuestEventDifficulty> expertOrder = Arrays.asList(QuestEventDifficulty.EXPERT, QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY);
|
||||||
|
|
||||||
private List<QuestEventDifficulty> getOrderForDifficulty(QuestEventDifficulty d) {
|
private List<QuestEventDifficulty> getOrderForDifficulty(QuestEventDifficulty d) {
|
||||||
final List<QuestEventDifficulty> difficultyOrder;
|
final List<QuestEventDifficulty> difficultyOrder;
|
||||||
|
|
||||||
switch (d) {
|
switch (d) {
|
||||||
case EASY:
|
case EASY:
|
||||||
difficultyOrder = easyOrder;
|
difficultyOrder = easyOrder;
|
||||||
break;
|
break;
|
||||||
case MEDIUM:
|
case MEDIUM:
|
||||||
difficultyOrder = mediumOrder;
|
difficultyOrder = mediumOrder;
|
||||||
break;
|
break;
|
||||||
case HARD:
|
case HARD:
|
||||||
difficultyOrder = hardOrder;
|
difficultyOrder = hardOrder;
|
||||||
break;
|
break;
|
||||||
case EXPERT:
|
case EXPERT:
|
||||||
difficultyOrder = expertOrder;
|
difficultyOrder = expertOrder;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("unhandled difficulty: " + d);
|
throw new RuntimeException("unhandled difficulty: " + d);
|
||||||
}
|
}
|
||||||
|
|
||||||
return difficultyOrder;
|
return difficultyOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addDuel(List<QuestEventDuel> outList, QuestEventDifficulty targetDifficulty, int toAdd) {
|
private void addDuel(List<QuestEventDuel> outList, QuestEventDifficulty targetDifficulty, int toAdd) {
|
||||||
|
|
||||||
// if there's no way we can satisfy the request, return now
|
// if there's no way we can satisfy the request, return now
|
||||||
if (allDuels.size() <= toAdd) {
|
if (allDuels.size() <= toAdd) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(targetDifficulty);
|
final List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(targetDifficulty);
|
||||||
|
|
||||||
for (QuestEventDifficulty d : difficultyOrder) { // will add duels from preferred difficulty, will use others if the former has too few options.
|
for (QuestEventDifficulty d : difficultyOrder) { // will add duels from preferred difficulty, will use others if the former has too few options.
|
||||||
for (QuestEventDuel duel : sortedDuels.get(d)) {
|
for (QuestEventDuel duel : sortedDuels.get(d)) {
|
||||||
if (toAdd <= 0) {
|
if (toAdd <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!outList.contains(duel)) {
|
if (!outList.contains(duel)) {
|
||||||
outList.add(duel);
|
outList.add(duel);
|
||||||
toAdd--;
|
toAdd--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addRandomDuel(final List<QuestEventDuel> listOfDuels, final QuestEventDifficulty difficulty) {
|
private void addRandomDuel(final List<QuestEventDuel> listOfDuels, final QuestEventDifficulty difficulty) {
|
||||||
|
|
||||||
QuestEventDuel duel = new QuestEventDuel();
|
QuestEventDuel duel = new QuestEventDuel();
|
||||||
|
|
||||||
List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(difficulty);
|
List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(difficulty);
|
||||||
|
|
||||||
List<QuestEventDuel> possibleDuels = new ArrayList<>();
|
List<QuestEventDuel> possibleDuels = new ArrayList<>();
|
||||||
for (QuestEventDifficulty diff : difficultyOrder) {
|
for (QuestEventDifficulty diff : difficultyOrder) {
|
||||||
possibleDuels = new ArrayList<>(sortedDuels.get(diff));
|
possibleDuels = new ArrayList<>(sortedDuels.get(diff));
|
||||||
@@ -125,98 +124,99 @@ public class QuestEventDuelManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QuestEventDuel randomOpponent = possibleDuels.get(((int) (possibleDuels.size() * Math.random())));
|
QuestEventDuel randomOpponent = possibleDuels.get(((int) (possibleDuels.size() * Math.random())));
|
||||||
|
|
||||||
duel.setTitle("Random Opponent");
|
duel.setTitle("Random Opponent");
|
||||||
duel.setIconImageKey(randomOpponent.getIconImageKey());
|
duel.setIconImageKey(randomOpponent.getIconImageKey());
|
||||||
duel.setOpponentName(randomOpponent.getTitle());
|
duel.setOpponentName(randomOpponent.getTitle());
|
||||||
duel.setDifficulty(difficulty);
|
duel.setDifficulty(difficulty);
|
||||||
duel.setProfile(randomOpponent.getProfile());
|
duel.setProfile(randomOpponent.getProfile());
|
||||||
duel.setShowDifficulty(false);
|
duel.setShowDifficulty(false);
|
||||||
duel.setDescription("Fight a random opponent");
|
duel.setDescription("Fight a random opponent");
|
||||||
duel.setEventDeck(randomOpponent.getEventDeck());
|
duel.setEventDeck(randomOpponent.getEventDeck());
|
||||||
|
|
||||||
listOfDuels.add(duel);
|
listOfDuels.add(duel);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates an array of new duel opponents based on current win conditions.
|
* Generates an array of new duel opponents based on current win conditions.
|
||||||
*
|
*
|
||||||
* @return an array of {@link java.lang.String} objects.
|
* @return an array of {@link java.lang.String} objects.
|
||||||
*/
|
*/
|
||||||
public final List<QuestEventDuel> generateDuels() {
|
public final List<QuestEventDuel> generateDuels() {
|
||||||
|
|
||||||
final QuestPreferences questPreferences = FModel.getQuestPreferences();
|
final QuestPreferences questPreferences = FModel.getQuestPreferences();
|
||||||
if (FModel.getQuest().getAchievements() == null) {
|
if (FModel.getQuest().getAchievements() == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final QuestController qCtrl = FModel.getQuest();
|
final QuestController qCtrl = FModel.getQuest();
|
||||||
final int numberOfWins = qCtrl.getAchievements().getWin();
|
final int numberOfWins = qCtrl.getAchievements().getWin();
|
||||||
|
|
||||||
final int index = qCtrl.getAchievements().getDifficulty();
|
final int index = qCtrl.getAchievements().getDifficulty();
|
||||||
final List<QuestEventDuel> duelOpponents = new ArrayList<>();
|
final List<QuestEventDuel> duelOpponents = new ArrayList<>();
|
||||||
|
|
||||||
if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
|
if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.EASY, 3);
|
addDuel(duelOpponents, QuestEventDifficulty.EASY, 3);
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.EASY);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.EASY);
|
||||||
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
|
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.EASY, 1);
|
addDuel(duelOpponents, QuestEventDifficulty.EASY, 1);
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 2);
|
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 2);
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
|
||||||
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
|
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 3);
|
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 3);
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
|
||||||
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
|
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 1);
|
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 1);
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
|
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
||||||
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_EXPERTAI, index)) {
|
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_EXPERTAI, index)) {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.HARD, 3);
|
addDuel(duelOpponents, QuestEventDifficulty.HARD, 3);
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
||||||
} else {
|
} else {
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
|
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
|
||||||
addDuel(duelOpponents, QuestEventDifficulty.EXPERT, 1);
|
addDuel(duelOpponents, QuestEventDifficulty.EXPERT, 1);
|
||||||
if (Math.random() * 3 < 2) {
|
if (Math.random() * 3 < 2) {
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
|
||||||
} else {
|
} else {
|
||||||
addRandomDuel(duelOpponents, QuestEventDifficulty.EXPERT);
|
addRandomDuel(duelOpponents, QuestEventDifficulty.EXPERT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return duelOpponents;
|
return duelOpponents;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* assembleDuelDifficultyLists.
|
* assembleDuelDifficultyLists.
|
||||||
* </p>
|
* </p>
|
||||||
* Assemble duel deck difficulty lists
|
* Assemble duel deck difficulty lists
|
||||||
*/
|
*/
|
||||||
private void assembleDuelDifficultyLists() {
|
private void assembleDuelDifficultyLists() {
|
||||||
|
|
||||||
sortedDuels.clear();
|
sortedDuels.clear();
|
||||||
sortedDuels.put(QuestEventDifficulty.EASY, new ArrayList<QuestEventDuel>());
|
sortedDuels.put(QuestEventDifficulty.EASY, new ArrayList<QuestEventDuel>());
|
||||||
sortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList<QuestEventDuel>());
|
sortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList<QuestEventDuel>());
|
||||||
sortedDuels.put(QuestEventDifficulty.HARD, new ArrayList<QuestEventDuel>());
|
sortedDuels.put(QuestEventDifficulty.HARD, new ArrayList<QuestEventDuel>());
|
||||||
sortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList<QuestEventDuel>());
|
sortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList<QuestEventDuel>());
|
||||||
|
|
||||||
for (final QuestEventDuel qd : allDuels) {
|
for (final QuestEventDuel qd : allDuels) {
|
||||||
sortedDuels.add(qd.getDifficulty(), qd);
|
sortedDuels.add(qd.getDifficulty(), qd);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/**
|
||||||
public void randomizeOpponents() {
|
* */
|
||||||
final long seed = new Random().nextLong();
|
public void randomizeOpponents() {
|
||||||
final Random r = new Random(seed);
|
final long seed = new Random().nextLong();
|
||||||
for (QuestEventDifficulty qd : sortedDuels.keySet()) {
|
final Random r = new Random(seed);
|
||||||
List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd);
|
for (QuestEventDifficulty qd : sortedDuels.keySet()) {
|
||||||
Collections.shuffle(list, r);
|
List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd);
|
||||||
}
|
Collections.shuffle(list, r);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user