示例#1
0
    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);
    }
示例#2
0
 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);
     }
 }
示例#3
0
    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);
                }
            }
        }
    }
示例#4
0
    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();
    }
示例#5
0
    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);
        }
    }
示例#6
0
    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);
    }
示例#7
0
 private void Awake() => DisplaySlot = GetComponent <DisplaySlot>();