Quellcode durchsuchen

Adding "ability" to specify whether the unit of measurement is feet or squares.

Sam Jaffe vor 8 Jahren
Ursprung
Commit
a9aca91aa9

+ 26 - 0
src/org/leumasjaffe/charsheet/config/Config.java

@@ -0,0 +1,26 @@
+package org.leumasjaffe.charsheet.config;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+public class Config {
+	public final String DISTANCE = "Distance Measurement Unit";
+	Map<String, Object> properties = new HashMap<>();
+	
+	public void set(String k, Object v) {
+		properties.put(k, v);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public <T> T get(String k) {
+		return (T) properties.get(k);
+	}
+	
+	@SuppressWarnings("unchecked")
+	public <T> T get(String k, T or) {
+		return (T) properties.getOrDefault(k, or);
+	}
+}

+ 32 - 9
src/org/leumasjaffe/charsheet/model/magic/Range.java

@@ -2,6 +2,9 @@ package org.leumasjaffe.charsheet.model.magic;
 
 import java.util.Map;
 
+import org.leumasjaffe.charsheet.config.Config;
+import org.leumasjaffe.charsheet.util.StringHelper;
+
 import com.fasterxml.jackson.annotation.JsonCreator;
 
 import lombok.AccessLevel;
@@ -11,6 +14,29 @@ import lombok.RequiredArgsConstructor;
 import lombok.experimental.FieldDefaults;
 
 public interface Range {
+	public static final int DISTANCE_MEASUREMENT_FEET = 0x0, DISTANCE_MEASUREMENT_SQUARES = 0x1;
+	
+	@FieldDefaults(level=AccessLevel.PUBLIC, makeFinal=true)
+	public static final class __Pair {
+		int[] value;
+		String measure;
+		
+		__Pair(int... feet) {
+			value = new int[feet.length];
+			final int div;
+			if (Config.<Integer>get(Config.DISTANCE, DISTANCE_MEASUREMENT_FEET).equals(DISTANCE_MEASUREMENT_SQUARES)) {
+				div = 5;
+				measure = "squares";
+			} else {
+				div = 1;
+				measure = "ft.";
+			}
+			for (int i = 0; i < feet.length; ++i) {
+				value[i] = feet[i] / div;
+			}
+		}
+	}
+	
 	public static final Range Personal = new Basic("Personal"), 
 			Touch = new Basic("Touch"), 
 			Close = new WithLevelGrowth("Close", 25, 5, 1), 
@@ -63,9 +89,8 @@ public interface Range {
 		int range;
 		
 		public String toString() {
-			final StringBuilder str = new StringBuilder(name);
-			str.append(" (").append(range).append(" ft.)");
-			return str.toString();
+			final __Pair p = new __Pair(range);
+			return StringHelper.format(" ({} {})", p.value[0], p.measure);
 		}
 	}
 	
@@ -79,15 +104,13 @@ public interface Range {
 		
 		@Override
 		public String getResolved(int level) {
-			final StringBuilder str = new StringBuilder();
-			str.append(range + (per * (level / step))).append(" ft.");
-			return str.toString();
+			final __Pair p = new __Pair(range + (per * (level / step)));
+			return StringHelper.format("{} {}", p.value[0], p.measure);
 		}
 		
 		public String toString() {
-			final StringBuilder str = new StringBuilder(name);
-			str.append(" (").append(range).append(" ft.");
-			str.append(" + ").append(per).append(" ft./");
+			final __Pair p1 = new __Pair(range, per);
+			final StringBuilder str = new StringBuilder(StringHelper.format(" ({} {2} + {} {2}/", p1.value[0], p1.value[1], p1.measure));
 			if ( step == 1 ) { str.append("level"); }
 			else { str.append(step).append(" levels"); }
 			str.append(')');