void OnTriggerEnter(Collider collider) { if (collider.gameObject.tag == "Player") { Inventory.Instance.AddStack(ItemPrefabsDefinition.StackClone(itemID, 1)); GameObject.Destroy(this.gameObject); } }
public ItemStack AddStack(ItemStack stack) { if (stack.num < 1 || stack.item == null) { Debug.LogError("Trying to add empty stack to inventory."); return(null); } // First run, add to the same item stack in inventory foreach (ItemStack st in inventory) { if (st != null && st.item.itemID == stack.item.itemID) { while (st.num < st.item.itemMaxStack && stack.num > 0) { stack.num--; st.num++; } } } // Add to existed item stack complete, return null(nothing left) if (stack.num == 0) { Messenger.Invoke(MyEventType.INVENTORY_CHANGED); return(null); } int stackSplitNum = stack.num / (stack.item.itemMaxStack);; for (int i = 0; i < stackSplitNum; i++) { for (int j = 0; j < inventory.Count && (stack.num > stack.item.itemMaxStack); j++) { if (inventory[j] == null) { inventory[j] = ItemPrefabsDefinition.StackClone(stack.item.itemID, stack.item.itemMaxStack); stack.num -= stack.item.itemMaxStack; } } } // add item left to the first empty inventory slot for (int i = 0; i < inventory.Count; i++) { if (inventory[i] == null) { inventory[i] = stack; Messenger.Invoke(MyEventType.INVENTORY_CHANGED); return(null); } } Messenger.Invoke(MyEventType.INVENTORY_CHANGED); //return what's left return(stack); }