- Formatting QuestEventDuelManager.

This commit is contained in:
Agetian
2017-06-29 07:54:20 +00:00
parent d3089c2955
commit d3d2ae6313

View File

@@ -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 &emsp; File object * @param dir &emsp; 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) {
// if there's no way we can satisfy the request, return now private void addDuel(List<QuestEventDuel> outList, QuestEventDifficulty targetDifficulty, int toAdd) {
if (allDuels.size() <= toAdd) {
return;
}
final List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(targetDifficulty); // if there's no way we can satisfy the request, return now
if (allDuels.size() <= toAdd) {
return;
}
for (QuestEventDifficulty d : difficultyOrder) { // will add duels from preferred difficulty, will use others if the former has too few options. final List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(targetDifficulty);
for (QuestEventDuel duel : sortedDuels.get(d)) {
if (toAdd <= 0) {
return;
}
if (!outList.contains(duel)) {
outList.add(duel);
toAdd--;
}
}
}
} 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)) {
if (toAdd <= 0) {
return;
}
if (!outList.contains(duel)) {
outList.add(duel);
toAdd--;
}
}
}
private void addRandomDuel(final List<QuestEventDuel> listOfDuels, final QuestEventDifficulty difficulty) { }
QuestEventDuel duel = new QuestEventDuel(); private void addRandomDuel(final List<QuestEventDuel> listOfDuels, final QuestEventDifficulty difficulty) {
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));
@@ -124,99 +123,100 @@ public class QuestEventDuelManager {
break; break;
} }
} }
QuestEventDuel randomOpponent = possibleDuels.get(((int) (possibleDuels.size() * Math.random())));
duel.setTitle("Random Opponent"); QuestEventDuel randomOpponent = possibleDuels.get(((int) (possibleDuels.size() * Math.random())));
duel.setIconImageKey(randomOpponent.getIconImageKey());
duel.setOpponentName(randomOpponent.getTitle());
duel.setDifficulty(difficulty);
duel.setProfile(randomOpponent.getProfile());
duel.setShowDifficulty(false);
duel.setDescription("Fight a random opponent");
duel.setEventDeck(randomOpponent.getEventDeck());
listOfDuels.add(duel); duel.setTitle("Random Opponent");
duel.setIconImageKey(randomOpponent.getIconImageKey());
duel.setOpponentName(randomOpponent.getTitle());
duel.setDifficulty(difficulty);
duel.setProfile(randomOpponent.getProfile());
duel.setShowDifficulty(false);
duel.setDescription("Fight a random opponent");
duel.setEventDeck(randomOpponent.getEventDeck());
} listOfDuels.add(duel);
/** }
* Generates an array of new duel opponents based on current win conditions.
*
* @return an array of {@link java.lang.String} objects.
*/
public final List<QuestEventDuel> generateDuels() {
final QuestPreferences questPreferences = FModel.getQuestPreferences(); /**
if (FModel.getQuest().getAchievements() == null) { * Generates an array of new duel opponents based on current win conditions.
return null; *
} * @return an array of {@link java.lang.String} objects.
*/
public final List<QuestEventDuel> generateDuels() {
final QuestController qCtrl = FModel.getQuest(); final QuestPreferences questPreferences = FModel.getQuestPreferences();
final int numberOfWins = qCtrl.getAchievements().getWin(); if (FModel.getQuest().getAchievements() == null) {
return null;
}
final int index = qCtrl.getAchievements().getDifficulty(); final QuestController qCtrl = FModel.getQuest();
final List<QuestEventDuel> duelOpponents = new ArrayList<>(); final int numberOfWins = qCtrl.getAchievements().getWin();
if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) { final int index = qCtrl.getAchievements().getDifficulty();
addDuel(duelOpponents, QuestEventDifficulty.EASY, 3); final List<QuestEventDuel> duelOpponents = new ArrayList<>();
addRandomDuel(duelOpponents, QuestEventDifficulty.EASY);
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.EASY, 1);
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 2);
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 3);
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 1);
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_EXPERTAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.HARD, 3);
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else {
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
addDuel(duelOpponents, QuestEventDifficulty.EXPERT, 1);
if (Math.random() * 3 < 2) {
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else {
addRandomDuel(duelOpponents, QuestEventDifficulty.EXPERT);
}
}
return duelOpponents; if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.EASY, 3);
addRandomDuel(duelOpponents, QuestEventDifficulty.EASY);
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_MEDIUMAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.EASY, 1);
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 2);
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 3);
addRandomDuel(duelOpponents, QuestEventDifficulty.MEDIUM);
} else if (numberOfWins == questPreferences.getPrefInt(DifficultyPrefs.WINS_HARDAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.MEDIUM, 1);
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else if (numberOfWins < questPreferences.getPrefInt(DifficultyPrefs.WINS_EXPERTAI, index)) {
addDuel(duelOpponents, QuestEventDifficulty.HARD, 3);
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else {
addDuel(duelOpponents, QuestEventDifficulty.HARD, 2);
addDuel(duelOpponents, QuestEventDifficulty.EXPERT, 1);
if (Math.random() * 3 < 2) {
addRandomDuel(duelOpponents, QuestEventDifficulty.HARD);
} else {
addRandomDuel(duelOpponents, QuestEventDifficulty.EXPERT);
}
}
} return duelOpponents;
/** }
* <p>
* assembleDuelDifficultyLists.
* </p>
* Assemble duel deck difficulty lists
*/
private void assembleDuelDifficultyLists() {
sortedDuels.clear(); /**
sortedDuels.put(QuestEventDifficulty.EASY, new ArrayList<QuestEventDuel>()); * <p>
sortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList<QuestEventDuel>()); * assembleDuelDifficultyLists.
sortedDuels.put(QuestEventDifficulty.HARD, new ArrayList<QuestEventDuel>()); * </p>
sortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList<QuestEventDuel>()); * Assemble duel deck difficulty lists
*/
private void assembleDuelDifficultyLists() {
for (final QuestEventDuel qd : allDuels) { sortedDuels.clear();
sortedDuels.add(qd.getDifficulty(), qd); sortedDuels.put(QuestEventDifficulty.EASY, new ArrayList<QuestEventDuel>());
} sortedDuels.put(QuestEventDifficulty.MEDIUM, new ArrayList<QuestEventDuel>());
sortedDuels.put(QuestEventDifficulty.HARD, new ArrayList<QuestEventDuel>());
sortedDuels.put(QuestEventDifficulty.EXPERT, new ArrayList<QuestEventDuel>());
} for (final QuestEventDuel qd : allDuels) {
sortedDuels.add(qd.getDifficulty(), qd);
}
/** */ }
public void randomizeOpponents() {
final long seed = new Random().nextLong(); /**
final Random r = new Random(seed); * */
for (QuestEventDifficulty qd : sortedDuels.keySet()) { public void randomizeOpponents() {
List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd); final long seed = new Random().nextLong();
Collections.shuffle(list, r); final Random r = new Random(seed);
} for (QuestEventDifficulty qd : sortedDuels.keySet()) {
} List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd);
Collections.shuffle(list, r);
}
}
} }