private void AddItem(DisplaySlot slot, int addAmount) { bool empty = slot.CurrentSlot.IsEmpty; bool sameItem = slot.CurrentSlot.IsSameItemType(HoldingSlot.Item.Info); if (!empty && !sameItem) { return; } if (HoldingSlot == null) { return; } Inventory inventory = slot.Inventory; bool canAdd = inventory.IsItemTypeAllowed(HoldingSlot.Item) && !inventory.IsFullForItemType(HoldingSlot.Item.Info); if (!canAdd) { return; } inventory.AddToSlot(HoldingSlot.Item, slot.CurrentSlot, addAmount); lastItemSlot = slot; grabDisplay.Setup(playerInventory.CompoundedInventory, HoldingSlot); }
private void Start() { foreach (Slot slot in inventoryReference.Slots) { DisplaySlot displaySlot = Instantiate(displaySlotPrefab, Vector2.zero, Quaternion.identity, group.transform); RectTransform rectTransform = displaySlot.gameObject.GetComponent <RectTransform>(); rectTransform.sizeDelta = group.cellSize; displaySlot.Setup(inventoryReference, slot); } }
private void UpdateDragging() { DisplaySlot hoveringDisplaySlot = DisplaySlotDragBehaviour.currentSelectedDragable?.DisplaySlot; bool selectedASlot = hoveringDisplaySlot != null; bool hoveringOverUI = EventSystem.current.IsPointerOverGameObject() || selectedASlot; if (Input.GetMouseButtonDown(0)) { if (!hoveringOverUI) { Drop(); return; } if (selectedASlot) { if (!Dragging) { GrabItem(hoveringDisplaySlot); } else { PlaceItem(hoveringDisplaySlot); } } } if (Input.GetMouseButtonDown(1)) { if (!hoveringOverUI) { Drop(1); return; } if (selectedASlot) { int half = Mathf.CeilToInt(hoveringDisplaySlot.CurrentSlot.Amount / 2f); if (!Dragging) { GrabItem(hoveringDisplaySlot, half); } else { AddItem(hoveringDisplaySlot, 1); } } } }
private void GrabItem(DisplaySlot displaySlot, int grabAmount = 0) { lastItemSlot = displaySlot; Slot newSlot = displaySlot.CurrentSlot; Item item = newSlot.Item; if (item.IsEmpty) { return; } Inventory inventory = displaySlot.Inventory; HoldingSlot.SetItem(item.Transfer(grabAmount)); grabDisplay.Setup(playerInventory.CompoundedInventory, HoldingSlot); inventory.OnChanged?.Invoke(); }
private void PlaceItem(DisplaySlot slot, int placeAmount = -1) { bool empty = slot.CurrentSlot.IsEmpty; bool sameItem = slot.CurrentSlot.IsSameItemType(HoldingSlot.Item.Info); Inventory inventory = slot.Inventory; if (!inventory.IsItemTypeAllowed(HoldingSlot.Item.Clone().Transfer(placeAmount))) { return; } if (empty || sameItem && !slot.CurrentSlot.IsFull) { AddItem(slot, placeAmount); } else { SwapWithHand(slot); } }
private void SwapWithHand(DisplaySlot displaySlot) { if (HoldingSlot == null) { return; } Inventory inventory = displaySlot.Inventory; if (!inventory.IsItemTypeAllowed(HoldingSlot.Item)) { return; } Item placingItem = displaySlot.CurrentSlot.Item.Transfer(); Item handItem = HoldingSlot.Item.Transfer(); inventory.AddToSlot(handItem, displaySlot.CurrentSlot); HoldingSlot.SetItem(placingItem.Transfer()); grabDisplay.Setup(playerInventory.CompoundedInventory, HoldingSlot); }
private void Awake() => DisplaySlot = GetComponent <DisplaySlot>();