Ver código fonte

Making fetching of weapon/armor more functional

Sam Jaffe 8 anos atrás
pai
commit
8e18bc5bbd

+ 7 - 31
src/main/lombok/org/leumasjaffe/charsheet/model/inventory/DDItem.java

@@ -1,15 +1,10 @@
 package org.leumasjaffe.charsheet.model.inventory;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Optional;
 
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.model.observable.StringValue;
 
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -27,30 +22,17 @@ public class DDItem {
 	Money value = new Money(0, 0, 0, 0);
 	StringValue page = new StringValue();
 	EquipmentSlot slot = EquipmentSlot.NONE;
-	DDWeapon weapon = null;
-	DDArmor armor = null;
-	Map<String, Object> properties = new HashMap<>();
-	
-	public boolean isWeapon() { return weapon != null; }
-	public boolean isArmor() { return armor != null; }
-	
-	@SuppressWarnings("unchecked")
-	public <T> T getProperty(final String key) {
-		return (T) properties.get(key);
-	}
-	
-	@JsonAnySetter 
-	public void setProperty(final String key, final Object prop) {
-		if ( properties == null ) { properties = new HashMap<>(); }
-		properties.put(key, prop);
-	}
+	Optional<DDWeapon> weapon;
+	Optional<DDArmor> armor;
 	
 	public String getFullName() {
-		return (isWeapon() ? weapon.getNameModifier() : isArmor() ? armor.getNameModifier() : "") + getName(); 
+		return weapon.map(DDWeapon::getNameModifier).orElse(
+				armor.map(DDArmor::getNameModifier).orElse("")) + getName();
 	}
 	
 	public Money getActualValue() {
-		return isWeapon() ? value.sum(weapon.getActualValue()) : isArmor() ? value.sum(armor.getActualValue()) : value;
+		return getValue().sum(weapon.map(DDWeapon::getActualValue).orElse(
+				armor.map(DDArmor::getActualValue).orElse(Money.fromCopper(0))));
 	}
 	
 	public void adjustCount(int amt) {
@@ -61,12 +43,6 @@ public class DDItem {
 		this.countEquipped.value(this.countEquipped.value() + amt);
 	}
 	
-	@JsonAnyGetter 
-	private Map<String, Object> getProperties() { 
-		if ( properties == null ) { properties = new HashMap<>(); }
-		return Collections.unmodifiableMap(properties);
-	}
-	
 	public int getUnequippedCount() {
 		return count.value() - countEquipped.value();
 	}

+ 2 - 2
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/ArmorPanel.java

@@ -26,7 +26,7 @@ public class ArmorPanel extends JPanel {
 	private static final long serialVersionUID = 1L;
 
 	public ArmorPanel(DDItem item) {
-		final DDArmor armor = item.getArmor();
+		final DDArmor armor = item.getArmor().get();
 		
 		setPreferredSize(new Dimension(280, 70));
 		GridBagLayout gridBagLayout = new GridBagLayout();
@@ -131,7 +131,7 @@ public class ArmorPanel extends JPanel {
 		panel.add(armorTypeField, gbc_armorTypeField);
 		armorTypeField.setColumns(10);
 		
-		JTextField armorBonusField = new JTextField(StringHelper.toSignedString(item.getArmor().getActualAcBonus()));
+		JTextField armorBonusField = new JTextField(StringHelper.toSignedString(armor.getActualAcBonus()));
 		armorBonusField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_armorBonusField = new GridBagConstraints();
 		gbc_armorBonusField.insets = new Insets(0, 0, 0, 0);

+ 3 - 3
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java

@@ -87,7 +87,7 @@ public class EquipmentPanel extends JPanel {
 		final Set<EquipmentSlot> manual = EnumSet.noneOf(EquipmentSlot.class);
 		equipment.removeAll();	
 		final DDItem armor = equip.get(BODY);
-		if (armor != null && armor.isArmor()) {
+		if (armor != null && armor.getArmor().isPresent()) {
 			manual.add(BODY);
 			createWithRightClickMenu(ArmorPanel::new, equip, BODY, BODY);
 		}
@@ -124,8 +124,8 @@ public class EquipmentPanel extends JPanel {
 
 	private Optional<Function<DDItem, JPanel>> getEquipmentRightClickPanelFactory(final DDItem item) {
 		if (item == null) { return Optional.empty(); }
-		else if (item.isWeapon()) { return Optional.of(WeaponPanel::new); }
-		else if (item.isArmor()) { return Optional.of(ShieldPanel::new); }
+		else if (item.getWeapon().isPresent()) { return Optional.of(WeaponPanel::new); }
+		else if (item.getArmor().isPresent()) { return Optional.of(ShieldPanel::new); }
 		else { return Optional.empty(); }
 	}
 

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/ShieldPanel.java

@@ -26,7 +26,7 @@ public class ShieldPanel extends JPanel {
 	private static final long serialVersionUID = 1L;
 
 	public ShieldPanel(DDItem item) {
-		final DDArmor armor = item.getArmor();
+		final DDArmor armor = item.getArmor().get();
 		
 		setPreferredSize(new Dimension(280, 70));
 		GridBagLayout gridBagLayout = new GridBagLayout();

+ 2 - 2
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/WeaponPanel.java

@@ -26,7 +26,7 @@ public class WeaponPanel extends JPanel {
 	private static final long serialVersionUID = 1L;
 
 	public WeaponPanel(final DDItem item) {
-		final DDWeapon weapon = item.getWeapon();
+		final DDWeapon weapon = item.getWeapon().get();
 		
 		setPreferredSize(new Dimension(280, 70));
 		GridBagLayout gridBagLayout = new GridBagLayout();
@@ -227,7 +227,7 @@ public class WeaponPanel extends JPanel {
 		panel_1.add(rangeField, gbc_rangeField);
 		rangeField.setColumns(10);
 		
-		JTextField typeField = new JTextField(item.getWeapon().getType().toString());
+		JTextField typeField = new JTextField(weapon.getType().toString());
 		typeField.setHorizontalAlignment(SwingConstants.CENTER);
 		typeField.setColumns(10);
 		GridBagConstraints gbc_typeField = new GridBagConstraints();

+ 23 - 19
src/main/lombok/org/leumasjaffe/charsheet/view/summary/ArmorLine.java

@@ -12,6 +12,7 @@ import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.inventory.DDItem;
 import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
+import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.format.StringHelper;
 import org.leumasjaffe.observer.IndirectObservableListener;
 import org.leumasjaffe.observer.ObservableListener;
@@ -358,55 +359,58 @@ public class ArmorLine extends JPanel {
 		
 		armorTotalObserver = new IndirectObservableListener<>(total, (c, v) -> {
 			final DDInventory inv = v.getInventory();
-			int iarmor = 0;
-			int ishield = 0;
-			int dex = v.getAbilities().getDex().modifier();
+			IntValue iarmor = new IntValue(0);
+			IntValue ishield = new IntValue(0);
+			IntValue dex = new IntValue(v.getAbilities().getDex().modifier());
 			int isize = v.getSize().value().modifier;
 			int inatural = 0;
 			int ideflect = 0;
 			int imisc = 0;
+			
 			{
 				final DDItem body = inv.getEquipment().get(EquipmentSlot.BODY);
-				if ( body != null && body.isArmor() ) {
-					iarmor = body.getArmor().getActualAcBonus();
-					dex = Math.min(dex, body.getArmor().getMaxDex());
+				if ( body != null ) {
+					body.getArmor().ifPresent( a -> {
+						iarmor.value(a.getActualAcBonus());
+						dex.value(Math.min(dex.value(), a.getMaxDex()));
+					});
 				}
 			}
 			{
 				final DDItem offHand = inv.getEquipment().get(EquipmentSlot.OFF_HAND);
-				if ( offHand != null && offHand.isArmor() ) {
-					ishield = offHand.getArmor().getActualAcBonus();
+				if ( offHand != null ) {
+					offHand.getArmor().ifPresent(a -> ishield.value(a.getActualAcBonus()));
 				}
 			}
-			c.setText(StringHelper.toString(10 + iarmor + ishield + 
-					dex + isize + inatural + ideflect + imisc));
+			c.setText(StringHelper.toString(10 + iarmor.value() + ishield.value() + 
+					dex.value() + isize + inatural + ideflect + imisc));
 		});
 		
 		armorArmorObserver = new ObservableListener<>(armor, (c, v) -> {
-			int iarmor = 0;
+			IntValue iarmor = new IntValue(0);
 			final DDItem body = v.getEquipment().get(EquipmentSlot.BODY);
-			if ( body != null && body.isArmor() ) {
-				iarmor = body.getArmor().getActualAcBonus();
+			if ( body != null ) {
+				body.getArmor().ifPresent(a -> iarmor.value(a.getActualAcBonus()));
 			}
 			c.setText(StringHelper.toString(iarmor));
 		});
 		
 		armorShieldObserver = new ObservableListener<>(shield, (c, v) -> {
-			int iarmor = 0;
+			IntValue iarmor = new IntValue(0);
 			final DDItem offHand = v.getEquipment().get(EquipmentSlot.OFF_HAND);
-			if ( offHand != null && offHand.isArmor() ) {
-				iarmor = offHand.getArmor().getActualAcBonus();
+			if ( offHand != null ) {
+				offHand.getArmor().ifPresent(a -> iarmor.value(a.getActualAcBonus()));
 			}
 			c.setText(StringHelper.toString(iarmor));
 		});
 		
 		armorDexObserver = new IndirectObservableListener<>(dexterity, (c, v) -> {
 			final DDInventory inv = v.getInventory();
-			int dex = v.getAbilities().getDex().modifier();
+			IntValue dex = new IntValue(v.getAbilities().getDex().modifier());
 			{
 				final DDItem body = inv.getEquipment().get(EquipmentSlot.BODY);
-				if ( body != null && body.isArmor() ) {
-					dex = Math.min(dex, body.getArmor().getMaxDex());
+				if ( body != null ) {
+					body.getArmor().ifPresent(a -> dex.value(Math.min(dex.value(), a.getMaxDex())));
 				}
 			}
 			c.setText(StringHelper.toString(dex));