// Picks this item and adds it to the target inventory specified as a parameter public virtual void Pick(string targetInventoryName) { FindTargetInventory(targetInventoryName); if (_targetInventory == null) { return; } if (!Pickable()) { PickFail(); return; } DetermineMaxQuantity(); if (!Application.isPlaying) { _targetInventory.AddItem(Item, 1); } else { InventoryEvent.Trigger(InventoryEventType.Pick, null, Item.TargetInventoryName, Item, _pickedQuantity, 0); } if (Item.Pick()) { Quantity = Quantity - _pickedQuantity; PickSuccess(); DisableObjectIfNeeded(); } }
/// <summary> /// Unequip this item if possible. /// </summary> public virtual void UnEquip() { if (!SlotEnabled) { return; } InventoryEvent.Trigger(InventoryEventType.UnEquipRequest, this, ParentInventoryDisplay.TargetInventoryName, ParentInventoryDisplay.TargetInventory.Content[Index], 0, Index); }
/// <summary> /// When that slot gets selected (via a mouse over or a touch), triggers an event for other classes to act on /// </summary> /// <param name="eventData">Event data.</param> public override void OnSelect(BaseEventData eventData) { base.OnSelect(eventData); if (ParentInventoryDisplay != null) { InventoryItem item = ParentInventoryDisplay.TargetInventory.Content[Index]; InventoryEvent.Trigger(InventoryEventType.Select, this, ParentInventoryDisplay.TargetInventoryName, item, 0, Index); } }
/// <summary> /// When that slot gets clicked, triggers an event for other classes to act on /// </summary> public virtual void SlotClicked() { if (ParentInventoryDisplay != null) { InventoryItem item = ParentInventoryDisplay.TargetInventory.Content[Index]; InventoryEvent.Trigger(InventoryEventType.Click, this, ParentInventoryDisplay.TargetInventoryName, item, 0, Index); // if we're currently moving an object if (ParentInventoryDisplay.CurrentlyBeingMovedItemIndex != -1) { Move(); } } }
/// <summary> /// Drops this item. /// </summary> public virtual void Drop() { if (!SlotEnabled) { return; } if (InventoryItem.IsNull(ParentInventoryDisplay.TargetInventory.Content[Index])) { InventoryEvent.Trigger(InventoryEventType.Error, this, ParentInventoryDisplay.TargetInventoryName, null, 0, Index); return; } if (ParentInventoryDisplay.TargetInventory.Content[Index].Drop()) { ParentInventoryDisplay.CurrentlyBeingMovedItemIndex = -1; InventoryEvent.Trigger(InventoryEventType.Drop, this, ParentInventoryDisplay.TargetInventoryName, ParentInventoryDisplay.TargetInventory.Content[Index], 0, Index); } }
/// <summary> /// Selects the item in this slot for a movement, or moves the currently selected one to that slot /// This will also swap both objects if possible /// </summary> public virtual void Move() { if (!SlotEnabled) { return; } // if we're not already moving an object if (ParentInventoryDisplay.CurrentlyBeingMovedItemIndex == -1) { // if the slot we're on is empty, we do nothing if (InventoryItem.IsNull(ParentInventoryDisplay.TargetInventory.Content[Index])) { InventoryEvent.Trigger(InventoryEventType.Error, this, ParentInventoryDisplay.TargetInventoryName, null, 0, Index); return; } if (ParentInventoryDisplay.TargetInventory.Content[Index].CanMoveObject) { // we change the background image GetComponent <Image>().sprite = ParentInventoryDisplay.MovedSlotImage; ParentInventoryDisplay.CurrentlyBeingMovedItemIndex = Index; } } // if we ARE moving an object else { // we move the object to a new slot. if (!ParentInventoryDisplay.TargetInventory.MoveItem(ParentInventoryDisplay.CurrentlyBeingMovedItemIndex, Index)) { // if the move couldn't be made (non empty destination slot for example), we play a sound InventoryEvent.Trigger(InventoryEventType.Error, this, ParentInventoryDisplay.TargetInventoryName, null, 0, Index); } else { // if the move could be made, we reset our currentlyBeingMoved pointer ParentInventoryDisplay.CurrentlyBeingMovedItemIndex = -1; InventoryEvent.Trigger(InventoryEventType.Move, this, ParentInventoryDisplay.TargetInventoryName, ParentInventoryDisplay.TargetInventory.Content[Index], 0, Index); } } }