Пример #1
0
        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);
        }
Пример #2
0
        public void SellAll(IInventoryOwner owner)
        {
            var inventories = owner.GetInventories();

            for (int i = 0; i < inventories.Count; i++)
            {
                SellAll(owner, inventories[i]);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
                }
            }
        }
Пример #6
0
        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);
                    }
                }
            }
        }