//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; //от куда взял }
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); } }
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 } } }
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(); }
protected void SubscribeSlotEvents(BasicSlot _slot) { _slot.OnDropEvent += OnDrop; }