|
|
@@ -0,0 +1,60 @@
|
|
|
+package org.leumasjaffe.charsheet.model.magic.impl;
|
|
|
+
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import org.leumasjaffe.charsheet.model.DDClass;
|
|
|
+import org.leumasjaffe.charsheet.model.magic.DDSpell;
|
|
|
+import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
|
|
|
+
|
|
|
+import lombok.AccessLevel;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.NonNull;
|
|
|
+import lombok.experimental.FieldDefaults;
|
|
|
+import lombok.experimental.NonFinal;
|
|
|
+
|
|
|
+@AllArgsConstructor
|
|
|
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
+public class Inspired implements DDSpellbook {
|
|
|
+ @AllArgsConstructor
|
|
|
+ @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
+ private static class Level {
|
|
|
+ @NonNull List<DDSpell> spellsPrepared;
|
|
|
+ @NonFinal int spellsPerDay;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class ClassReference {
|
|
|
+ DDClass ref;
|
|
|
+ @SuppressWarnings("unused")
|
|
|
+ public ClassReference(String name) {
|
|
|
+ this.ref = DDClass.getFromResource(name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @NonNull Map<Integer, Inspired.Level> spellInfo;
|
|
|
+ @NonNull ClassReference classRef;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int numSpellsPerDayAtLevel( int level ) {
|
|
|
+ return spellInfo.get( level ).spellsPerDay;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Collection<DDSpell> spellsKnownAtLevel(int level) {
|
|
|
+ return classRef.ref.getSpellList( level );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DDSpell> spellsPreparedAtLevel(int level) {
|
|
|
+ return spellInfo.get( level ).spellsPrepared;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void castSpell(int level, DDSpell spell) {
|
|
|
+ if ( ! spellInfo.get( level ).spellsPrepared.remove( spell ) ) {
|
|
|
+ throw new IllegalStateException("Attempting to cast an unprepared spell");
|
|
|
+ }
|
|
|
+ --spellInfo.get( level ).spellsPerDay;
|
|
|
+ }
|
|
|
+}
|