Pārlūkot izejas kodu

Adding duration evaluation, which is simpler than Effect.

Sam Jaffe 8 gadi atpakaļ
vecāks
revīzija
5d7c9e3031

+ 2 - 2
src/org/leumasjaffe/charsheet/model/magic/DDSpell.java

@@ -65,10 +65,10 @@ public class DDSpell {
 	@NonNull EnumSet<Component> components = EnumSet.noneOf(Component.class);
 	@NonNull DDActionType castingTime;
 	@NonNull Range range;
-	Optional<Effect> effect; // TODO
+	Optional<Effect> effect;
 	Area area;
 	String target;
-	@NonNull String duration; // TODO
+	@NonNull Duration duration;
 	@NonNull String savingThrow; // TODO
 	boolean allowsSpellResistance;
 	@NonNull String description;

+ 39 - 0
src/org/leumasjaffe/charsheet/model/magic/Duration.java

@@ -0,0 +1,39 @@
+package org.leumasjaffe.charsheet.model.magic;
+
+import org.leumasjaffe.charsheet.util.StringHelper;
+import org.leumasjaffe.format.Named;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+import lombok.AccessLevel;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.FieldDefaults;
+import lombok.experimental.NonFinal;
+
+@RequiredArgsConstructor
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class Duration {
+	@NonNull String format;
+	String resolved;
+	int count, perlevel;
+	@NonFinal int step = 1;
+	
+	@JsonCreator
+	public Duration(final String descr) {
+		this.format = descr;
+		this.resolved = null;
+		this.count = this.perlevel = 0;
+	}
+	
+	public String getResolved(int level) {
+		final int result = count + perlevel * (level / 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));
+	}
+}

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

@@ -62,7 +62,7 @@ public interface Range {
 	
 	@JsonCreator
 	public static Range create(final Map<String, Object> data) {
-		final String type = (String) data.get("type");
+		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"));

+ 2 - 1
src/org/leumasjaffe/charsheet/view/magic/SpellInfoPanel.java

@@ -269,7 +269,8 @@ class SpellInfoPanel extends JPanel {
 		gbc_lblDuration.gridy = 5;
 		panel.add(lblDuration, gbc_lblDuration);
 		
-		JTextField duration = new JTextField(spell.getDuration());
+		JTextField duration = new JTextField(spell.getDuration().getResolved(dclass.getLevel()));
+		duration.setToolTipText(asString(spell.getDuration()));
 		duration.setEditable(false);
 		duration.setColumns(10);
 		GridBagConstraints gbc_duration = new GridBagConstraints();