浏览代码

Creation of DDEquipment and DDInventory objects.
Adding new JSON content.
Added EquipmentSlot enums ONE_HAND, TWO_HANDS, RING1, RING2
Defined equip/unequip/canEquip on DDEquipment, mapping shortcut enums.
TODO: extra handling around 2H weapons?

Sam Jaffe 9 年之前
父节点
当前提交
22530d1170

+ 15 - 0
resources/Potato.json

@@ -48,5 +48,20 @@
       "wis":-1,
       "cha":-1
     }
+  },
+  
+  "inventory":{
+    "equipment":{
+      
+    },
+    "items":[
+      {
+        "name":"Example",
+        "count":1,
+        "value":{"pp":0,"gp":2,"sp":0,"cp":0},
+        "page":"EX001",
+        "slot":"NONE"
+      }
+    ]
   }
 }

+ 3 - 0
src/org/leumasjaffe/charsheet/model/DDCharacter.java

@@ -5,6 +5,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
+import org.leumasjaffe.charsheet.model.equip.DDInventory;
 import org.leumasjaffe.charsheet.model.observable.ObjectValue;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -44,6 +45,8 @@ public class DDCharacter {
 	@NonNull HitPoints health = new HitPoints();
 	
 	@NonNull AbilityScores abilities = new AbilityScores();
+	
+	@NonNull DDInventory inventory = new DDInventory();
 
 	public String getClassAndLevelString() {
 		final StringBuilder ss = new StringBuilder();

+ 77 - 0
src/org/leumasjaffe/charsheet/model/equip/DDEquipment.java

@@ -0,0 +1,77 @@
+package org.leumasjaffe.charsheet.model.equip;
+
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.experimental.FieldDefaults;
+
+@Data
+@FieldDefaults(level=AccessLevel.PRIVATE)
+public class DDEquipment {
+	Map<EquipmentSlot, DDItem> equipment = new EnumMap<>(EquipmentSlot.class);
+	
+	@JsonValue
+	Map<EquipmentSlot, String> getSerializable() {
+		Map<EquipmentSlot, String> m = new EnumMap<>(EquipmentSlot.class);
+		equipment.entrySet().stream().forEach( e -> m.put(e.getKey(), e.getValue().getName()));
+		return m;
+	}
+	
+	public Map<EquipmentSlot, DDItem> getEquipment() {
+		return Collections.unmodifiableMap(equipment);
+	}
+	
+	public boolean canEquip( final DDItem item ) {
+		return canEquip( item.getSlot() );
+	}
+	
+	private boolean canEquip( final EquipmentSlot slot ) {
+		switch ( slot ) {
+		case NONE: return false;
+		case TWO_HANDS: return canEquip( EquipmentSlot.MAIN_HAND ) && 
+				canEquip( EquipmentSlot.OFF_HAND );
+		case ONE_HAND: return canEquip( EquipmentSlot.MAIN_HAND ) || 
+				canEquip( EquipmentSlot.OFF_HAND );
+		case RING: return canEquip( EquipmentSlot.RING1 ) || 
+				canEquip( EquipmentSlot.RING2 );
+		default:
+			return equipment.containsKey(slot);
+		}
+	}
+	
+	public void equip( final EquipmentSlot slot, final DDItem item ) {
+		switch ( slot ) {
+		case NONE:
+		case ONE_HAND:
+		case RING:
+			throw new IllegalArgumentException("Cannot equip directly to slot:" + slot);
+		case TWO_HANDS: 
+			equip( EquipmentSlot.MAIN_HAND, item ); 
+			equip( EquipmentSlot.OFF_HAND, item );
+			break;
+		default:
+			equipment.put(slot, item);
+			break;
+		}
+	}
+	
+	public void unequip( final EquipmentSlot slot ) {
+		switch ( slot ) {
+		case NONE:
+		case ONE_HAND:
+		case RING:
+			throw new IllegalArgumentException("Cannot unequip directly to slot:" + slot);
+		case TWO_HANDS: 
+			unequip( EquipmentSlot.MAIN_HAND ); 
+			unequip( EquipmentSlot.OFF_HAND );
+			break;
+		default:
+			equipment.remove(slot);
+		}
+	}
+}

+ 22 - 0
src/org/leumasjaffe/charsheet/model/equip/DDInventory.java

@@ -0,0 +1,22 @@
+package org.leumasjaffe.charsheet.model.equip;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import lombok.AccessLevel;
+import lombok.Data;
+import lombok.NonNull;
+import lombok.experimental.FieldDefaults;
+
+@Data
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class DDInventory {
+	
+	@NonNull DDEquipment equipment;
+	@NonNull List<DDItem> items;
+	
+	public DDInventory() {
+		items = new ArrayList<>();
+		equipment = new DDEquipment();
+	}
+}

+ 1 - 1
src/org/leumasjaffe/charsheet/model/equip/DDItem.java

@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults;
 @FieldDefaults(level=AccessLevel.PRIVATE)
 public class DDItem {
 	String name = "";
-	IntValue number = new IntValue(1);
+	IntValue count = new IntValue(1);
 	Money value = new Money(0, 0, 0, 0);
 	StringValue page = new StringValue();
 	EquipmentSlot slot = EquipmentSlot.NONE;

+ 3 - 1
src/org/leumasjaffe/charsheet/model/equip/EquipmentSlot.java

@@ -8,11 +8,13 @@ public enum EquipmentSlot {
 	THROAT,
 	ARM,
 	HAND,
-	RING, // x2
+	RING, RING1, RING2,
 	BODY,
 	WAIST,
 	LEGS,
 	MAIN_HAND,
 	OFF_HAND,
+	ONE_HAND,
+	TWO_HANDS,
 	NONE
 }

+ 5 - 1
src/org/leumasjaffe/charsheet/view/EquipmentTab.java

@@ -11,6 +11,8 @@ import java.awt.Insets;
 
 import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.charsheet.model.DDCharacter;
+import org.leumasjaffe.charsheet.model.equip.DDItem;
+import org.leumasjaffe.charsheet.view.inventory.ItemPanel;
 
 import java.awt.Color;
 import javax.swing.JLabel;
@@ -87,7 +89,9 @@ public class EquipmentTab extends JPanel {
 	public void setModel(DDCharacter model) {
 		equipment.removeAll();
 		inventory.removeAll();
-		
+		for ( DDItem item : model.getInventory().getItems() ) {
+			inventory.add(new ItemPanel(item));
+		}
 	}
 
 }

+ 1 - 1
src/org/leumasjaffe/charsheet/view/inventory/ItemPanel.java

@@ -123,7 +123,7 @@ public class ItemPanel extends JPanel {
 		add(nameField, gbc_nameField);
 		nameField.setColumns(10);
 		
-		countField = new JTextField(Integer.toString(item.getNumber().value()));
+		countField = new JTextField(Integer.toString(item.getCount().value()));
 		GridBagConstraints gbc_countField = new GridBagConstraints();
 		gbc_countField.insets = new Insets(0, 0, 0, 0);
 		gbc_countField.fill = GridBagConstraints.HORIZONTAL;