|
|
@@ -6,28 +6,39 @@ import javax.swing.JLabel;
|
|
|
import java.awt.GridBagConstraints;
|
|
|
import java.awt.Color;
|
|
|
import javax.swing.border.LineBorder;
|
|
|
+
|
|
|
+import org.leumasjaffe.charsheet.model.AbilityScores;
|
|
|
+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.charsheet.util.StringHelper;
|
|
|
+import org.leumasjaffe.observer.IndirectObservableListener;
|
|
|
+import org.leumasjaffe.observer.ObservableListener;
|
|
|
+
|
|
|
+import lombok.AccessLevel;
|
|
|
+import lombok.experimental.FieldDefaults;
|
|
|
+
|
|
|
import java.awt.Font;
|
|
|
import javax.swing.SwingConstants;
|
|
|
import java.awt.Dimension;
|
|
|
import javax.swing.JTextField;
|
|
|
import java.awt.Insets;
|
|
|
|
|
|
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
public class ArmorLine extends JPanel {
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
- private JTextField total;
|
|
|
- private JTextField deflection;
|
|
|
- private JTextField armor;
|
|
|
- private JTextField shield;
|
|
|
- private JTextField dexterity;
|
|
|
- private JTextField size;
|
|
|
- private JTextField natural;
|
|
|
- private JTextField misc;
|
|
|
- private JTextField touch;
|
|
|
- private JTextField flatFoot;
|
|
|
|
|
|
+ IndirectObservableListener<JTextField, DDCharacter> armorTotalObserver;
|
|
|
+ ObservableListener<JTextField, DDInventory> armorArmorObserver;
|
|
|
+ ObservableListener<JTextField, DDInventory> armorShieldObserver;
|
|
|
+ IndirectObservableListener<JTextField, DDCharacter> armorDexObserver;
|
|
|
+ private JTextField size;
|
|
|
+
|
|
|
public ArmorLine() {
|
|
|
setMinimumSize(new Dimension(400, 46));
|
|
|
setMaximumSize(new Dimension(400, 46));
|
|
|
@@ -73,7 +84,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_lblAc.gridy = 0;
|
|
|
panel.add(lblAc, gbc_lblAc);
|
|
|
|
|
|
- total = new JTextField();
|
|
|
+ JTextField total = new JTextField();
|
|
|
total.setToolTipText("Total AC");
|
|
|
total.setPreferredSize(new Dimension(30, 20));
|
|
|
total.setMinimumSize(new Dimension(30, 20));
|
|
|
@@ -105,7 +116,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_7.gridy = 0;
|
|
|
panel.add(label_7, gbc_label_7);
|
|
|
|
|
|
- armor = new JTextField();
|
|
|
+ JTextField armor = new JTextField();
|
|
|
armor.setToolTipText("Armor Bonus");
|
|
|
armor.setPreferredSize(new Dimension(25, 20));
|
|
|
armor.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -129,7 +140,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_1.gridy = 0;
|
|
|
panel.add(label_1, gbc_label_1);
|
|
|
|
|
|
- shield = new JTextField();
|
|
|
+ JTextField shield = new JTextField();
|
|
|
shield.setToolTipText("Shield Bonus");
|
|
|
shield.setPreferredSize(new Dimension(25, 20));
|
|
|
shield.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -153,7 +164,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_2.gridy = 0;
|
|
|
panel.add(label_2, gbc_label_2);
|
|
|
|
|
|
- dexterity = new JTextField();
|
|
|
+ JTextField dexterity = new JTextField();
|
|
|
dexterity.setToolTipText("Dexterity Modifier");
|
|
|
dexterity.setPreferredSize(new Dimension(25, 20));
|
|
|
dexterity.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -201,7 +212,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_4.gridy = 0;
|
|
|
panel.add(label_4, gbc_label_4);
|
|
|
|
|
|
- natural = new JTextField();
|
|
|
+ JTextField natural = new JTextField();
|
|
|
natural.setToolTipText("Natural Armor");
|
|
|
natural.setPreferredSize(new Dimension(25, 20));
|
|
|
natural.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -225,7 +236,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_5.gridy = 0;
|
|
|
panel.add(label_5, gbc_label_5);
|
|
|
|
|
|
- deflection = new JTextField();
|
|
|
+ JTextField deflection = new JTextField();
|
|
|
deflection.setToolTipText("Deflection Modifier");
|
|
|
deflection.setPreferredSize(new Dimension(25, 20));
|
|
|
deflection.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -249,7 +260,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_label_6.gridy = 0;
|
|
|
panel.add(label_6, gbc_label_6);
|
|
|
|
|
|
- misc = new JTextField();
|
|
|
+ JTextField misc = new JTextField();
|
|
|
misc.setToolTipText("Miscellaneous Modifier");
|
|
|
misc.setPreferredSize(new Dimension(25, 20));
|
|
|
misc.setMinimumSize(new Dimension(25, 20));
|
|
|
@@ -296,7 +307,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_lblTouch.gridy = 0;
|
|
|
panel_1.add(lblTouch, gbc_lblTouch);
|
|
|
|
|
|
- touch = new JTextField();
|
|
|
+ JTextField touch = new JTextField();
|
|
|
touch.setToolTipText("Touch AC");
|
|
|
touch.setPreferredSize(new Dimension(30, 20));
|
|
|
touch.setMinimumSize(new Dimension(30, 20));
|
|
|
@@ -330,7 +341,7 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_lblFlatfooted.gridy = 0;
|
|
|
panel_1.add(lblFlatfooted, gbc_lblFlatfooted);
|
|
|
|
|
|
- flatFoot = new JTextField();
|
|
|
+ JTextField flatFoot = new JTextField();
|
|
|
flatFoot.setToolTipText("Flat-Footed AC");
|
|
|
flatFoot.setPreferredSize(new Dimension(30, 20));
|
|
|
flatFoot.setMinimumSize(new Dimension(30, 20));
|
|
|
@@ -344,6 +355,71 @@ public class ArmorLine extends JPanel {
|
|
|
gbc_flatFoot.gridx = 3;
|
|
|
gbc_flatFoot.gridy = 0;
|
|
|
panel_1.add(flatFoot, gbc_flatFoot);
|
|
|
+
|
|
|
+ armorTotalObserver = new IndirectObservableListener<>(total, (c, v) -> {
|
|
|
+ final DDInventory inv = v.getInventory();
|
|
|
+ int iarmor = 0;
|
|
|
+ int ishield = 0;
|
|
|
+ int dex = AbilityScores.modifier(v.getAbilities().getBase().getDex().value());
|
|
|
+ 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().getBonus();
|
|
|
+ dex = Math.min(dex, body.getArmor().getMaxDex());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ {
|
|
|
+ final DDItem offHand = inv.getEquipment().get(EquipmentSlot.OFF_HAND);
|
|
|
+ if ( offHand != null && offHand.isArmor() ) {
|
|
|
+ ishield = offHand.getArmor().getBonus();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ c.setText(StringHelper.toString(10 + iarmor + ishield +
|
|
|
+ dex + isize + inatural + ideflect + imisc));
|
|
|
+ });
|
|
|
+
|
|
|
+ armorArmorObserver = new ObservableListener<>(armor, (c, v) -> {
|
|
|
+ int iarmor = 0;
|
|
|
+ final DDItem body = v.getEquipment().get(EquipmentSlot.BODY);
|
|
|
+ if ( body != null && body.isArmor() ) {
|
|
|
+ iarmor = body.getArmor().getBonus();
|
|
|
+ }
|
|
|
+ c.setText(StringHelper.toString(iarmor));
|
|
|
+ });
|
|
|
+
|
|
|
+ armorShieldObserver = new ObservableListener<>(shield, (c, v) -> {
|
|
|
+ int iarmor = 0;
|
|
|
+ final DDItem offHand = v.getEquipment().get(EquipmentSlot.OFF_HAND);
|
|
|
+ if ( offHand != null && offHand.isArmor() ) {
|
|
|
+ iarmor = offHand.getArmor().getBonus();
|
|
|
+ }
|
|
|
+ c.setText(StringHelper.toString(iarmor));
|
|
|
+ });
|
|
|
+
|
|
|
+ armorDexObserver = new IndirectObservableListener<>(dexterity, (c, v) -> {
|
|
|
+ final DDInventory inv = v.getInventory();
|
|
|
+ int dex = AbilityScores.modifier(v.getAbilities().getBase().getDex().value());
|
|
|
+ {
|
|
|
+ final DDItem body = inv.getEquipment().get(EquipmentSlot.BODY);
|
|
|
+ if ( body != null && body.isArmor() ) {
|
|
|
+ dex = Math.min(dex, body.getArmor().getMaxDex());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ c.setText(StringHelper.toString(dex));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setModel(final DDCharacter model) {
|
|
|
+ final DDInventory inv = model.getInventory();
|
|
|
+ final IntValue dex = model.getAbilities().getBase().getDex();
|
|
|
+ armorTotalObserver.setObserved(model, inv, dex);
|
|
|
+ armorArmorObserver.setObserved(inv);
|
|
|
+ armorShieldObserver.setObserved(inv);
|
|
|
+ armorDexObserver.setObserved(model, inv, dex);
|
|
|
}
|
|
|
|
|
|
}
|