protected virtual void InventoryUiDragUtilityOnOnStartDragging(InventoryUIDragLookup dragLookup, InventoryUIItemWrapperBase dragging, PointerEventData eventData) { if (dragging.item != null) { if (wrapper != null) { // Equippable character field if (equippableField != null) { var equippable = dragging.item as EquippableInventoryItem; if (equippable != null) { if (equippableField.equipTypes.Any(o => o == equippable.equipType)) { SetOutlineValues(); } } } else { if (wrapper.itemCollection != null) { var canSet = wrapper.itemCollection.filters.IsItemAbidingFilters(dragging.item); if (canSet) { SetOutlineValues(); } } } } } }
public override InventoryUIDragLookup OnBeginDrag(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { currentlyDragging = wrapper; dragLookup.Reset(); dragLookup.startIndex = (int) wrapper.index; dragLookup.startItemCollection = wrapper.itemCollection; return dragLookup; }
public override bool CanUse(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { if (Application.isMobilePlatform) { if (eventData.pointerId != -1 && Input.touchCount > 0) { return true; // Mobile drag } } return false; }
public override InventoryUIDragLookup OnEndDrag(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { if (currentlyDragging == null) return dragLookup; if (wrapper != null) { dragLookup.endIndex = (int)wrapper.index; dragLookup.endItemCollection = wrapper.itemCollection; } UnityEngine.Object.Destroy(currentlyDragging.gameObject); // No longer need it, destroy currentlyDragging = null; return dragLookup; }
/// <summary> /// Creates a draggable object. /// </summary> /// <param name="from"></param> /// <returns></returns> public static InventoryUIItemWrapperBase CreateDragObject(InventoryUIItemWrapperBase from) { var copy = GameObject.Instantiate<InventoryUIItemWrapperBase>(from); copy.index = from.index; copy.itemCollection = from.itemCollection; copy.item = from.item; var copyComp = copy.GetComponent<RectTransform>(); copyComp.SetParent(InventorySettingsManager.instance.guiRoot.transform); copyComp.transform.localPosition = new Vector3(copyComp.transform.localPosition.x, copyComp.transform.localPosition.y, 0.0f); copyComp.sizeDelta = from.GetComponent<RectTransform>().sizeDelta; // 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; }
public static InventoryUIDragLookup OnBeginDrag(InventoryUIItemWrapperBase 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; }
/// <summary> /// Grab the best suited handler for dragging. /// </summary> /// <param name="wrapper"></param> /// <param name="eventData"></param> /// <returns></returns> private static InventoryItemWrapperDragHandlerBase FindBestDragHandler(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { InventoryItemWrapperDragHandlerBase best = null; foreach (var handler in dragHandlers) { if (handler.CanUse(wrapper, eventData) && (best == null || handler.priority > best.priority)) best = handler; } return best; }
public abstract InventoryUIDragLookup OnEndDrag(InventoryUIItemWrapperBase currentlyHoveringWrapper, PointerEventData eventData);
public abstract InventoryUIDragLookup OnBeginDrag(InventoryUIItemWrapperBase wrapperToDrag, PointerEventData eventData);
/// <summary> /// Can this handler be used to drag an item? Return true if allowed to use, false if not. /// </summary> public abstract bool CanUse(InventoryUIItemWrapperBase wrapper, PointerEventData eventData);
public static bool CanReceiveInput(InventoryUIItemWrapperBase wrapper) { if (wrapper == null) return false; return CanReceiveInput(wrapper.gameObject); }
public override InventoryUIDragLookup OnEndDrag(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { return base.OnEndDrag(wrapper, eventData); }
private void OnStartDragging(InventoryUIDragLookup dragLookup, InventoryUIItemWrapperBase dragging, PointerEventData eventData) { TryShow(); }
public override bool CanUse(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { return eventData.button == PointerEventData.InputButton.Left; }
protected virtual void InventoryUiDragUtilityOnOnEndDragging(InventoryUIDragLookup dragLookup, InventoryUIItemWrapperBase dragging, PointerEventData eventData) { RemoveOutlineValues(); }
private void OnEndDragging(InventoryUIDragLookup dragLookup, InventoryUIItemWrapperBase dragging, PointerEventData eventData) { Hide(); if (eventData.hovered.Contains(gameObject)) { if (dragLookup.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 (triggerWhenDroppedOnWrapper == false) { foreach (var o in eventData.hovered) { var wrapper = o.GetComponent<InventoryUIItemWrapperBase>(); if (wrapper != null) { droppedOnEquipSlot = true; break; } } } if (droppedOnEquipSlot == false) { var item = dragLookup.startItemCollection[dragLookup.startIndex].item; iCollection.AcceptDragItem(item); //Debug.Log("Dragged from other collection " + item.name); } } } }
public override bool CanUse(InventoryUIItemWrapperBase wrapper, PointerEventData eventData) { return InventorySettingsManager.instance.unstackKeys.AllPressed(eventData, InventoryActionInput.EventType.All); }