Ver código fonte

Add DDCharacter to the application info for DDPropertyChooser

Sam Jaffe 8 anos atrás
pai
commit
22eb877ab4

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

@@ -3,6 +3,7 @@ package org.leumasjaffe.charsheet.model.features;
 import java.util.Collections;
 import java.util.List;
 
+import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.DDCharacterClass;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
@@ -19,25 +20,26 @@ public interface DDPropertyChooser {
 	String getHeader();
 	default List<String> getChoices() { return Collections.emptyList(); }
 	public DDProperty get(int selectedIndex);
-	default boolean applySideEffects(DDCharacterClass to, int selectedIndex) {
-		to.addFeature(get(selectedIndex));
+	default boolean applySideEffects(DDCharacter to, DDCharacterClass toClass, int selectedIndex) {
+		toClass.addFeature(get(selectedIndex));
 		return true;
 	}
-	default void undoSideEffects(DDCharacterClass to, int selectedIndex) {
-		to.removeFeature(get(selectedIndex));
+	default void undoSideEffects(DDCharacter to, DDCharacterClass toClass, int selectedIndex) {
+		toClass.removeFeature(get(selectedIndex));
 	}
 	
 	@RequiredArgsConstructor
 	@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 	public static class State {
-		DDCharacterClass ddCharacter;
+		DDCharacter ddCharacter;
+		DDCharacterClass ddCharacterClass;
 		DDPropertyChooser chooser;
 		@NonFinal boolean hasApplied = false;
 		@NonFinal int previousIndex = -1;
 		
 		public void apply(int selectedIndex) {
-			if (hasApplied) { chooser.undoSideEffects(ddCharacter, previousIndex); }
-			hasApplied = chooser.applySideEffects(ddCharacter, previousIndex = selectedIndex);
+			if (hasApplied) { chooser.undoSideEffects(ddCharacter, ddCharacterClass, previousIndex); }
+			hasApplied = chooser.applySideEffects(ddCharacter, ddCharacterClass, previousIndex = selectedIndex);
 		}		
 	}
 }

+ 6 - 5
src/main/lombok/org/leumasjaffe/charsheet/model/features/impl/DomainFeature.java

@@ -2,6 +2,7 @@ package org.leumasjaffe.charsheet.model.features.impl;
 
 import java.util.List;
 
+import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.DDCharacterClass;
 import org.leumasjaffe.charsheet.model.features.DDProperty;
 import org.leumasjaffe.charsheet.model.features.DDPropertyChooser;
@@ -32,13 +33,13 @@ public class DomainFeature implements DDProperty {
 		@Override public DDProperty get(int idx) {
 			return new DomainFeature(impl.getName() + " " + getChoice(idx), impl.getDescription());
 		}
-		@Override public boolean applySideEffects(DDCharacterClass to, int idx) {
-			boolean val = getDomain(to).addDomain(getChoice(idx));
-			ObserverDispatch.notifySubscribers(getDomain(to));
+		@Override public boolean applySideEffects(DDCharacter to, DDCharacterClass toClass, int idx) {
+			boolean val = getDomain(toClass).addDomain(getChoice(idx));
+			ObserverDispatch.notifySubscribers(getDomain(toClass));
 			return val;
 		}
-		@Override public void undoSideEffects(DDCharacterClass to, int idx) {
-			getDomain(to).removeDomain(getChoice(idx));
+		@Override public void undoSideEffects(DDCharacter to, DDCharacterClass toClass, int idx) {
+			getDomain(toClass).removeDomain(getChoice(idx));
 		}
 		
 		private Domain getDomain(DDCharacterClass to) {

+ 18 - 0
src/main/lombok/org/leumasjaffe/charsheet/model/features/impl/Skill.java

@@ -1,10 +1,13 @@
 package org.leumasjaffe.charsheet.model.features.impl;
 
 import org.leumasjaffe.charsheet.config.Constants;
+import org.leumasjaffe.charsheet.model.DDCharacter;
+import org.leumasjaffe.charsheet.model.DDCharacterClass;
 import org.leumasjaffe.charsheet.model.features.DDProperty;
 import org.leumasjaffe.charsheet.model.features.DDPropertyChooser;
 import org.leumasjaffe.charsheet.model.features.GroupedBonus;
 import org.leumasjaffe.collections.Tree;
+import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -33,4 +36,19 @@ public class Skill implements DDProperty, DDPropertyChooser {
 	public DDProperty get(int selectedIndex) {
 		return new Skill(name);
 	}
+	
+	@Override
+	public boolean applySideEffects(DDCharacter to, DDCharacterClass toClass, int selectedIndex) {
+		toClass.addFeature(get(selectedIndex));
+		ObserverDispatch.notifySubscribers(to.getSkills());
+		to.getSkills().getSkill(getName()).ifPresent(ObserverDispatch::notifySubscribers);
+		return true;
+	}
+	
+	@Override
+	public void undoSideEffects(DDCharacter to, DDCharacterClass toClass, int selectedIndex) {
+		toClass.removeFeature(get(selectedIndex));
+		ObserverDispatch.notifySubscribers(to.getSkills());
+		to.getSkills().getSkill(getName()).ifPresent(ObserverDispatch::notifySubscribers);
+	}
 }

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/view/level/LU_FeaturesPanel.java

@@ -81,7 +81,7 @@ class LU_FeaturesPanel extends JPanel {
 		panel_1.add(features, gbc_features);
 		info.ddClass.getProto().getFeatures(info.toLevel).forEach(prop -> {
 			for (int i = 0; i < prop.getTimes(); ++i) {
-				features.add(new PropertyChoicePanel(info.ddClass, prop, i));
+				features.add(new PropertyChoicePanel(info.ddCharacter, info.ddClass, prop, i));
 			}
 		});
 		

+ 3 - 2
src/main/lombok/org/leumasjaffe/charsheet/view/level/PropertyChoicePanel.java

@@ -2,6 +2,7 @@ package org.leumasjaffe.charsheet.view.level;
 
 import javax.swing.JPanel;
 
+import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.DDCharacterClass;
 import org.leumasjaffe.charsheet.model.features.DDPropertyChooser;
 import java.awt.GridBagLayout;
@@ -14,7 +15,7 @@ import java.awt.event.ItemEvent;
 @SuppressWarnings("serial")
 public class PropertyChoicePanel extends JPanel {
 
-	public PropertyChoicePanel(DDCharacterClass dchara, DDPropertyChooser prop, int idx) {
+	public PropertyChoicePanel(DDCharacter chara, DDCharacterClass dchara, DDPropertyChooser prop, int idx) {
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0, 0};
 		gridBagLayout.rowHeights = new int[]{0, 0};
@@ -31,7 +32,7 @@ public class PropertyChoicePanel extends JPanel {
 		add(lblName, gbc_lblName);
 		
 		if (!prop.getChoices().isEmpty()) {
-			DDPropertyChooser.State state = new DDPropertyChooser.State(dchara, prop);
+			DDPropertyChooser.State state = new DDPropertyChooser.State(chara, dchara, prop);
 
 			JComboBox<String> comboBox = new JComboBox<>(prop.getChoices().toArray(new String[0]));
 			GridBagConstraints gbc_comboBox = new GridBagConstraints();