|
|
@@ -144,10 +144,10 @@ class UpdateClassWithLevelPanel extends JPanel {
|
|
|
if (sb.preparesSpells()) {
|
|
|
learnAndPrepareListener = new ObservableListener<>(this, (c, v) -> {
|
|
|
if (v.get(LEARN_SPELL_INDEX)) {
|
|
|
- c.createPrepareLearnedSpellPanel(learnSpells.get());
|
|
|
+ if (!prepSpells.isPresent()) c.createPrepareLearnedSpellPanel(learnSpells.get());
|
|
|
} else {
|
|
|
- c.tabbedPane.remove(prepSpells.get());
|
|
|
- c.prepSpells = null;
|
|
|
+ prepSpells.ifPresent(c.tabbedPane::remove);
|
|
|
+ c.prepSpells = Optional.empty();
|
|
|
}
|
|
|
});
|
|
|
learnAndPrepareListener.setObserved(readyCount);
|
|
|
@@ -185,11 +185,32 @@ class UpdateClassWithLevelPanel extends JPanel {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ private void commitSpellbook(DDSpellbook book) {
|
|
|
+ learnSpells.ifPresent(pan -> {
|
|
|
+ final List<SelectSpellsPanel> selections = pan.getPanels();
|
|
|
+ for (int i = 0; i < selections.size(); ++i) {
|
|
|
+ if (selections.get(i) == null) continue;
|
|
|
+ List<DDSpell> known = new ArrayList<>(book.spellsKnownAtLevel(i));
|
|
|
+ known.addAll(selections.get(i).getPrepared());
|
|
|
+ book.learnSpells(i, known);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ prepSpells.ifPresent(pan -> {
|
|
|
+ final List<SelectSpellsPanel> selections = pan.getPanels();
|
|
|
+ for (int i = 0; i < selections.size(); ++i) {
|
|
|
+ if (selections.get(i) == null) continue;
|
|
|
+ List<DDSpell> known = new ArrayList<>(book.spellsPreparedAtLevel(i));
|
|
|
+ known.addAll(selections.get(i).getPrepared());
|
|
|
+ book.prepareSpells(i, known);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
public void commitAllChanges() {
|
|
|
final String className = levelUpInfo.ddClass.getName();
|
|
|
skills.commitAllChanges();
|
|
|
- learnSpells.ifPresent(pan -> {});
|
|
|
- prepSpells.ifPresent(pan -> {});
|
|
|
+ Optional<DDSpellbook> maybeBook = levelUpInfo.ddClass.getSpellBook();
|
|
|
+ maybeBook.ifPresent(this::commitSpellbook);
|
|
|
final Set<DDCharacterClass> classes = levelUpInfo.ddCharacter.getClasses();
|
|
|
if (classes.stream().map(DDCharacterClass::getName).anyMatch(className::equals)) {
|
|
|
// Update class to new data
|