/// <summary> /// Remove items from the inventory. /// </summary> /// <param name="items">Items to remove from the inventory.</param> /// <param name="remainingItems">Items that couldn't be removed from the inventory.</param> /// <returns>Returns the items that have been removed.</returns> public void RemoveItemsFromInventory(List <Item> items, out List <Item> remainingItems) { remainingItems = new List <Item>(); List <int> indexes = new List <int>(); foreach (Item item in items) { CheckIfItemExistsInInventory(item.ItemData, out int availableAmount); if (availableAmount >= item.Amount) { RemoveItemFromInventory(item.ItemData, item.Amount, ref indexes); } else { RemoveItemFromInventory(item.ItemData, availableAmount, ref indexes); int diff = item.Amount - availableAmount; if (diff > 0) { remainingItems.Add(new Item(item.ItemData, diff)); } } } OnDirtyItemsEvent?.Invoke(indexes, Items); }
/// <summary> /// Add items to the inventory. /// </summary> /// <param name="items">Items to add to the inventory.</param> /// <param name="remainingItems">Items that couldn't be added to the inventory.</param> /// /// <returns>Returns the items that have been added.</returns> public void AddItemsToInventory(List <Item> items, out List <Item> remainingItems) { remainingItems = new List <Item>(); List <int> indexes = new List <int>(); foreach (Item item in items) { int availableAmount = GetNumberOfAvailableSlotForItem(item.ItemData); if (availableAmount == 0) { remainingItems.Add(new Item(item.ItemData, item.Amount)); continue; } if (availableAmount >= item.Amount) { AddItemToInventory(item.ItemData, item.Amount, ref indexes); } else { AddItemToInventory(item.ItemData, availableAmount, ref indexes); int diff = item.Amount - availableAmount; if (diff > 0) { remainingItems.Add(new Item(item.ItemData, diff)); } } } OnDirtyItemsEvent?.Invoke(indexes, Items); }