- 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 {
private final MapOfLists<QuestEventDifficulty, QuestEventDuel> sortedDuels = new EnumMapOfLists<>(QuestEventDifficulty.class, CollectionSuppliers.<QuestEventDuel>arrayLists());
private final IStorage<QuestEventDuel> allDuels;
private final MapOfLists<QuestEventDifficulty, QuestEventDuel> sortedDuels = new EnumMapOfLists<>(QuestEventDifficulty.class, CollectionSuppliers.<QuestEventDuel>arrayLists());
private final IStorage<QuestEventDuel> allDuels;
/**
* Instantiate all events and difficulty lists.
*
* @param dir &emsp; File object
*/
public QuestEventDuelManager(final File dir) {
allDuels = new StorageBase<>("Quest duels", new QuestDuelReader(dir));
assembleDuelDifficultyLists();
}
/**
* Instantiate all events and difficulty lists.
*
* @param dir &emsp; File object
*/
public QuestEventDuelManager(final File dir) {
allDuels = new StorageBase<>("Quest duels", new QuestDuelReader(dir));
assembleDuelDifficultyLists();
}
public Iterable<QuestEventDuel> getAllDuels() {
return allDuels;
}
public Iterable<QuestEventDuel> getAllDuels() {
return allDuels;
}
public Iterable<QuestEventDuel> getDuels(QuestEventDifficulty difficulty) {
return sortedDuels.get(difficulty);
}
public Iterable<QuestEventDuel> getDuels(QuestEventDifficulty difficulty) {
return sortedDuels.get(difficulty);
}
// 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> 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> expertOrder = Arrays.asList(QuestEventDifficulty.EXPERT, QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY);
// 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> 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> expertOrder = Arrays.asList(QuestEventDifficulty.EXPERT, QuestEventDifficulty.HARD, QuestEventDifficulty.MEDIUM, QuestEventDifficulty.EASY);
private List<QuestEventDifficulty> getOrderForDifficulty(QuestEventDifficulty d) {
final List<QuestEventDifficulty> difficultyOrder;
switch (d) {
case EASY:
difficultyOrder = easyOrder;
break;
case MEDIUM:
difficultyOrder = mediumOrder;
break;
case HARD:
difficultyOrder = hardOrder;
break;
case EXPERT:
difficultyOrder = expertOrder;
break;
default:
throw new RuntimeException("unhandled difficulty: " + d);
}
switch (d) {
case EASY:
difficultyOrder = easyOrder;
break;
case MEDIUM:
difficultyOrder = mediumOrder;
break;
case HARD:
difficultyOrder = hardOrder;
break;
case EXPERT:
difficultyOrder = expertOrder;
break;
default:
throw new RuntimeException("unhandled difficulty: " + d);
}
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 (allDuels.size() <= toAdd) {
return;
}
// if there's no way we can satisfy the request, return now
if (allDuels.size() <= toAdd) {
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 (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) {
private void addRandomDuel(final List<QuestEventDuel> listOfDuels, final QuestEventDifficulty difficulty) {
QuestEventDuel duel = new QuestEventDuel();
QuestEventDuel duel = new QuestEventDuel();
List<QuestEventDifficulty> difficultyOrder = getOrderForDifficulty(difficulty);
List<QuestEventDuel> possibleDuels = new ArrayList<>();
for (QuestEventDifficulty diff : difficultyOrder) {
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.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());
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);
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() {
/**
* 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) {
return null;
}
final QuestPreferences questPreferences = FModel.getQuestPreferences();
if (FModel.getQuest().getAchievements() == null) {
return null;
}
final QuestController qCtrl = FModel.getQuest();
final int numberOfWins = qCtrl.getAchievements().getWin();
final QuestController qCtrl = FModel.getQuest();
final int numberOfWins = qCtrl.getAchievements().getWin();
final int index = qCtrl.getAchievements().getDifficulty();
final List<QuestEventDuel> duelOpponents = new ArrayList<>();
final int index = qCtrl.getAchievements().getDifficulty();
final List<QuestEventDuel> duelOpponents = new ArrayList<>();
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);
}
}
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;
return duelOpponents;
}
}
/**
* <p>
* assembleDuelDifficultyLists.
* </p>
* Assemble duel deck difficulty lists
*/
private void assembleDuelDifficultyLists() {
/**
* <p>
* assembleDuelDifficultyLists.
* </p>
* Assemble duel deck difficulty lists
*/
private void assembleDuelDifficultyLists() {
sortedDuels.clear();
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>());
sortedDuels.clear();
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);
}
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()) {
List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd);
Collections.shuffle(list, r);
}
}
/**
* */
public void randomizeOpponents() {
final long seed = new Random().nextLong();
final Random r = new Random(seed);
for (QuestEventDifficulty qd : sortedDuels.keySet()) {
List<QuestEventDuel> list = (List<QuestEventDuel>) sortedDuels.get(qd);
Collections.shuffle(list, r);
}
}
}