/// <summary> /// When pressing the equip/use button, we determine which of the two methods to call /// </summary> public virtual void EquipOrUse() { if (CurrentlySelectedInventorySlot.Equippable()) { CurrentlySelectedInventorySlot.Equip(); } if (CurrentlySelectedInventorySlot.Usable()) { CurrentlySelectedInventorySlot.Use(); } }
/// <summary> /// When pressing the equip/use button, we determine which of the two methods to call /// </summary> public virtual void EquipOrUse() { if (CurrentlySelectedInventorySlot.Equippable()) { CurrentlySelectedInventorySlot.Equip(); } if (CurrentlySelectedInventorySlot.Usable()) { //CurrentlySelectedInventorySlot.Use(); MMInventoryEvent.Trigger(MMInventoryEventType.PickTarget, CurrentlySelectedInventorySlot, TargetInventoryDisplay.TargetInventoryName, TargetInventoryDisplay.TargetInventory.Content[CurrentlySelectedInventorySlot.Index], 0, 0); CloseInventory(); } }
/// <summary> /// Triggers the selected slot's drop method /// </summary> public virtual void Drop() { CurrentlySelectedInventorySlot.Drop(); }
/// <summary> /// Triggers the selected slot's move method /// </summary> public virtual void Move() { CurrentlySelectedInventorySlot.Move(); }
public virtual void UnEquip() { CurrentlySelectedInventorySlot.UnEquip(); }
public virtual void Use() { CurrentlySelectedInventorySlot.Use(); }
/// <summary> /// Handles the inventory related inputs and acts on them. /// </summary> protected virtual void HandleInventoryInput() { // if we don't have a current inventory display, we do nothing and exit if (_currentInventoryDisplay == null) { return; } // if the user presses the 'toggle inventory' key if (Input.GetKeyDown(ToggleInvKey) || Input.GetKeyDown(ToggleInvAltKey)) { // if the inventory is not open if (!InventoryOpen) { OpenInventory(); } // if it's open else { CloseInventory(); } } // if we've only authorized input when open, and if the inventory is currently closed, we do nothing and exit if (InputOnlyWhenOpen && !InventoryOpen) { return; } // previous inventory panel if (Input.GetKeyDown(PrevInvKey) || Input.GetKeyDown(PrevInvAltKey)) { if (_currentInventoryDisplay.GoToInventory(-1) != null) { _currentInventoryDisplay = _currentInventoryDisplay.GoToInventory(-1); } } // next inventory panel if (Input.GetKeyDown(NextInvKey) || Input.GetKeyDown(NextInvAltKey)) { if (_currentInventoryDisplay.GoToInventory(1) != null) { _currentInventoryDisplay = _currentInventoryDisplay.GoToInventory(1); } } // move if (Input.GetKeyDown(MoveKey) || Input.GetKeyDown(MoveAltKey)) { if (CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Move(); } } // equip or use if (Input.GetKeyDown(EquipOrUseKey) || Input.GetKeyDown(EquipOrUseAltKey)) { EquipOrUse(); } // equip if (Input.GetKeyDown(EquipKey) || Input.GetKeyDown(EquipAltKey)) { if (CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Equip(); } } // use if (Input.GetKeyDown(UseKey) || Input.GetKeyDown(UseAltKey)) { if (CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Use(); } } // drop if (Input.GetKeyDown(DropKey) || Input.GetKeyDown(DropAltKey)) { if (CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Drop(); } } }
/// <summary> /// Handles the inventory related inputs and acts on them. /// </summary> protected override void HandleInventoryInput() { // if the user presses the 'toggle inventory' key if (Input.GetKeyDown(ToggleInventoryKey) || Input.GetKeyDown(ToggleInventoryAltKey)) { // if the inventory is not open if (!InventoryOpen) { _isPressed = false; OpenInventory(); } // if it's open else { _isPressed = true; CloseInventory(); _isPressed = false; } } // if we've only authorized input when open, and if the inventory is currently closed, we do nothing and exit if (InputOnlyWhenOpen && !InventoryOpen) { return; } // vendor increase quantity if (Input.GetKeyDown(IncreaseQuantityKey) || Input.GetKeyDown(IncreaseQuantityAltKey)) { IncreaseQuantity(); } // vendor decrease quantity if (Input.GetKeyDown(DecreaseQuantityKey) || Input.GetKeyDown(DecreaseQuantityAltKey)) { DecreaseQuantity(); } // vendor sell if (Input.GetKeyDown(SellKey) || Input.GetKeyDown(SellAltKey)) { SellItem(); } // vendor buy if (Input.GetKeyDown(BuyKey) || Input.GetKeyDown(BuyAltKey)) { BuyItem(); } // vendor toggle inventory if (Input.GetKeyDown(ToggleVendorKey) || Input.GetKeyDown(ToggleVendorAltKey)) { Vendor openedVendor = null; Vendor[] vendors = FindObjectsOfType <Vendor>(); foreach (Vendor vendor in vendors) { if (vendor.enabled && vendor.isOpen) { openedVendor = vendor; } } if (openedVendor != null && openedVendor.canRollBackItems) { if (openedVendor.isVendorRollBackOpen) { OpenVendorInventory(); } else { OpenRollBackVendorInventory(); } } } // previous inventory panel if (Input.GetKeyDown(PrevInvKey) || Input.GetKeyDown(PrevInvAltKey)) { if (_currentInventoryDisplay.GoToInventory(-1) != null) { _currentInventoryDisplay = _currentInventoryDisplay.GoToInventory(-1); } } // next inventory panel if (Input.GetKeyDown(NextInvKey) || Input.GetKeyDown(NextInvAltKey)) { if (_currentInventoryDisplay.GoToInventory(1) != null) { _currentInventoryDisplay = _currentInventoryDisplay.GoToInventory(1); } } // move if (Input.GetKeyDown(MoveKey) || Input.GetKeyDown(MoveAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { MoveWithKeyboardJoypad(); } } // equip or use if (Input.GetKeyDown(EquipOrUseKey) || Input.GetKeyDown(EquipOrUseAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { EquipOrUse(); } } // split if (Input.GetKeyDown(SplitKey) || Input.GetKeyDown(SplitAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { SplitItemStack(); } } // equip if (Input.GetKeyDown(EquipKey) || Input.GetKeyDown(EquipAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Equip(); } } // use if (Input.GetKeyDown(UseKey) || Input.GetKeyDown(UseAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Use(); } } // drop if (Input.GetKeyDown(DropKey) || Input.GetKeyDown(DropAltKey)) { if (!_inVendor && CurrentlySelectedInventorySlot != null) { CurrentlySelectedInventorySlot.Drop(); } } }
/// <summary> /// Move method supporting move between inventories /// </summary> protected virtual void MultiInventoryMove(bool keyboard) { //We have selected first slot and hit Move button if (_isMoving == false) { _slotFrom = CurrentlySelectedInventorySlot; _inventoryFrom = _slotFrom.ParentInventoryDisplay.TargetInventory; _indexFrom = _slotFrom.Index; _inventoryItemFrom = _inventoryFrom.Content[_indexFrom]; //selected slot has an item in it so we gather rest of item data like item quantity and change sprite to Moved so we can see what happened if (_inventoryItemFrom != null) { _quantityFrom = _inventoryItemFrom.Quantity; //now we store none selected slot sprite to change it after moving _oldSprite = CurrentlySelectedInventorySlot.GetComponent <Image>().sprite; //now we change the slot sprite to Moved _slotFrom.GetComponent <Image>().sprite = _slotFrom.MovedSprite; //and by setting _isMoving to "true" we can wait for next click on slot _isMoving = true; if (keyboard) { _useKeyboardJoypad = true; } } } //We have selected second slot else { _slotTo = CurrentlySelectedInventorySlot; _inventoryTo = _slotTo.ParentInventoryDisplay.TargetInventory; _indexTo = _slotTo.Index; _inventoryItemTo = _inventoryTo.Content[_indexTo]; if (_inventoryTo.name == _inventoryFrom.name) { if (_indexTo == _indexFrom) { return; } } //second clicked slot is empty so we add item to this inventory, move to desired slot and remove it from first one if (_inventoryItemTo == null) { //we change first selected slot sprite back to old sprite _slotFrom.GetComponent <Image>().sprite = _oldSprite; //we add item to selected inventory _inventoryTo.Content[_indexTo] = _inventoryItemFrom.Copy(); //we remove item from first inventory _inventoryFrom.DestroyItem(_indexFrom); _inventoryFrom.Content[_indexFrom] = null; } else { _quantityTo = _inventoryItemTo.Quantity; //we check if item is the same as we try to move if (_inventoryItemFrom.ItemName == _inventoryItemTo.ItemName) { //we check what is the rest free quantity to close the full sack int _restStack = _inventoryItemTo.MaximumStack - _quantityTo; //if quantity of our item we try to move in less or equal than free quantity if (_quantityFrom <= _restStack) { //we update quantity of our item _inventoryItemTo.Quantity = _inventoryItemTo.Quantity + _quantityFrom; //we remove item from first inventory _inventoryFrom.DestroyItem(_indexFrom); } //if quantity of our item we try to move is higher than free quantity else if (_quantityFrom > _restStack) { //we update quantity of our item to full stack _inventoryItemTo.Quantity = _inventoryItemTo.MaximumStack; //we check what's left after moving some items int _restToAddQuantity = _quantityFrom - _restStack; //if there is free slot in second inventory if (_inventoryTo.NumberOfFreeSlots >= 1) { //we need to find first free slot int _fistFreeSlot = FindFirstFreeSlot(_inventoryTo); //we add rest of item quantity to inventory as new item _inventoryTo.Content[_fistFreeSlot] = _inventoryItemFrom; _inventoryTo.Content[_fistFreeSlot].Quantity = _restToAddQuantity; //we remove item from first inventory _inventoryFrom.DestroyItem(_indexFrom); } //there is no free slots in second inventory else { //we reduce item quantity in first inventory _inventoryFrom.Content[_indexFrom].Quantity = _inventoryFrom.Content[_indexFrom].Quantity - _restStack; } } } else { //we need to create copy of item from first inventory InventoryItem _tempItemFrom = _inventoryItemFrom.Copy(); //we need to create copy of item from second inventory InventoryItem _tempItemTo = _inventoryItemTo.Copy(); //we remove item from first inventory _inventoryFrom.DestroyItem(_indexFrom); //we remove item from second inventory _inventoryTo.DestroyItem(_indexTo); //we add item from first inventory to second inventory _inventoryTo.Content[_indexTo] = _tempItemFrom.Copy(); //we add item from second inventory to first inventory _inventoryFrom.Content[_indexFrom] = _tempItemTo.Copy(); } } _isMoving = false; if (keyboard) { _useKeyboardJoypad = false; } MMInventoryEvent.Trigger(MMInventoryEventType.ContentChanged, null, _inventoryFrom.name, null, 0, 0); MMInventoryEvent.Trigger(MMInventoryEventType.ContentChanged, null, _inventoryTo.name, null, 0, 0); } }