Ejemplo n.º 1
0
        /// <summary>
        /// Remove the specified item from the inventory
        /// Specify a quantity of -1 in order to remove all items
        /// </summary>
        /// <param name="name"></param>
        public void RemoveItem(string name, int quantity = 1, InventoryItemStack stackToRemoveFrom = null)
        {
            var stack = stackToRemoveFrom ?? items.FirstOrDefault(i => i.item.name == name);

            // if there's nothing to remove, return
            if (stack == null)
            {
                return;
            }

            if (quantity < 0)
            {
                // if a negative quantity has been specified, remove all
                stack.quantity = 0;
            }
            else
            {
                // remove the specified quantity
                stack.quantity -= quantity;
            }

            // if there are none left, remove the stack
            if (stack.quantity <= 0)
            {
                items.Remove(stack);
            }

            ItemsUpdated();
        }
Ejemplo n.º 2
0
        void SelectItem(InventoryItemStack itemStack)
        {
            // retrieve the actual stack from the collection
            itemStack = items.FirstOrDefault(i => i.Equals(itemStack));

            if (itemStack != null)
            {
                if (itemStack.item.useSound != null)
                {
                    _audioSource.clip = itemStack.item.useSound;
                    _audioSource.Play();
                }

                onItemSelected.Invoke(itemStack);

                if (hideWhenItemSelected && inventoryTriggerMode == eInventoryTriggerMode.InputFire1)
                {
                    Hide();
                }

                if (itemStack.item.equippable)
                {
                    if (equippedItem != null && equippedItem == itemStack.item)
                    {
                        UnEquipItem();
                    }
                    else
                    {
                        EquipItem(itemStack.item.name);
                    }
                }
            }
        }
        void ItemSelected(InventoryItemStack stack)
        {
            switch (stack.item.name)
            {
            case "Health Potion": HandleHealthPotionUse(stack); break;

            case "Mana Potion": HandleManaPotionUse(stack); break;
            }
        }
 void HandleManaPotionUse(InventoryItemStack stack)
 {
     if (mana < 100)
     {
         mana = Math.Min(mana + 15, 100);
         VRInventory.RemoveItem("Mana Potion", 1, stack);
         UpdateBars();
     }
     else
     {
         ShowMessage("Mana full!");
     }
 }
 void HandleHealthPotionUse(InventoryItemStack stack)
 {
     if (health < 100)
     {
         health = Math.Min(health + 25, 100);
         VRInventory.RemoveItem("Health Potion", 1, stack);
         UpdateBars();
     }
     else
     {
         ShowMessage("You are already at full health!");
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Add the specified item to the inventory
        /// (an item with this name must exist in the inventory item database)
        /// </summary>
        /// <param name="name"></param>
        public ePickUpResult AddItem(string name, int quantity = 1)
        {
            var item = itemDatabase.GetItem(name);

            var pickupResult = new InventoryItemPickupResult()
            {
                item = item, quantity = quantity
            };

            if (item != null)
            {
                while (quantity > 0)
                {
                    var stack = items.FirstOrDefault(i => i.item == item && (item.stackSize < 0 || i.quantity < item.stackSize));

                    if (stack == null)
                    {
                        var stackCount = items.Count(i => i.item == item);

                        if (item.maxNumberOfStacks == -1 || stackCount < item.maxNumberOfStacks)
                        {
                            stack = new InventoryItemStack()
                            {
                                item = item, quantity = 0
                            };
                            items.Add(stack);
                        }
                    }

                    if (stack != null)
                    {
                        stack.quantity += 1;
                        quantity       -= 1;
                    }
                    else
                    {
                        pickupResult.result = ePickUpResult.Failed_CannotCarryMode;
                        break;
                    }
                }

                onItemPickedUp.Invoke(pickupResult);
            }

            ItemsUpdated();

            return(pickupResult.result);
        }
Ejemplo n.º 7
0
 public void OnItemSelected(InventoryItemStack stack)
 {
     Debug.Log(stack.item.name);
     VRInventory.RemoveItem("Balde", 1, stack);
     //UpdateBars();
 }
Ejemplo n.º 8
0
        void RenderItems()
        {
            // hide the item template in play mode
            if (Application.isPlaying && itemTemplate.gameObject.activeInHierarchy)
            {
                itemTemplate.gameObject.SetActive(false);
            }

            // clear existing items
            var existingItems = itemContainerScrollRect.content.GetComponentsInChildren <VRInventoryItem>();

            foreach (var item in existingItems)
            {
                if (item != itemTemplate)
                {
                    if (Application.isPlaying)
                    {
                        Destroy(item.gameObject);
                    }
                    else
                    {
                        DestroyImmediate(item.gameObject);
                    }
                }
            }

#if UNITY_EDITOR
            // if we're not in play mode, and showInventoryItemsInEditMode is false, stop here
            if (!Application.isPlaying && !showInventoryItemsInEditMode)
            {
                return;
            }
#endif
            int index = 0;
            // create the new items
            foreach (var itemStack in items)
            {
                var newItem = Instantiate(itemTemplate);

                newItem.gameObject.SetActive(true);
                newItem.transform.SetParent(itemContainerScrollRect.content);

                var rectTransform = newItem.transform as RectTransform;

                rectTransform.localScale         = Vector3.one;
                rectTransform.anchoredPosition3D = Vector3.zero;
                rectTransform.localRotation      = new Quaternion();

                newItem.GetComponent <VRInventoryItem>().SetData(itemStack.item, itemStack.quantity);
                newItem.name = itemStack.item.name;

                // we need a copy, otherwise a reference will be used instead
                itemStack.index = index; // we're using this index to uniquely reference each stack
                var _stack = new InventoryItemStack {
                    item = itemStack.item, quantity = itemStack.quantity, index = index
                };

                CreateEvent(newItem.transform.GetChild(0).gameObject, EventTriggerType.PointerDown, () => SelectItem(_stack));

                index++;
            }
        }