package forge; import forge.error.ErrorViewer; import forge.properties.NewConstants; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; /** * <p>ReadQuest_Assignment class.</p> * * @author Forge * @version $Id: $ */ public class ReadQuest_Assignment implements Runnable, NewConstants { private BufferedReader in; ArrayList<Quest_Assignment> allQuests = new ArrayList<Quest_Assignment>(); private int totalWins; private List<Integer> completedQuests = new ArrayList<Integer>(); /** * <p>getQuests.</p> * * @return a {@link java.util.List} object. */ public List<Quest_Assignment> getQuests() { return new ArrayList<Quest_Assignment>(allQuests); } /** * <p>getQuestsByIds.</p> * * @param availableQuestIds a {@link java.util.List} object. * @return a {@link java.util.List} object. */ public List<Quest_Assignment> getQuestsByIds(List<Integer> availableQuestIds) { List<Quest_Assignment> quests = new ArrayList<Quest_Assignment>(); for (Quest_Assignment qa : allQuests) { if (availableQuestIds.contains(qa.getId())) quests.add(qa); } return quests; } /** * <p>getQuestById.</p> * * @param i a int. * @return a {@link forge.Quest_Assignment} object. */ public Quest_Assignment getQuestById(int i) { for (Quest_Assignment qa : allQuests) { if (qa.getId() == i) return qa; } return null; } /* public Quest_Assignment getQuestById(int id) { return allQuests.get(id); } */ /** * <p>Constructor for ReadQuest_Assignment.</p> * * @param filename a {@link java.lang.String} object. * @param questData a {@link forge.quest.data.QuestData} object. */ public ReadQuest_Assignment(String filename, forge.quest.data.QuestData questData) { this(new File(filename), questData); } /** * <p>Constructor for ReadQuest_Assignment.</p> * * @param file a {@link java.io.File} object. * @param questData a {@link forge.quest.data.QuestData} object. */ public ReadQuest_Assignment(File file, forge.quest.data.QuestData questData) { if (questData != null) { totalWins = questData.getWin(); if (questData.getCompletedQuests() != null) completedQuests = questData.getCompletedQuests(); else completedQuests = new ArrayList<Integer>(); } if (!file.exists()) throw new RuntimeException("ReadQuest_Assignment : constructor error -- file not found -- filename is " + file.getAbsolutePath()); //makes the checked exception, into an unchecked runtime exception try { in = new BufferedReader(new FileReader(file)); } catch (Exception ex) { ErrorViewer.showError(ex, "File \"%s\" not found", file.getAbsolutePath()); throw new RuntimeException("ReadQuest_Assignment : constructor error -- file not found -- filename is " + file.getPath()); } }//ReadCard() /* id * name * desc * difficulty * repeatable * numberWinsRequired * cardReward * creditsReward */ /** * <p>run.</p> */ public void run() { Quest_Assignment qa; String s = readLine(); ArrayList<Integer> ids = new ArrayList<Integer>(); while (!s.equals("End")) { qa = new Quest_Assignment(); if (s.equals("")) throw new RuntimeException("ReadQuest_Assignment : run() reading error, id is blank"); int id = Integer.parseInt(s); qa.setId(id); s = readLine(); qa.setName(s); s = readLine(); qa.setDesc(s); s = readLine(); qa.setDifficulty(s); if (qa.getDifficulty().equals("Medium")) qa.setComputerLife(25); else if (qa.getDifficulty().equals("Hard")) qa.setComputerLife(30); else if (qa.getDifficulty().equals("Very Hard")) qa.setComputerLife(35); else if (qa.getDifficulty().equals("Expert")) qa.setComputerLife(50); else if (qa.getDifficulty().equals("Insane")) qa.setComputerLife(100); s = readLine(); if (s.equals("Repeatable")) qa.setRepeatable(true); else qa.setRepeatable(false); s = readLine(); int wins = Integer.valueOf(s); qa.setRequiredNumberWins(wins); s = readLine(); qa.setCardReward(s); s = readLine(); long reward = Long.parseLong(s.trim()); qa.setCreditsReward(reward); s = readLine(); qa.setIconName(s); //s = readLine(); s = readLine(); if (ids.contains(qa.getId())) { System.out.println("ReadQuest_Assignment:run() error - duplicate card name: " + qa.getId()); throw new RuntimeException("ReadQuest_Assignment:run() error - duplicate card name: " + qa.getId()); } ids.add(qa.getId()); if (qa.getRequiredNumberWins() <= totalWins && !completedQuests.contains(qa.getId())) { forge.quest.data.QuestUtil.setupQuest(qa); allQuests.add(qa); } //id: s = readLine(); } }//run() /** * <p>readLine.</p> * * @return a {@link java.lang.String} object. */ private String readLine() { //makes the checked exception, into an unchecked runtime exception try { String s = in.readLine(); if (s != null) s = s.trim(); return s; } catch (Exception ex) { ErrorViewer.showError(ex); throw new RuntimeException("ReadQuest_Assignment: readLine(Quest_Assignment) error"); } }//readLine(Quest_Assignment) }