Selaa lähdekoodia

Adding ability to poll data from Class levels, as they grant boons as well.

Sam Jaffe 8 vuotta sitten
vanhempi
commit
2fc6b17db9

+ 7 - 4
src/main/lombok/org/leumasjaffe/charsheet/model/DDCharacter.java

@@ -8,9 +8,10 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.leumasjaffe.charsheet.model.features.DDFeat;
-import org.leumasjaffe.charsheet.model.features.DDFeature;
+import org.leumasjaffe.charsheet.model.features.DDProperty;
 import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.model.observable.ObjectValue;
@@ -97,8 +98,10 @@ public class DDCharacter extends Observable {
 		return classes.stream().map(DDCharacterClass::getLevel).mapToInt(IntValue::value).sum();
 	}
 	
-	public List<DDFeature> getFeatureBonuses(String appliesScope) {
-		return feats.stream().flatMap(f -> f.getProperties().stream())
-				.filter(f -> f.appliesTo(appliesScope)).collect(Collectors.toList());
+	public List<DDProperty> getFeatureBonuses(String appliesScope) {
+		return Stream.concat(feats.stream().flatMap(f -> f.getProperties().stream())
+				.filter(f -> f.appliesTo(appliesScope)),
+				classes.stream().flatMap(cl -> cl.getFeatureBonuses(appliesScope).stream()))
+				.collect(Collectors.toList());
 	}
 }

+ 12 - 0
src/main/lombok/org/leumasjaffe/charsheet/model/DDCharacterClass.java

@@ -1,8 +1,13 @@
 package org.leumasjaffe.charsheet.model;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
+import org.leumasjaffe.charsheet.model.features.DDProperty;
 import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.observer.Observable;
@@ -93,4 +98,11 @@ public class DDCharacterClass extends Observable implements Comparable<DDCharact
 	public int compareTo(DDCharacterClass o) {
 		return getName().compareTo(o.getName());
 	}
+
+	public List<DDProperty> getFeatureBonuses(String appliesScope) {
+		return IntStream.rangeClosed(1, level.value())
+				.mapToObj(level -> name.base.getFeatures(level).stream())
+				.reduce(Stream.empty(), (l, r) -> Stream.concat(l, r))
+				.filter(p -> p.appliesTo(appliesScope)).collect(Collectors.toList());
+	}
 }

+ 6 - 2
src/main/lombok/org/leumasjaffe/charsheet/model/DDClass.java

@@ -9,7 +9,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 
-import org.leumasjaffe.charsheet.model.features.DDFeature;
+import org.leumasjaffe.charsheet.model.features.DDProperty;
 import org.leumasjaffe.charsheet.model.magic.DDSpell;
 import org.leumasjaffe.charsheet.model.magic.DDSpellList;
 import org.leumasjaffe.charsheet.model.magic.DDSpellList.SpellList;
@@ -37,7 +37,7 @@ public class DDClass {
 	@NonNull SaveQuality ref;
 	@NonNull SaveQuality will;
 	
-	@Getter(AccessLevel.NONE) @NonNull List<List<DDFeature>> features;
+	@Getter(AccessLevel.NONE) @NonNull List<List<DDProperty>> features;
 	
 	@NonNull Set<String> skills;
 	
@@ -66,4 +66,8 @@ public class DDClass {
 		}
 		return skills.contains(skillName);
 	}
+
+	public List<DDProperty> getFeatures(int level) {
+		return features.size() > level ? Collections.unmodifiableList(features.get(level)) : Collections.emptyList();
+	}
 }

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/model/features/DDFeat.java

@@ -14,7 +14,7 @@ import lombok.experimental.FieldDefaults;
 public class DDFeat {
 	@NonNull String name, page, benefit;
 	@NonNull List<DDPrerequisite> prerequisites;
-	@NonNull List<DDFeature> properties;
+	@NonNull List<DDProperty> properties;
 	
 	@JsonCreator public static DDFeat fromString(String name) {
 		return DDFeatFactory.loadFeat(name);

+ 7 - 7
src/main/lombok/org/leumasjaffe/charsheet/model/features/DDFeature.java

@@ -9,11 +9,11 @@ import lombok.AllArgsConstructor;
 
 @JsonTypeInfo(use=Id.NAME)
 @JsonSubTypes({
-	@Type(name="Simple", value=DDFeature.Simple.class),
-	@Type(name="Flat", value=DDFeature.Flat.class),
-	@Type(name="SpellLevel", value=DDFeature.PerSpellLevel.class)
+	@Type(name="Simple", value=DDProperty.Simple.class),
+	@Type(name="Flat", value=DDProperty.Flat.class),
+	@Type(name="SpellLevel", value=DDProperty.PerSpellLevel.class)
 })
-public interface DDFeature {
+public interface DDProperty {
 	public enum Group {
 		NONE
 	}
@@ -21,14 +21,14 @@ public interface DDFeature {
 	<T> T value();
 	
 	@AllArgsConstructor
-	public class Simple implements DDFeature {
+	public class Simple implements DDProperty {
 		String name;
 		@Override public boolean appliesTo(String key) { return false; }
 		@Override public <T> T value() { return null; }
 	}
 
 	@AllArgsConstructor
-	public static class Flat implements DDFeature {
+	public static class Flat implements DDProperty {
 		String applies;
 		Group group;
 		int value;
@@ -46,7 +46,7 @@ public interface DDFeature {
 	}
 	
 	@AllArgsConstructor
-	public static class PerSpellLevel implements DDFeature {
+	public static class PerSpellLevel implements DDProperty {
 		String applies;
 		Group group;
 		int value;