浏览代码

Removing unused WithDistance from Duration and Range interfaces.
Renaming perlevel to per.
Removing Map constructor for Range.

Sam Jaffe 8 年之前
父节点
当前提交
f7a952814a

+ 2 - 2
resources/spells/default.json

@@ -15,7 +15,7 @@
     "effect":{
       "format":"Up to {perlevel} gallons of water/level",
       "resolved":"Up to {atlevel} gallons of water",
-      "perlevel":2
+      "per":2
     },
     "duration":"Instantaneous",
     "savingThrow":"None",
@@ -42,7 +42,7 @@
     "effect":{
       "format":"1d8 + {perlevel} per level (maximum +{upto})",
       "resolved":"1d8 + {atlevel}",
-      "perlevel":1,
+      "per":1,
       "upto":5
     },
     "duration":"Instantaneous",

+ 18 - 20
src/org/leumasjaffe/charsheet/model/magic/dimension/Duration.java

@@ -4,19 +4,16 @@ import static org.leumasjaffe.charsheet.config.Constants.K_DURATION;
 import static org.leumasjaffe.charsheet.config.Constants.DurationMeasurement.*;
 
 import org.leumasjaffe.charsheet.config.Config;
-import org.leumasjaffe.charsheet.model.magic.dimension.Range.__Pair;
 import org.leumasjaffe.charsheet.util.StringHelper;
-import org.leumasjaffe.format.Named;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
-import lombok.Getter;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.experimental.FieldDefaults;
-import lombok.experimental.NonFinal;
 
 public interface Duration {
 	@AllArgsConstructor
@@ -48,6 +45,19 @@ public interface Duration {
 
 	public default String getResolved(int level) { return toString(); }
 
+	@JsonCreator
+	public static Duration create(String name) {
+		return new Basic(name);
+	}
+	
+	@JsonCreator
+	public static Duration create(@JsonProperty("unit") Measure meas, 
+			@JsonProperty("duration") int min, 
+			@JsonProperty("per") int per, 
+			@JsonProperty("step") int step) {
+		return new WithLevelGrowth(meas, min, per, step);
+	}
+	
 	@RequiredArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	public static class Basic implements Duration {
@@ -58,34 +68,22 @@ public interface Duration {
 		}
 	}
 	
-	@RequiredArgsConstructor
-	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
-	public static class WithDistance implements Duration {
-		@NonNull Measure measure; 
-		int range;
-		
-		public String toString() {
-			final __Pair p = new __Pair(measure, range);
-			return StringHelper.format("{} {}{0>1?s:}", p.value[0], p.measure);
-		}
-	}
-	
 	@RequiredArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	public static class WithLevelGrowth implements Duration {
 		@NonNull Measure measure; 
-		int range, per, step;
+		int length, per, step;
 		
 		@Override
 		public String getResolved(int level) {
-			final __Pair p = new __Pair(measure, range + (per * (level / step)));
+			final __Pair p = new __Pair(measure, length + (per * (level / step)));
 			return StringHelper.format("{} {}{0>1?s:}", p.value[0], p.measure);
 		}
 		
 		public String toString() {
-			final __Pair p = new __Pair(measure, range, per);
+			final __Pair p = new __Pair(measure, length, per);
 			final StringBuilder str = new StringBuilder(StringHelper.format("{} {3}{0>1?s:} + {} {}{1>1?s:}/{?level:{} levels}",
-					p.value[0], p.value[1], p.measure, step == 1, step));
+					p.value[0], p.value[1], p.measure, step));
 			return str.toString();
 		}
 	}

+ 3 - 3
src/org/leumasjaffe/charsheet/model/magic/dimension/Effect.java

@@ -16,18 +16,18 @@ import lombok.experimental.NonFinal;
 public class Effect {
 	@NonNull String format;
 	String resolved;
-	int count, perlevel, beyond;
+	int count, per, beyond;
 	@NonFinal @Setter(AccessLevel.PRIVATE) @Getter(AccessLevel.PRIVATE) int step = 1, upto = Integer.MAX_VALUE;
 	
 	public String getResolved(int level) {
-		final int result = count + perlevel * ((Math.min(level, upto)-beyond) / step);
+		final int result = count + per * ((Math.min(level, upto)-beyond) / step);
 		return resolved == null ? toString() :
 			StringHelper.format(resolved, new Named("atlevel", result));
 	}
 	
 	public String toString() {
 		return StringHelper.format(format, new Named("count", count), 
-				new Named("perlevel", perlevel), new Named("step", step),
+				new Named("per", per), new Named("step", step),
 				new Named("beyond", beyond), new Named("upto", upto));
 	}
 }

+ 3 - 29
src/org/leumasjaffe/charsheet/model/magic/dimension/Range.java

@@ -1,7 +1,5 @@
 package org.leumasjaffe.charsheet.model.magic.dimension;
 
-import java.util.Map;
-
 import org.leumasjaffe.charsheet.config.Config;
 import org.leumasjaffe.charsheet.util.StringHelper;
 
@@ -60,19 +58,7 @@ public interface Range {
 		}
 		throw new IllegalArgumentException("Unrecognized Range constant: " + name);
 	}
-	
-	@JsonCreator
-	public static Range create(final Map<String, Object> data) {
-		final String type = (String) data.get("@type");
-		switch (type.toLowerCase()) {
-		case "basic": return new Basic((String) data.get("name"));
-		case "withdistance": return new WithDistance((String) data.get("name"), (Integer) data.get("range"));
-		case "withlevelgrowth": return new WithLevelGrowth((String) data.get("name"), (Integer) data.get("range"), 
-				(Integer) data.get("per"), (Integer) data.get("step"));
-		}
-		throw new IllegalArgumentException("Unrecognized Range type: " + type);
-	}
-	
+		
 	@RequiredArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	public static class Basic implements Range {
@@ -83,18 +69,6 @@ public interface Range {
 		}
 	}
 	
-	@RequiredArgsConstructor
-	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
-	public static class WithDistance implements Range {
-		@NonNull @Getter String name;
-		int range;
-		
-		public String toString() {
-			final __Pair p = new __Pair(range);
-			return StringHelper.format(" ({} {})", p.value[0], p.measure);
-		}
-	}
-	
 	@RequiredArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	public static class WithLevelGrowth implements Range {
@@ -103,13 +77,13 @@ public interface Range {
 		
 		@Override
 		public String getResolved(int level) {
-			final __Pair p = new __Pair(range + (per * (level / step)));
+			final __Pair p = new __Pair(range + (step == 0 ? 0 : (per * (level / step))));
 			return StringHelper.format("{} {}", p.value[0], p.measure);
 		}
 		
 		public String toString() {
 			final __Pair p = new __Pair(range, per);
-			final StringBuilder str = new StringBuilder(StringHelper.format("{} ({} {3} + {} {}/{=1?level:{4} levels})",
+			final StringBuilder str = new StringBuilder(StringHelper.format("{} ({} {3}{4>0? + {} {}/{=1?level:{4} levels}:})",
 					name, p.value[0], p.value[1], p.measure, step));
 			return str.toString();
 		}