|
@@ -7,6 +7,7 @@ import javax.swing.SwingConstants;
|
|
|
import javax.swing.border.MatteBorder;
|
|
import javax.swing.border.MatteBorder;
|
|
|
|
|
|
|
|
import org.jdesktop.swingx.VerticalLayout;
|
|
import org.jdesktop.swingx.VerticalLayout;
|
|
|
|
|
+import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
|
|
|
import org.leumasjaffe.charsheet.model.DDCharacter;
|
|
import org.leumasjaffe.charsheet.model.DDCharacter;
|
|
|
import org.leumasjaffe.charsheet.model.equip.DDInventory;
|
|
import org.leumasjaffe.charsheet.model.equip.DDInventory;
|
|
|
import org.leumasjaffe.charsheet.model.equip.DDItem;
|
|
import org.leumasjaffe.charsheet.model.equip.DDItem;
|
|
@@ -16,12 +17,11 @@ import lombok.AccessLevel;
|
|
|
import lombok.experimental.FieldDefaults;
|
|
import lombok.experimental.FieldDefaults;
|
|
|
|
|
|
|
|
import java.awt.Color;
|
|
import java.awt.Color;
|
|
|
-import java.awt.Component;
|
|
|
|
|
import java.awt.Font;
|
|
import java.awt.Font;
|
|
|
import java.awt.GridBagConstraints;
|
|
import java.awt.GridBagConstraints;
|
|
|
import java.awt.GridBagLayout;
|
|
import java.awt.GridBagLayout;
|
|
|
import java.awt.Insets;
|
|
import java.awt.Insets;
|
|
|
-import java.util.function.Consumer;
|
|
|
|
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
public class EquipmentPanel extends JPanel {
|
|
public class EquipmentPanel extends JPanel {
|
|
@@ -70,30 +70,35 @@ public class EquipmentPanel extends JPanel {
|
|
|
|
|
|
|
|
final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
|
|
final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
|
|
|
if ( armor != null ) {
|
|
if ( armor != null ) {
|
|
|
- equipment.add(new ArmorPanel(armor, makeUnequipAction(inv, EquipmentSlot.BODY)));
|
|
|
|
|
|
|
+ createWithRightClickMenu(ArmorPanel::new, inv, EquipmentSlot.BODY);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
final DDItem main = inv.getEquipment().get(EquipmentSlot.MAIN_HAND);
|
|
final DDItem main = inv.getEquipment().get(EquipmentSlot.MAIN_HAND);
|
|
|
final DDItem off = inv.getEquipment().get(EquipmentSlot.OFF_HAND);
|
|
final DDItem off = inv.getEquipment().get(EquipmentSlot.OFF_HAND);
|
|
|
if ( off != null && off.isArmor() ) {
|
|
if ( off != null && off.isArmor() ) {
|
|
|
- equipment.add(new ShieldPanel(off, makeUnequipAction(inv, EquipmentSlot.MAIN_HAND)));
|
|
|
|
|
|
|
+ createWithRightClickMenu(ShieldPanel::new, inv, EquipmentSlot.OFF_HAND);
|
|
|
}
|
|
}
|
|
|
if ( main != null ) {
|
|
if ( main != null ) {
|
|
|
- equipment.add(new WeaponPanel(main, makeUnequipAction(inv, EquipmentSlot.OFF_HAND)));
|
|
|
|
|
|
|
+ createWithRightClickMenu(WeaponPanel::new, inv, EquipmentSlot.MAIN_HAND);
|
|
|
}
|
|
}
|
|
|
if ( off != null && ( off != main || couldDualWieldThis(off) ) ) {
|
|
if ( off != null && ( off != main || couldDualWieldThis(off) ) ) {
|
|
|
- equipment.add(new WeaponPanel(off, makeUnequipAction(inv, EquipmentSlot.OFF_HAND)));
|
|
|
|
|
|
|
+ createWithRightClickMenu(WeaponPanel::new, inv, EquipmentSlot.OFF_HAND);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private boolean couldDualWieldThis(final DDItem item) {
|
|
private boolean couldDualWieldThis(final DDItem item) {
|
|
|
return item.getSlot() == EquipmentSlot.ONE_HAND && item.getCount().value() > 1;
|
|
return item.getSlot() == EquipmentSlot.ONE_HAND && item.getCount().value() > 1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- private Consumer<Component> makeUnequipAction(final DDInventory inv, final EquipmentSlot slot) {
|
|
|
|
|
- return (comp) -> {
|
|
|
|
|
- comp.getParent().remove(comp);
|
|
|
|
|
- inv.unequip(slot);
|
|
|
|
|
- };
|
|
|
|
|
|
|
+
|
|
|
|
|
+ private void createWithRightClickMenu(final Function<DDItem, JPanel> make,
|
|
|
|
|
+ final DDInventory inv, final EquipmentSlot slot) {
|
|
|
|
|
+ final DDItem item = inv.getEquipment().get(slot);
|
|
|
|
|
+ final JPanel panel = make.apply(item);
|
|
|
|
|
+ equipment.add(panel);
|
|
|
|
|
+ panel.addMouseListener(new PopClickListener(
|
|
|
|
|
+ new EquipmentInfoMenu(item, () -> {
|
|
|
|
|
+ equipment.remove(panel);
|
|
|
|
|
+ inv.unequip(slot);
|
|
|
|
|
+ })));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|