package com.jmrapp.terralegion.game.item;
import com.badlogic.gdx.utils.Array;
/**
* Created by Jon on 10/1/15.
*/
public class ItemStack {
private static final Array<ItemStack> itemStackQueue = new Array<ItemStack>();
private Item item;
private int stack;
private ItemStack(Item item, int stack) {
this.item = item;
this.stack = stack;
}
public void set(Item item, int stack) {
this.item = item;
this.stack = stack;
}
public Item getItem() {
return item;
}
public int getStack() {
return stack;
}
public void setStack(int stack) {
this.stack = stack;
}
/**
* Adds to the size of the stack. This method should NOT be used to remove from the itemStack.
*
* @param amount The amount to add
* @return The remainder if it exceeds the max stack size;
*/
public int addStack(int amount) {
stack += amount;
if (stack > item.getMaxItemStack()) {
int remainder = stack - item.getMaxItemStack();
stack = item.getMaxItemStack();
return remainder;
}
return 0;
}
/**
* Adds to the size of the stack. Merges two itemStacks together. This method should NOT be used to remove from the itemStack
* NOTE: Assumes that the itemStack has the same item type as this itemStack.
* @param itemStack The itemStack to merge
* @return The itemStack that was merged into this itemStack.
*/
public ItemStack mergeStack(ItemStack itemStack) {
stack += itemStack.getStack();
if (stack > item.getMaxItemStack()) {
int remainder = stack - item.getMaxItemStack();
stack = item.getMaxItemStack();
itemStack.stack = remainder;
} else {
itemStack.stack = 0;
}
return itemStack;
}
/**
* Remove from the itemstack.
*
* @param amount The amount to remove
* @return The remainder if more was removed than what was in the stack
*/
public int removeStack(int amount) {
stack -= amount;
if (stack < 0) {
int remainder = stack * -1;
stack = 0;
return remainder;
}
return 0;
}
/**
* Removes the stack size of itemStack from this itemStack. If it goes below 0 then the itemStack gets the remainder
* @param itemStack The itemStack to subtract from this itemStack
* @return The itemStack that was used to subtract from this itemStack. Will have a stack size > 0 if there was a remainder
*/
public ItemStack removeStack(ItemStack itemStack) {
stack -= itemStack.getStack();
if (stack < 0) {
itemStack.stack = stack * -1; //Get the remainder
stack = 0;
} else {
itemStack.stack = 0;
}
return itemStack;
}
public void destroy() {
itemStackQueue.add(this);
}
public static ItemStack getItemStack(ItemStack stack) {
return getItemStack(stack.getItem(), stack.getStack());
}
public static ItemStack getItemStack(Item item, int stack) {
if (itemStackQueue.size > 0) {
ItemStack itemStack = itemStackQueue.removeIndex(0);
itemStack.set(item, stack);
return itemStack;
}
return new ItemStack(item, stack);
}
}