package com.lateensoft.pathfinder.toolkit.deprecated.v1.model.character;
import java.util.ArrayList;
import com.lateensoft.pathfinder.toolkit.deprecated.v1.model.character.items.PTArmor;
import com.lateensoft.pathfinder.toolkit.deprecated.v1.model.character.items.PTItem;
import com.lateensoft.pathfinder.toolkit.deprecated.v1.model.character.items.PTWeapon;
public class PTCharacterInventory {
private ArrayList<PTItem> mItems;
private ArrayList<PTArmor> mArmor;
private ArrayList<PTWeapon> mWeapons;
PTCharacterInventory(){
mItems = new ArrayList<PTItem>();
mArmor = new ArrayList<PTArmor>();
mWeapons = new ArrayList<PTWeapon>();
//For new inventory, give user sample items
addItem(new PTItem("Sample Item", 10, 1, false));
addItem(new PTItem("Contained Item (ex. In bag of holding)", 30, 1, true));
}
/**
* Adds the item into the inventory. It is placed such that the list is alphabetically listed.
* @param newItem
*/
public void addItem(PTItem newItem){
if( newItem != null ){
//If the item already exists in inventory, add to its quantity
int i = getIndexOf(newItem.getName());
if(i >= 0){
int quantity = newItem.getQuantity() + getItem(i).getQuantity();
setQuantity(i, quantity);
return;
}
for(i = 0; i < mItems.size(); i++){
//Places in alphabetical position
if(newItem.getName().compareToIgnoreCase(getItem(i).getName()) < 0 ){
mItems.add(i, newItem);
return;
}
}
//If item is to go at the end of the list
mItems.add(newItem);
}
}
public void addArmor(PTArmor newArmor) {
if( newArmor != null ){
mArmor.add(newArmor);
}
}
public void addWeapon(PTWeapon newWeapon) {
if( newWeapon != null ){
mWeapons.add(newWeapon);
}
}
/**
* Deletes the item at index.
* @param index
*/
public void deleteItem(int index){
if(index >= 0 && index < mItems.size())
mItems.remove(index);
}
public void deleteArmor(int index) {
if(index >=0 && index < mArmor.size())
mArmor.remove(index);
}
public void deleteWeapon(int index) {
if(index >= 0 && index < mWeapons.size())
mWeapons.remove(index);
}
/**
*
* @param index
* @return the item at index
*/
public PTItem getItem(int index){
if(index >= 0 && index < mItems.size())
return mItems.get(index);
else return null;
}
public PTArmor getArmor(int index) {
if(index>= 0 && index < mArmor.size())
return mArmor.get(index);
else return null;
}
public PTWeapon getWeapon(int index) {
if(index >= 0 && index < mWeapons.size())
return mWeapons.get(index);
else return null;
}
/**
*
* @return new array of armor
*/
public PTArmor[] getArmorArray() {
PTArmor[] armorArray = new PTArmor[mArmor.size()];
return (PTArmor[]) mArmor.toArray(armorArray);
}
public PTWeapon[] getWeaponArray() {
PTWeapon[] weaponArray = new PTWeapon[mWeapons.size()];
return (PTWeapon[]) mWeapons.toArray(weaponArray);
}
/**
* Replaces the item at index with newItem. If index is outside the bounds of this, or null, it will do nothing. Resorts the inventory alphabetically
* @param newItem
* @param index
*/
public void setItem(PTItem newItem, int index){
if(index >= 0 && index < mItems.size() && newItem != null){
deleteItem(index);
addItem(newItem);
}
}
public void setArmor(PTArmor newArmor, int index) {
if(index >= 0 && index < mArmor.size() && newArmor != null) {
deleteArmor(index);
addArmor(newArmor);
}
}
public void setWeapon(PTWeapon newWeapon, int index) {
if(index >= 0 && index < mWeapons.size() && newWeapon != null) {
deleteWeapon(index);
addWeapon(newWeapon);
}
}
/**
* returns an array of all the objects in the inventory
* @return an array of PTItem objects
*/
public PTItem[] getItems(){
return mItems.toArray(new PTItem[mItems.size()]);
}
/**
* Sets the weight of the item at index
* @param index
* @param weight
*/
public void setWeight(int index, int weight){
if(index >= 0 && index < mItems.size())
mItems.get(index).setWeight(weight);
}
/**
* Sets the quantity of the item at index
* @param index
* @param quantity
*/
public void setQuantity(int index, int quantity){
if(index >= 0 && index < mItems.size())
mItems.get(index).setQuantity(quantity);
}
/**
* Sets the item flag of the item at index if it is contained by another container
* @param index
* @param isContained
*/
public void setContained(int index, boolean isContained){
if(index >= 0 && index < mItems.size())
mItems.get(index).setIsContained(isContained);
}
/**
*
* @param itemName
* @return the index of the object with itemName. returns -1 if the item is not in the inventory.
*/
public int getIndexOf(String itemName){
for(int i = 0; i < mItems.size(); i++){
if(itemName.contentEquals(mItems.get(i).getName())){
return i;
}
}
return -1;
}
public int getIndexOfArmor(String itemName){
for(int i = 0; i < mArmor.size(); i++){
if(itemName.contentEquals(mArmor.get(i).getName())){
return i;
}
}
return -1;
}
public int getNumberOfItems(){
return mItems.size();
}
public int getNumberOfArmor() {
return mArmor.size();
}
public int getNumberofWeapons() {
return mWeapons.size();
}
public int getTotalWeight() {
int totalWeight = 0;
for(int i = 0; i < mItems.size(); i++) {
if(!mItems.get(i).isContained())
totalWeight += (mItems.get(i).getWeight())*(mItems.get(i).getQuantity());
}
for(int i = 0; i < mWeapons.size(); i++) {
if(!mWeapons.get(i).isContained())
totalWeight += (mWeapons.get(i).getWeight())*(mWeapons.get(i).getQuantity());
}
for(int i = 0; i < mArmor.size(); i++) {
if(!mArmor.get(i).isContained())
totalWeight += (mArmor.get(i).getWeight())*(mArmor.get(i).getQuantity());
}
return totalWeight;
}
}