summaryrefslogtreecommitdiff
path: root/src/main/java/tlIItools/EffectRepo.java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-06-24 20:12:42 -0400
committerBen Culkin <scorpress@gmail.com>2020-06-24 20:12:42 -0400
commit4d1f759a298b3f7d2c908c90b4d7bcf03b3b111b (patch)
tree55c8751cf4a1316e43abfde7fcc2139c70481662 /src/main/java/tlIItools/EffectRepo.java
parentc2e7530edb3b9a380fbf3d21a0ef1a2530db65a1 (diff)
Move reading of effect details to new class
This pulls out the reading of effect details from our data files to a new class that is referenced by Effect, EffectRepo
Diffstat (limited to 'src/main/java/tlIItools/EffectRepo.java')
-rw-r--r--src/main/java/tlIItools/EffectRepo.java142
1 files changed, 142 insertions, 0 deletions
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);
+ }
+ }
+ }
+}