Преглед изворни кода

Moving the calculations for highestSpellLevel known into DDCharacterClass.
Removing the concept of the renew function, because it was bad. Instead, spontaneous casters and others would just pass in null, generating a list.

Sam Jaffe пре 8 година
родитељ
комит
5d8ecc5427

+ 8 - 0
src/org/leumasjaffe/charsheet/model/DDCharacterClass.java

@@ -1,5 +1,6 @@
 package org.leumasjaffe.charsheet.model;
 package org.leumasjaffe.charsheet.model;
 
 
+import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
 
 
 import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
 import org.leumasjaffe.charsheet.model.magic.DDSpellbook;
@@ -76,4 +77,11 @@ public class DDCharacterClass {
 	public DDClass getProto() {
 	public DDClass getProto() {
 		return name.base;
 		return name.base;
 	}
 	}
+	
+	public int getHighestSpellLevel() {
+		// TODO: Bonus levels to spellsKnown/spellsPerDay?
+		final List<Integer> list = getProto().getSpells().get().getPerDay().get(getLevel()-1);
+		final int level = list.size() - 1;
+		return list.get(level) == 0 ? level : level + 1;
+	}
 }
 }

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

@@ -36,5 +36,5 @@ public interface DDSpellbook {
 	
 	
 	void castSpell( int level, final DDSpell spell );
 	void castSpell( int level, final DDSpell spell );
 	
 	
-	void renew();
+	void prepareSpells(int level, List<DDSpell> spells);
 }
 }

+ 0 - 3
src/org/leumasjaffe/charsheet/model/magic/impl/Prepared.java

@@ -14,7 +14,4 @@ public interface Prepared extends DDSpellbook {
 	@NonNull List<DDSpell> getSpellsPreparedPreviouslyForLevel(int level);
 	@NonNull List<DDSpell> getSpellsPreparedPreviouslyForLevel(int level);
 	
 	
 	void prepareSpells(int level, List<DDSpell> spells);
 	void prepareSpells(int level, List<DDSpell> spells);
-	
-	@Override
-	default void renew() { throw new UnsupportedOperationException(); }
 }
 }

+ 6 - 0
src/org/leumasjaffe/charsheet/model/magic/impl/Spontaneous.java

@@ -61,4 +61,10 @@ public class Spontaneous implements DDSpellbook {
 	private Level get(int level) {
 	private Level get(int level) {
 		return spellInfo.getOrDefault(level, new Level(Collections.emptyList(), 0, 0));
 		return spellInfo.getOrDefault(level, new Level(Collections.emptyList(), 0, 0));
 	}
 	}
+
+	@Override
+	public void prepareSpells(int level, List<DDSpell> spells) {
+		final Level lInfo = get(level);
+		lInfo.spellsPerDayRemaining = lInfo.spellsPerDay;
+	}
 }
 }

+ 4 - 2
src/org/leumasjaffe/charsheet/view/D20Sheet.java

@@ -124,9 +124,11 @@ public class D20Sheet extends JFrame {
 			for (DDCharacterClass dclass : model.getClasses()) {
 			for (DDCharacterClass dclass : model.getClasses()) {
 				dclass.getSpellBook().ifPresent(sb -> {
 				dclass.getSpellBook().ifPresent(sb -> {
 					if (sb.preparesSpells()) {
 					if (sb.preparesSpells()) {
-						
+						// TODO: dialogue
 					} else {
 					} else {
-						sb.renew();
+						for (int i = 0; i < dclass.getHighestSpellLevel(); ++i) {
+							sb.prepareSpells(i, null);
+						}
 					}
 					}
 				});
 				});
 			}
 			}

+ 1 - 11
src/org/leumasjaffe/charsheet/view/magic/SpellPanel.java

@@ -4,7 +4,6 @@ import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JScrollPane;
 
 
 import java.awt.GridBagLayout;
 import java.awt.GridBagLayout;
-import java.util.List;
 import java.util.function.Function;
 import java.util.function.Function;
 
 
 import javax.swing.JTabbedPane;
 import javax.swing.JTabbedPane;
@@ -30,11 +29,9 @@ public class SpellPanel extends JPanel {
 	private static final long serialVersionUID = 1L;
 	private static final long serialVersionUID = 1L;
 	DDCharacterClass dclass;
 	DDCharacterClass dclass;
 	VoidVoidFunction _reload;
 	VoidVoidFunction _reload;
-	int highestSpellLevel;
 
 
 	public SpellPanel(DDCharacter chara, final DDCharacterClass cclass) {
 	public SpellPanel(DDCharacter chara, final DDCharacterClass cclass) {
 		dclass = cclass;
 		dclass = cclass;
-		highestSpellLevel = calcHighestSpellLevel(cclass);
 		final DDSpellbook model = cclass.getSpellBook().get();
 		final DDSpellbook model = cclass.getSpellBook().get();
 		
 		
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		GridBagLayout gridBagLayout = new GridBagLayout();
@@ -71,18 +68,11 @@ public class SpellPanel extends JPanel {
 		_reload.apply();
 		_reload.apply();
 	}
 	}
 
 
-	private static int calcHighestSpellLevel(final DDCharacterClass cclass) {
-		// TODO: Bonus levels to spellsKnown/spellsPerDay?
-		final List<Integer> list = cclass.getProto().getSpells().get().getPerDay().get(cclass.getLevel()-1);
-		final int level = list.size() - 1;
-		return list.get(level) == 0 ? level : level + 1;
-	}
-
 	private void generateSpellTree(final Function<Integer, JPanel> getPanel, final JScrollPane preparedPane) {
 	private void generateSpellTree(final Function<Integer, JPanel> getPanel, final JScrollPane preparedPane) {
 		JPanel root = new JPanel();
 		JPanel root = new JPanel();
 		root.setLayout(new VerticalLayout());
 		root.setLayout(new VerticalLayout());
 		
 		
-		for (int i = 0; i < highestSpellLevel; ++i) {
+		for (int i = 0; i < dclass.getHighestSpellLevel(); ++i) {
 			if (dclass.getSpellBook().get().numSpellsKnownAtLevel(i) == 0) continue;
 			if (dclass.getSpellBook().get().numSpellsKnownAtLevel(i) == 0) continue;
 			root.add(getPanel.apply(i));
 			root.add(getPanel.apply(i));
 		}
 		}