- 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) { 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);
} }
}
} }