Exemple #1
0
        public void SetItem(ItemCollectionSlotUIBase wrapper)
        {
            if (wrapper.item != null)
            {
                if (selectedItem != null)
                {
                    // Do out animation on previous
                    onHideActions.Invoke();
                    RemovePreviewItem(selectedItem);
                }

                selectedItem = Instantiate <InventoryItemBase>(wrapper.item);
                selectedItem.currentStackSize = wrapper.item.currentStackSize;


                AudioManager.AudioPlayOneShot(onSelectAudioClip);


                itemDetailsRoot.gameObject.SetActive(selectedItem != null);

                onShowActions.Invoke();
                SetPreviewObject(selectedItem);
                Repaint(selectedItem);
            }
        }
        /// <summary>
        /// Creates a draggable object.
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static ItemCollectionSlotUIBase CreateDragObject(ItemCollectionSlotUIBase from)
        {
            var copy = UnityEngine.Object.Instantiate <ItemCollectionSlotUIBase>(from);

            copy.index          = from.index;
            copy.itemCollection = from.itemCollection;
            copy.item           = from.item;

            var copyComp = copy.GetComponent <RectTransform>();

            copyComp.SetParent(InventoryManager.instance.uiRoot.transform);
            copyComp.transform.localPosition = new Vector3(copyComp.transform.localPosition.x, copyComp.transform.localPosition.y, 0.0f);
            copyComp.localScale = Vector3.one;
            copyComp.sizeDelta  = from.GetComponent <RectTransform>().sizeDelta;

            float singleSize = copyComp.sizeDelta.x / copy.item.layoutSizeCols;
            float halfSize   = singleSize / 2f;

            copyComp.pivot = new Vector2(halfSize / copyComp.sizeDelta.x, (copyComp.sizeDelta.y - halfSize) / copyComp.sizeDelta.y);

            // Canvas group allows object to ignore raycasts.
            var group = copyComp.gameObject.GetComponent <CanvasGroup>();

            if (group == null)
            {
                group = copyComp.gameObject.AddComponent <CanvasGroup>();
            }

            group.blocksRaycasts = false; // Allows rays to go through so we can hover over the empty slots.
            group.interactable   = false;

            return(copy);
        }
        private void OnEndDragging(UIDragModel dragModel, ItemCollectionSlotUIBase dragging, PointerEventData eventData)
        {
            Hide();

            if (eventData.hovered.Contains(gameObject))
            {
                if (dragModel.startItemCollection != collection)
                {
                    // As long as the player didn't directly drop it on a wrapper object, we can auto. equip it to the right slot.
                    bool droppedOnEquipSlot = false;
                    if (triggerWhenDroppedOnSlot == false)
                    {
                        foreach (var o in eventData.hovered)
                        {
                            var wrapper = o.GetComponent <ItemCollectionSlotUIBase>();
                            if (wrapper != null)
                            {
                                droppedOnEquipSlot = true;
                                break;
                            }
                        }
                    }

                    if (droppedOnEquipSlot == false)
                    {
                        var item = dragModel.startItemCollection[dragModel.startIndex].item;
                        iCollection.AcceptDragItem(item);

                        //Debug.Log("Dragged from other collection " + item.name);
                    }
                }
            }
        }
        public override UIDragModel OnBeginDrag(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
        {
            currentlyDragging = wrapper;
            _currentlyDraggingRectTransform = wrapper.gameObject.GetComponent <RectTransform>();
            dragModel.Reset();

            dragModel.startIndex          = (int)wrapper.index;
            dragModel.startItemCollection = wrapper.itemCollection;

            return(dragModel);
        }
Exemple #5
0
        public override bool CanUse(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
        {
            if (Application.isMobilePlatform)
            {
                if (eventData.pointerId != -1 && Input.touchCount > 0)
                {
                    return(true); // Mobile drag
                }
            }

            return(false);
        }
        /// <summary>
        /// Grab the best suited handler for dragging.
        /// </summary>
        /// <param name="wrapper"></param>
        /// <param name="eventData"></param>
        /// <returns></returns>
        private static DragHandlerBase FindBestDragHandler(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
        {
            DragHandlerBase best = null;

            foreach (var handler in dragHandlers)
            {
                if (handler.CanUse(wrapper, eventData) && (best == null || handler.priority > best.priority))
                {
                    best = handler;
                }
            }

            return(best);
        }
        public override UIDragModel OnEndDrag(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
        {
            if (currentlyDragging == null)
            {
                return(dragModel);
            }

            if (wrapper != null)
            {
                dragModel.endIndex          = (int)wrapper.index;
                dragModel.endItemCollection = wrapper.itemCollection;
            }

            UnityEngine.Object.Destroy(currentlyDragging.gameObject); // No longer need it, destroy
            currentlyDragging = null;

            return(dragModel);
        }
        public static UIDragModel OnBeginDrag(ItemCollectionSlotUIBase originalWrapper, PointerEventData eventData)
        {
            if (draggingItem != null)
            {
                Debug.LogWarning("Item still attached to cursor, can only drag one item at a time", draggingItem.gameObject);
                return(null); // Can only drag one item at a time
            }

            currentDragHandler = FindBestDragHandler(originalWrapper, eventData);
            if (currentDragHandler == null)
            {
                return(null);
            }

            var toDrag = CreateDragObject(originalWrapper);
            var lookup = currentDragHandler.OnBeginDrag(toDrag, eventData);

            if (OnStartDragging != null)
            {
                OnStartDragging(lookup, toDrag, eventData);
            }

            return(lookup);
        }
Exemple #9
0
 public override bool CanUse(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
 {
     return(InventorySettingsManager.instance.settings.unstackKeys.AllPressed(eventData, InventoryActionInput.EventType.All));
 }
 public override bool CanUse(ItemCollectionSlotUIBase wrapper, PointerEventData eventData)
 {
     return(eventData.button == PointerEventData.InputButton.Left);
 }
 public abstract UIDragModel OnBeginDrag(ItemCollectionSlotUIBase wrapperToDrag, PointerEventData eventData);
 private void OnStartDragging(UIDragModel dragModel, ItemCollectionSlotUIBase dragging, PointerEventData eventData)
 {
     TryShow();
 }
 protected virtual void InventoryUiDragUtilityOnOnEndDragging(UIDragModel dragModel, ItemCollectionSlotUIBase dragging, PointerEventData eventData)
 {
     RemoveOutlineValues();
 }
 protected virtual void InventoryUiDragUtilityOnOnStartDragging(UIDragModel dragModel, ItemCollectionSlotUIBase dragging, PointerEventData eventData)
 {
     if (dragging.item != null)
     {
         if (slot != null)
         {
             // Equippable character field
             if (equippableSlot != null)
             {
                 var equippable = dragging.item as EquippableInventoryItem;
                 if (equippable != null)
                 {
                     if (equippableSlot.equipmentTypes.Any(o => o == equippable.equipmentType))
                     {
                         SetOutlineValues();
                     }
                 }
             }
             else
             {
                 if (slot.itemCollection != null)
                 {
                     var canSet = slot.itemCollection.filters.IsItemAbidingFilters(dragging.item);
                     if (canSet)
                     {
                         SetOutlineValues();
                     }
                 }
             }
         }
     }
 }
Exemple #15
0
 public void SetItem(ItemCollectionSlotUIBase wrapper)
 {
     SetItem(wrapper.item);
 }
 public abstract UIDragModel OnEndDrag(ItemCollectionSlotUIBase currentlyHoveringWrapper, PointerEventData eventData);
Exemple #17
0
 protected virtual void Awake()
 {
     _wrapper = GetComponent <ItemCollectionSlotUIBase>();
 }
 /// <summary>
 /// Can this handler be used to drag an item? Return true if allowed to use, false if not.
 /// </summary>
 public abstract bool CanUse(ItemCollectionSlotUIBase wrapper, PointerEventData eventData);