diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/tlIItools/Effect.java | 135 | ||||
| -rw-r--r-- | src/main/java/tlIItools/EffectRepo.java | 142 |
2 files changed, 148 insertions, 129 deletions
diff --git a/src/main/java/tlIItools/Effect.java b/src/main/java/tlIItools/Effect.java index 12e2765a..9075b490 100644 --- a/src/main/java/tlIItools/Effect.java +++ b/src/main/java/tlIItools/Effect.java @@ -1,13 +1,8 @@ package tlIItools; -import java.io.FileReader; -import java.io.IOException; - import java.util.ArrayList; import java.util.List; -import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; import java.util.Scanner; /** @@ -26,124 +21,6 @@ public class Effect { public static boolean doTiming; /** - * The list of detail strings for skills. - */ - private static Map<String, String> detals; - /** - * The list of detail strings for timed skills. - */ - private static Map<String, String> timeDetals; - - /** - * The list of replacements for detail strings. - */ - private static List<ReplPair> replList; - - /* - * Init. lists from files. - */ - static { - try (FileReader detalReader = new FileReader("data/affix-detals.txt")) { - detals = readDetails(new Scanner(detalReader)); - } catch (IOException ioex) { - AffixLister.errOut.println("Error loading affix detail text"); - } - - try (FileReader timedDetalReader = new FileReader("data/timed-affix-detals.txt")) { - timeDetals = readDetails(new Scanner(timedDetalReader)); - } catch (IOException ioex) { - AffixLister.errOut.println("Error loading timed affix detail text"); - } - - try (FileReader replListReader = new FileReader("data/replace-list.txt")) { - replList = ReplPair.readList(new Scanner(replListReader)); - } catch (IOException ioex) { - AffixLister.errOut.println("Error loading replacement lists"); - } - } - - /** - * Read effect detail strings from an input source. - * - * @param scn - * The source to read from. - * @return - * The map of effect details to use. - */ - public static Map<String, String> readDetails(Scanner scn) { - Map<String, String> detals = new HashMap<>(); - - return readDetails(detals, scn); - } - - /** - * Read effect detail strings from an input source, adding to an - * existing set. - * - * @param detals - * The details to add to. - * @param scn - * The source to read from. - * @return - * The map of effect details to use. - */ - public static Map<String, String> readDetails(Map<String, String> detals, Scanner scn) { - while (scn.hasNextLine()) { - String name = scn.nextLine().trim(); - if (name.equals("")) continue; - if (name.startsWith("#")) continue; - - String body; - do { - body = scn.nextLine().trim(); - } while (body.startsWith("#")); - - detals.put(name, body); - } - - return detals; - } - - /** - * Sanity check the loaded format strings. - */ - public static void sanityCheckFormats() { - for (Entry<String, String> detal : detals.entrySet()) { - String fmt = detal.getValue(); - - AffixLister.errOut.printf("\tTRACE: Applying replacements for %s\n", detal.getKey()); - for (ReplPair repl : replList) { - String tmp = fmt; - fmt = fmt.replaceAll(repl.find, repl.replace); - if (!fmt.equals(tmp)) { - String outFmt = "\t\tTRACE: Replaced %s with %s: \n\t\t%s\n\t\t%s\n"; - - AffixLister.errOut.printf(outFmt, repl.find, repl.replace, tmp, fmt); - } - } - - if (fmt.contains("<") || fmt.contains(">")) { - String warnFmt = "WARN: Details for effect %s are malformated (contains < or >):\n\t%s\n"; - - AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt); - } - } - - for (Entry<String, String> detal : timeDetals.entrySet()) { - String fmt = detal.getValue(); - - for (ReplPair repl : replList) { - fmt = fmt.replaceAll(repl.find, repl.replace); - } - - if (fmt.contains("<") || fmt.contains(">")) { - String warnFmt = "WARN: Details for timed effect %s are malformatted (contains < or >):\n\t%s\n"; - AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt); - } - } - } - - /** * The file name this effect came from. */ public String fName; @@ -278,20 +155,20 @@ public class Effect { sb.append("Inflict on Hit: "); } - Map<String, String> detMap = hasDuration ? timeDetals : detals; + Map<String, String> detMap = hasDuration ? EffectRepo.timeDetals : EffectRepo.detals; - if (detMap.containsKey(type) || (hasDuration && !timeDetals.containsKey(type) && detals.containsKey(type))) { + if (detMap.containsKey(type) || (hasDuration && !EffectRepo.timeDetals.containsKey(type) && EffectRepo.detals.containsKey(type))) { String fmt; - if (hasDuration && !timeDetals.containsKey(type) && detals.containsKey(type)) { + if (hasDuration && !EffectRepo.timeDetals.containsKey(type) && EffectRepo.detals.containsKey(type)) { AffixLister.errOut.printf("Improvised details for timed %s\n", type); - fmt = detals.get(type) + "for <DUR> seconds"; + fmt = EffectRepo.detals.get(type) + "for <DUR> seconds"; } else { fmt = detMap.get(type); } // Expand aliases first. - for (ReplPair repl : replList) { + for (ReplPair repl : EffectRepo.replList) { fmt = fmt.replaceAll(repl.find, repl.replace); } @@ -573,7 +450,7 @@ public class Effect { if (doTiming) { String fmt = "\t\tProcessed effect %s from %s in %d nanoseconds (%.2f seconds)\n"; - double seconds = ((double)((endTime - startTime) / 1000000000)); + double seconds = (((endTime - startTime) / 1000000000)); errs.add(String.format(fmt, efct.name, scnSource, endTime - startTime, seconds)); } diff --git a/src/main/java/tlIItools/EffectRepo.java b/src/main/java/tlIItools/EffectRepo.java new file mode 100644 index 00000000..f2f0d076 --- /dev/null +++ b/src/main/java/tlIItools/EffectRepo.java @@ -0,0 +1,142 @@ +package tlIItools; + +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.util.Map.Entry; + +/** + * Repository class for storing information needed for parsing/outputing + * effects. + * + * @author Ben Culkin + * + */ +public class EffectRepo { + // NOTE: consider making these use function accessors in the future? + // --bculkin, 6/24/20 + /** + * The list of detail strings for skills. + */ + public static Map<String, String> detals; + /** + * The list of detail strings for timed skills. + */ + public static Map<String, String> timeDetals; + + /** + * The list of replacements for detail strings. + */ + public static List<ReplPair> replList; + + /* + * Init. lists from files. + */ + static { + try (FileReader detalReader = new FileReader("data/affix-detals.txt")) { + detals = readDetails(new Scanner(detalReader)); + } catch (IOException ioex) { + AffixLister.errOut.println("Error loading affix detail text"); + } + + try (FileReader timedDetalReader + = new FileReader("data/timed-affix-detals.txt")) { + timeDetals = readDetails(new Scanner(timedDetalReader)); + } catch (IOException ioex) { + AffixLister.errOut.println("Error loading timed affix detail text"); + } + + try (FileReader replListReader = new FileReader("data/replace-list.txt")) { + replList = ReplPair.readList(new Scanner(replListReader)); + } catch (IOException ioex) { + AffixLister.errOut.println("Error loading replacement lists"); + } + } + + /** + * Read effect detail strings from an input source. + * + * @param scn + * The source to read from. + * @return The map of effect details to use. + */ + public static Map<String, String> readDetails(Scanner scn) { + Map<String, String> detalMap = new HashMap<>(); + + return readDetails(detalMap, scn); + } + + /** + * Read effect detail strings from an input source, adding to an existing set. + * + * @param detalMap + * The details to add to. + * @param scn + * The source to read from. + * @return The map of effect details to use. + */ + public static Map<String, String> readDetails(Map<String, String> detalMap, + Scanner scn) { + while (scn.hasNextLine()) { + String name = scn.nextLine().trim(); + if (name.equals("")) + continue; + if (name.startsWith("#")) + continue; + + String body; + do { + body = scn.nextLine().trim(); + } while (body.startsWith("#")); + + detalMap.put(name, body); + } + + return detalMap; + } + + /** + * Sanity check the loaded format strings. + */ + public static void sanityCheckFormats() { + for (Entry<String, String> detal : detals.entrySet()) { + String fmt = detal.getValue(); + + AffixLister.errOut.printf("\tTRACE: Applying replacements for %s\n", + detal.getKey()); + for (ReplPair repl : replList) { + String tmp = fmt; + fmt = fmt.replaceAll(repl.find, repl.replace); + if (!fmt.equals(tmp)) { + String outFmt = "\t\tTRACE: Replaced %s with %s: \n\t\t%s\n\t\t%s\n"; + + AffixLister.errOut.printf(outFmt, repl.find, repl.replace, tmp, fmt); + } + } + + if (fmt.contains("<") || fmt.contains(">")) { + String warnFmt + = "WARN: Details for effect %s are malformated (contains < or >):\n\t%s\n"; + + AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt); + } + } + + for (Entry<String, String> detal : timeDetals.entrySet()) { + String fmt = detal.getValue(); + + for (ReplPair repl : replList) { + fmt = fmt.replaceAll(repl.find, repl.replace); + } + + if (fmt.contains("<") || fmt.contains(">")) { + String warnFmt + = "WARN: Details for timed effect %s are malformatted (contains < or >):\n\t%s\n"; + AffixLister.errOut.printf(warnFmt, detal.getKey(), fmt); + } + } + } +} |
