public void Buy(int index, IInventoryOwner owner) { if (index >= itemShops.Count) { return; } var buyItem = itemShops[index]; if (CanBuy(owner, buyItem)) { return; } if (OwnerHasSpace(owner, buyItem.Item) == false) { return; } var inventories = owner.GetInventories(); var count = buyItem.Item.count; for (int i = 0; i < inventories.Count; i++) { var space = inventories[i].CountOfSpaceForItem(buyItem.Item); var add = Mathf.Min(count, space); inventories[i].AddItem(buyItem.Item, add); count -= add; } owner.RemoveCurrency(buyItem.Cost); }
public void SellAll(IInventoryOwner owner) { var inventories = owner.GetInventories(); for (int i = 0; i < inventories.Count; i++) { SellAll(owner, inventories[i]); } }
public bool CanCraft(IInventoryOwner owner, int index, int recipeIndex) { var itemCraft = list[index]; var inventories = owner.GetInventories(); var recipes = itemCraft.GetRecipes(); var selectedRecipe = recipes[recipeIndex]; bool result = OwnerHasEnoughItemsForRecipe(inventories, selectedRecipe); return(result); }
bool OwnerHasSpace(IInventoryOwner owner, Item item) { var inventories = owner.GetInventories(); var freeSpace = 0; for (int i = 0; i < inventories.Count; i++) { if (inventories[i].HaveSpaceForItem(item)) { freeSpace += inventories[i].CountOfSpaceForItem(item); } } return(freeSpace >= item.count); }
private static void RemoveItems(IInventoryOwner owner, CraftingRecipe selectedRecipe) { var inventories = owner.GetInventories(); for (int i = 0; i < selectedRecipe.items.Count; i++) { var count = selectedRecipe.counts[i]; for (int inv = 0; inv < inventories.Count; inv++) { var remove = Mathf.Min(count, inventories[inv].CountOfItem(selectedRecipe.items[i])); inventories[inv].RemoveItem(selectedRecipe.items[i], remove); count -= remove; } } }
private static void AddItems(ItemCrafting itemCraft, IInventoryOwner owner) { var inventories = owner.GetInventories(); var result = itemCraft.GetItems(); for (int inv = 0; inv < inventories.Count; inv++) { for (int i = 0; i < result.Count; i++) { if (inventories[inv].HaveSpaceForItem(result[i])) { inventories[inv].AddItem(result[i], result[i].count); } } } }