コード例 #1
0
    //items slots
    protected virtual void onBeginDrag(BasicItem _item, PointerEventData _eventData)
    {
        draggableItem = _item;
        //я не могу перетаскивать объекты которых нету
        iCanDrag = !draggableItem.IsEmpty();

        if (!iCanDrag)
        {
            return;
        }
        isDrag = true;


        bufferItem.transform.position = _eventData.pointerCurrentRaycast.worldPosition;
        bufferItem.Item = draggableItem.Item;

        indexTake = slots.FindIndex(x => x.currentItem == draggableItem);

        RemoveItem(draggableItem.Item);
        draggableItem.Dispose();

        NormalizedContainerBySlots();

        BasicSlot slot = _item.GetComponentInParent <BasicSlot>();

        indexThrow = slots.FindIndex(x => x == slot);
        slots[indexThrow].SetActiveRightHover(true);

        InventoryOverseer._instance.from = this;        //от куда взял
    }
コード例 #2
0
    protected virtual void Start()
    {
        foreach (Transform child in transform)
        {
            BasicSlot slot = child.GetComponent <BasicSlot>();
            slots.Add(slot);
        }
        FindBuffer();
        InventoryOverseer._instance.allContainers.Add(this);
        Setup(slots);

        foreach (Item item in startItems)         //заполнение предметами
        {
            AddItem(item);
        }
    }
コード例 #3
0
    protected override void PointerEnter(BasicItem _item, PointerEventData _eventData)
    {
        if (isDrag && !bufferItem.IsEmpty())                       //если буфер не пуст
        {
            if (!isFull() || InventoryOverseer._instance.Verify()) //если контэйнер не полон или это тот контейнер откуда взяли
            {
                hoverSlot  = _item.GetComponentInParent <BasicSlot>();
                indexThrow = slots.FindIndex(x => x == hoverSlot);

                if (hoverSlot.IsEmpty() == false)                  //если слот на который навели не пуст
                //когда драгаешь сам на себя переходит в конец контэйнера
                {
                    if ((indexThrow + 1) % width == 0)                        //если навёл на последний элемент в строке
                    {
                        slots[indexThrow + 1].SetActiveLeftHover(true);       //то подсвечиваем на новой строке
                    }
                    else
                    {
                        hoverSlot.SetActiveRightHover(true);                        //то подсвечиваем право для вставки
                    }
                }
                else                    //если навёл на пустую ячейку, то подсветка самого последнего или первого
                {
                    if (isEmpty())      //если контэйнер пуст то подсвечивается первый слот
                    {
                        slots[0].SetActiveLeftHover(true);
                    }
                    else                      //или же последний
                    {
                        if (items.Count % width == 0)
                        {
                            slots[items.Count].SetActiveLeftHover(true);                            //не уверен
                        }
                        else
                        {
                            slots[items.Count - 1].SetActiveRightHover(true);
                        }
                    }
                }
            }
            else
            {
                //IsFull
            }
        }
    }
コード例 #4
0
    private void OnDrop(BasicSlot _slot, PointerEventData _eventData)      //нельзя переобределять, тк функция OnDrop должна быть на каждом слоте
    {
        if (bufferItem.IsEmpty())
        {
            return;
        }
        InventoryOverseer._instance.to = this;        //куда положил
        Container to = this;

        if (!InventoryOverseer._instance.Verify() && !InventoryOverseer._instance.VerumTake(to)) //если перетащили в другой контейнер то добавили
        {
            if (indexThrow != -1)                                                                //если хотим добваить
            {
                if (!to.isFull())
                {
                    if (to.slots[indexThrow].IsEmpty())
                    {
                        to.AddItem(bufferItem.Item);                        //добавляем в конец
                    }
                    else
                    {
                        to.InsertItemTo(bufferItem.Item);
                    }
                }
            }
            else
            {
                print("+");
            }
        }
        else
        {
            return;
        }

        isDrag = false;

        HightLightOff();
    }
コード例 #5
0
 protected void SubscribeSlotEvents(BasicSlot _slot)
 {
     _slot.OnDropEvent += OnDrop;
 }