public void UpdateItem(string uniqueUUID, ICoreData item, bool updateUI) { for (int i = 0; i < InternalItems.Count; i++) { if (InternalItems[i].BaseData.UniqueUUID == uniqueUUID) { IStackableData iStackDataInterface = InternalItems[i].BaseData as IStackableData; if (iStackDataInterface != null) { if (iStackDataInterface.DestroyOnUse && iStackDataInterface.Quantity <= 0) { RemoveItem(InternalItems[i].BaseData.UniqueUUID, updateUI); } else { InternalItems[i] = item; EventSystem.EventMessenger.Instance.Raise(new Events.EventItemWasUpdatedOnInventory(InventoryUUID, item, updateUI)); } } else { InternalItems[i] = item; EventSystem.EventMessenger.Instance.Raise(new Events.EventItemWasUpdatedOnInventory(InventoryUUID, item, updateUI)); } } } }
public StackResult Stack(BaseItem itemToStack) { // NOTE: // By returning null in this method // a switch will happen on UISlot class itemToStack = itemToStack as ResourceItem; if (itemToStack == null) { return(null); } IStackableData iStackDataInterface = itemToStack.BaseData as IStackableData; if (iStackDataInterface == null) { return(null); } StackResult result = null; if (BaseData.Type == itemToStack.BaseData.Type) { if (IsStackable && iStackDataInterface.IsStackable) { // check if the item in the left has available space to stack if (StackableMax > Quantity) { result = new StackResult(); // how much can I stack int canStackThisMuch = StackableMax - Quantity; // now check if the item that was stacked on top // of the left item still have quantity if (iStackDataInterface.Quantity > canStackThisMuch) { // the item has more than I can stack Quantity += canStackThisMuch; iStackDataInterface.Quantity -= canStackThisMuch; //result.leftItem = left; result.item = itemToStack; } else { // The item should be deleted will stack all its quantity Quantity += iStackDataInterface.Quantity; iStackDataInterface.Quantity = -1; //result.leftItem = left; result.item = itemToStack; } //Debug.Log("The items where stacked."); return(result); } else { //Debug.Log("The item in the left is full"); return(null); } } else { //Debug.Log("one of the items is not stackable."); return(null); } } else { //Debug.Log("The item type is not the same"); return(null); } }