/// <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(); }
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!"); } }
/// <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); }
public void OnItemSelected(InventoryItemStack stack) { Debug.Log(stack.item.name); VRInventory.RemoveItem("Balde", 1, stack); //UpdateBars(); }
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++; } }