package com.weem.epicinventor.inventory;
import com.weem.epicinventor.*;
import com.weem.epicinventor.item.*;
import java.io.*;
import java.util.ArrayList;
public class Inventory implements Serializable {
protected static final long serialVersionUID = 2758038295129156427L;
transient private Registry registry;
ArrayList<InventorySlot> inventorySlots;
private final static String IMAGE_DIR = "Data/Images/";
public Inventory(Registry rg, int slots) {
registry = rg;
inventorySlots = new ArrayList<InventorySlot>();
InventorySlot is;
for (int i = 0; i < slots; i++) {
is = new InventorySlot(this, registry);
inventorySlots.add(is);
}
}
public void setTransient(Registry rg) {
registry = rg;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlots.get(i).setTransient(rg);
}
}
public String getCategoryFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return "";
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return "";
}
if (invSlot.getQty() < 1) {
return "";
}
ItemType itemType = invSlot.getItemType();
if (itemType != null) {
return itemType.getCategory();
} else {
return "";
}
}
public String getTypeFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return "";
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return "";
}
if (invSlot.getQty() < 1) {
return "";
}
ItemType itemType = invSlot.getItemType();
if (itemType != null) {
return itemType.getType();
} else {
return "";
}
}
public int getQtyFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return 0;
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return 0;
}
if (invSlot.getQty() < 1) {
return 0;
}
return invSlot.getQty();
}
public int getLevelFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return 0;
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return 0;
}
if (invSlot.getLevel() < 1) {
return 1;
}
return invSlot.getLevel();
}
public void setLevelFromSlot(int slot, int level) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return;
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return;
}
invSlot.setLevel(level);
}
public String getNameFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return "";
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return "";
}
if (invSlot.getQty() < 1) {
return "";
}
ItemType itemType = invSlot.getItemType();
if (itemType != null) {
return itemType.getName();
} else {
return "";
}
}
public String getImageFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return "";
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return "";
}
if (invSlot.getQty() < 1) {
return "";
}
ItemType itemType = invSlot.getItemType();
if (itemType != null) {
return itemType.getImageName();
} else {
return "";
}
}
public String getDescriptionFromSlot(int slot) {
if (slot < 0
|| slot > inventorySlots.size() - 1) {
return "";
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return "";
}
if (invSlot.getQty() < 1) {
return "";
}
ItemType itemType = invSlot.getItemType();
if (itemType != null) {
return itemType.getDescription();
} else {
return "";
}
}
public int getItemTypeQty(String name) {
int qty = 0;
InventorySlot inventorySlot = null;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
String slotName = inventorySlot.getItemTypeName();
if (slotName.equals(name)) {
qty += inventorySlot.getQty();
}
}
return qty;
}
public int getUsedSlots() {
int used = 0;
InventorySlot inventorySlot = null;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
if (inventorySlot.getQty() > 0) {
used++;
}
}
return used;
}
public boolean contains(String name) {
int qty = 0;
InventorySlot inventorySlot = null;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
String slotName = inventorySlot.getItemTypeName();
if (slotName.equals(name)) {
return true;
}
}
return false;
}
public int getLevelForType(String name) {
InventorySlot inventorySlot = null;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
String slotName = inventorySlot.getItemTypeName();
if (slotName.equals(name)) {
return inventorySlot.getLevel();
}
}
return 1;
}
public boolean containsFromTop(String name, int slotCount) {
int qty = 0;
InventorySlot inventorySlot = null;
for (int i = inventorySlots.size() - slotCount; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
String slotName = inventorySlot.getItemTypeName();
if (slotName.equals(name)) {
return true;
}
}
return false;
}
public boolean isEmpty() {
int qty = 0;
InventorySlot inventorySlot = null;
for (int i = 0; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
if (inventorySlot.getQty() > 0) {
return false;
}
}
return true;
}
public int addToInventory(int startSlot, String name, int qty) {
return addToInventory(startSlot, name, qty, 1);
}
public int addToInventory(int startSlot, String name, int qty, int level) {
return addToInventory(startSlot, name, qty, level, true);
}
public int addToInventory(int startSlot, String name, int qty, int level, boolean stack) {
ItemType itemType = registry.getItemType(name);
InventorySlot inventorySlot = null;
if (itemType == null || qty < 1) {
return -1;
}
int leftToDistribute = qty;
//try and stack with an existing slot
if (stack) {
if (startSlot == 0) {
for (int i = inventorySlots.size() - 1; i >= 0; i--) {
inventorySlot = inventorySlots.get(i);
if (inventorySlot.getItemTypeName().equals(name)) {
leftToDistribute = inventorySlot.addItem(itemType, leftToDistribute, level);
}
if (leftToDistribute <= 0) {
break;
}
}
}
}
if (leftToDistribute > 0) {
for (int i = startSlot; i < inventorySlots.size(); i++) {
inventorySlot = inventorySlots.get(i);
leftToDistribute = inventorySlot.addItem(itemType, leftToDistribute, level);
if (leftToDistribute <= 0) {
break;
}
}
}
return leftToDistribute;
}
public void deleteInventory(int slot, int qty) {
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return;
}
int endingQty = invSlot.getQty() - qty;
if (qty <= 0 || endingQty < 1) {
setSlotQuantity(slot, 0);
} else {
setSlotQuantity(slot, endingQty);
}
return;
}
public void setSlotQuantity(int slot, int qty) {
if (slot < 0 || slot > inventorySlots.size() - 1) {
return;
}
InventorySlot invSlot = inventorySlots.get(slot);
if (invSlot == null) {
return;
}
int currentQty = invSlot.getQty();
if (currentQty >= qty) {
invSlot.setQty(qty);
}
return;
}
public void deleteItems(String name, int qty) {
if (qty <= 0) {
return;
}
int leftToDelete = qty;
InventorySlot inventorySlot = null;
for (int i = (inventorySlots.size() - 1); i >= 0; i--) {
inventorySlot = inventorySlots.get(i);
if (inventorySlot.getItemTypeName().equals(name)) {
if (inventorySlot.getQty() > leftToDelete) {
inventorySlot.setQty(inventorySlot.getQty() - leftToDelete);
leftToDelete = 0;
} else {
leftToDelete -= inventorySlot.getQty();
inventorySlot.setQty(0);
}
}
if (leftToDelete <= 0) {
break;
}
}
return;
}
public void swapInventoryLocations(int slotFrom, int slotTo) {
if (slotFrom < 0
|| slotFrom > inventorySlots.size() - 1
|| slotTo < 0
|| slotTo > inventorySlots.size() - 1
|| slotFrom == slotTo) {
return;
}
InventorySlot invSlotFrom = inventorySlots.get(slotFrom);
InventorySlot invSlotTo = inventorySlots.get(slotTo);
if (invSlotFrom == null || invSlotTo == null) {
return;
}
if (invSlotFrom.getQty() < 1) {
return;
}
if (invSlotFrom.getItemType() == invSlotTo.getItemType()) {
int qtyLeft = invSlotTo.addItem(invSlotFrom.getItemType(), invSlotFrom.getQty(), invSlotFrom.getLevel());
invSlotFrom.setQty(qtyLeft);
} else {
inventorySlots.set(slotTo, invSlotFrom);
inventorySlots.set(slotFrom, invSlotTo);
}
return;
}
public void equipFromSlot(int slotFrom, int slotTo) {
if (slotFrom < 0
|| slotFrom > inventorySlots.size() - 1
|| slotTo < 0
|| slotTo > inventorySlots.size() - 1
|| slotFrom == slotTo) {
return;
}
InventorySlot invSlotFrom = inventorySlots.get(slotFrom);
InventorySlot invSlotTo = inventorySlots.get(slotTo);
if (invSlotFrom == null || invSlotTo == null) {
return;
}
if (invSlotFrom.getQty() < 1) {
return;
}
if (invSlotFrom.getItemType() == invSlotTo.getItemType()) {
int qtyLeft = invSlotTo.addItem(invSlotFrom.getItemType(), invSlotFrom.getQty(), invSlotFrom.getLevel());
invSlotFrom.setQty(qtyLeft);
} else {
inventorySlots.set(slotTo, invSlotFrom);
inventorySlots.set(slotFrom, invSlotTo);
}
return;
}
private void readObject(ObjectInputStream aInputStream) throws Exception {
aInputStream.defaultReadObject();
}
private void writeObject(ObjectOutputStream aOutputStream) throws Exception {
aOutputStream.defaultWriteObject();
}
}