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); }
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); }
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(); } } } } } }
public void SetItem(ItemCollectionSlotUIBase wrapper) { SetItem(wrapper.item); }
public abstract UIDragModel OnEndDrag(ItemCollectionSlotUIBase currentlyHoveringWrapper, PointerEventData eventData);
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);