/// <summary> /// Adds the item to the inventory slot /// </summary> /// <param name="item"></param> /// <returns> This Returns the left over amount of items that couldn't be picked up cause the slot was either full or it went over the characters strength limit </returns> public override Item AddItem(Item item) { Item temp = item; if (HeldItem == null) { if (ParentInventory != null && item != null) { if (item.stackCount * item.itemWeight <= ParentInventory.GetAddableWeight) { HeldItem = item; temp = Instantiate(HeldItem, HeldItem.transform.position + new Vector3(0, 0.2f, 0), HeldItem.transform.rotation); temp.transform.parent = null; Destroy(temp.gameObject); SlotWeight = item.stackCount * item.itemWeight; ParentInventory.AddWeight(SlotWeight); } else { int numberOfAddableItems = Mathf.FloorToInt(ParentInventory.GetAddableWeight / item.itemWeight); if (numberOfAddableItems > 0) { HeldItem = item; temp = Instantiate(HeldItem, HeldItem.transform); temp.transform.parent = null; HeldItem.RemoveFromStack(HeldItem.stackCount - numberOfAddableItems); temp.RemoveFromStack(numberOfAddableItems); SlotWeight = numberOfAddableItems * item.itemWeight; ParentInventory.AddWeight(SlotWeight); } } } } else { if (ParentInventory != null && item != null) { if (item.itemID == HeldItem.itemID) { int ItemAmount = HeldItem.stackCount + item.stackCount; if (ItemAmount > HeldItem.maxStackCount) { int AmountToFill = HeldItem.maxStackCount - HeldItem.stackCount <= item.stackCount ? HeldItem.maxStackCount - HeldItem.stackCount : item.stackCount; if (AmountToFill > 0) { if (AmountToFill * item.itemWeight <= ParentInventory.GetAddableWeight) { HeldItem.AddToStack(AmountToFill); temp.RemoveFromStack(AmountToFill); SlotWeight += AmountToFill * item.itemWeight; ParentInventory.AddWeight(AmountToFill * item.itemWeight); } else { int numberOfAddableItems = Mathf.FloorToInt(ParentInventory.GetAddableWeight / item.itemWeight) <= item.stackCount ? Mathf.FloorToInt(ParentInventory.GetAddableWeight / item.itemWeight) : item.stackCount; if (numberOfAddableItems > 0) { HeldItem.AddToStack(numberOfAddableItems); temp.RemoveFromStack(numberOfAddableItems); if (temp.stackCount <= 0) { Destroy(temp.gameObject); } SlotWeight += numberOfAddableItems * item.itemWeight; ParentInventory.AddWeight(numberOfAddableItems * item.itemWeight); } } } } else { if (item.stackCount * item.itemWeight <= ParentInventory.GetAddableWeight) { HeldItem.AddToStack(temp.stackCount); temp = Instantiate(HeldItem, HeldItem.transform); temp.transform.parent = null; temp.RemoveFromStack(temp.stackCount); if (temp.stackCount <= 0) { Destroy(temp.gameObject); } SlotWeight += item.stackCount * item.itemWeight; ParentInventory.AddWeight(item.stackCount * item.itemWeight); } else { int numberOfAddableItems = Mathf.FloorToInt(ParentInventory.GetAddableWeight / item.itemWeight) <= item.stackCount ? Mathf.FloorToInt(ParentInventory.GetAddableWeight / item.itemWeight) : item.stackCount; if (numberOfAddableItems > 0) { HeldItem.AddToStack(numberOfAddableItems); temp.RemoveFromStack(numberOfAddableItems); SlotWeight += numberOfAddableItems * item.itemWeight; ParentInventory.AddWeight(numberOfAddableItems * item.itemWeight); } } } } } } if (HeldItem != null) { HeldItem.DeactivateItem(); } SetHeldItem(); UpdateItemDisplay(); if (temp != null) { temp.ReleaseItem(); } return(temp); }