Parcourir la source

Add propagation of changes in DomainFeature.

Sam Jaffe il y a 8 ans
Parent
commit
33813af4b7

+ 1 - 1
resources/classes/Cleric.json

@@ -15,7 +15,7 @@
         "@c":".impl.DomainFeature$Chooser",
         "name":"Domain",
         "times":2,
-        "choices":["Earth","Plant"]
+        "choices":["Animal","Earth","Plant"]
       }
     ]
   ],

+ 18 - 0
resources/spells/domain/animal.json

@@ -0,0 +1,18 @@
+{
+  "name":"Domain::Animal",
+  "powers":[
+    {"@c":".impl.Simple","name":"Cast Speak with Animals 1/day"},
+    {"@c":".impl.Simple","name":"Knowledge (nature)"}
+  ],
+  "spells":[
+    "Calm Animals",
+    "Hold Animal",
+    "Dominate Animal",
+    "Sumon Nature's Ally IV",
+    "Commune with Nature",
+    "Antilife Shell",
+    "Animal Shapes",
+    "Summon Nature's Ally VIII",
+    "Shapechange"
+  ]
+}

+ 4 - 1
src/main/lombok/org/leumasjaffe/charsheet/model/features/impl/DomainFeature.java

@@ -8,6 +8,7 @@ import org.leumasjaffe.charsheet.model.features.DDPropertyChooser;
 import org.leumasjaffe.charsheet.model.features.GroupedBonus;
 import org.leumasjaffe.charsheet.model.magic.impl.Domain;
 import org.leumasjaffe.collections.Tree;
+import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -31,7 +32,9 @@ public class DomainFeature implements DDProperty {
 			return new DomainFeature(impl.getName() + " " + getChoice(idx), impl.getDescription());
 		}
 		@Override public boolean applySideEffects(DDCharacterClass to, int idx) {
-			return getDomain(to).addDomain(getChoice(idx));
+			boolean val = getDomain(to).addDomain(getChoice(idx));
+			ObserverDispatch.notifySubscribers(getDomain(to));
+			return val;
 		}
 		@Override public void undoSideEffects(DDCharacterClass to, int idx) {
 			getDomain(to).removeDomain(getChoice(idx));

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/model/magic/impl/Domain.java

@@ -102,6 +102,6 @@ public class Domain extends Prepared implements DDSpellbook.Secondary {
 	}
 
 	public void removeDomain(String forSelection) {
-		this.domains.remove(SpellBookImpl.create(forSelection));
+		this.domains.removeIf(s -> s.getImplName().equals(forSelection));
 	}
 }

+ 4 - 4
src/main/lombok/org/leumasjaffe/charsheet/view/magic/SelectSpellsPanel.java

@@ -16,7 +16,7 @@ import org.leumasjaffe.charsheet.model.observable.BoolGate;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.event.SelectTableRowPopupMenuListener;
 import org.leumasjaffe.format.StringHelper;
-import org.leumasjaffe.observer.ObservableListener;
+import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.AccessLevel;
@@ -86,7 +86,7 @@ public class SelectSpellsPanel extends JPanel {
 	BoolGate.Handle gate;
 	JTable tablePrepared, tableKnown;
 	
-	ObservableListener<JTable, SpellPicker> listener;
+	IndirectObservableListener<JTable, SpellPicker> listener;
 	
 	public SelectSpellsPanel(SpellPicker pick, BoolGate.Handle gate, int level, 
 			Collection<DDSpell> prepared, IntValue sharedValue) {
@@ -191,12 +191,12 @@ public class SelectSpellsPanel extends JPanel {
 		
 		button_1.addActionListener(e -> insertSpell());
 		
-		listener = new ObservableListener<>(tableKnown, (c, v) -> {
+		listener = new IndirectObservableListener<>(tableKnown, (c, v) -> {
 			known.clear();
 			known.addAll(v.getAvailableSpells(level));
 			this.modelKnown.data = createModel(known);
 		});
-		listener.setObserved(pick);
+		listener.setObserved(pick, pick, pick.getInfo().spellBook);
 	}
 	
 	private void removeSpell() {