public void OnEndDrag(PointerEventData eventData) { if (!CanBeDragged) { return; } // unhover all anchors foreach (CardAnchor anchor in hoveredAnchors) { anchor.OnCardDragUnhover(); } // attach to hovered anchor if it can accept this card CardAnchor anchorToDropOn = ClosestHoveredAnchor(); if (anchorToDropOn != null && anchorToDropOn.CanAttachCard(this)) { AttachToAnchor(anchorToDropOn); audioSource.PlayOneShot(PlaceClip); } else { AttachToAnchor(currentAnchor); audioSource.PlayOneShot(DropClip); } MoveToAnchor(); hoveredAnchors.Clear(); }
private void OnTriggerEnter2D(Collider2D collider) { CardAnchor anchor = collider.GetComponent <CardAnchor>(); if (anchor != null) { hoveredAnchors.Add(anchor); } }
private void OnTriggerExit2D(Collider2D collider) { CardAnchor anchor = collider.GetComponent <CardAnchor>(); if (anchor != null) { anchor.OnCardDragUnhover(); if (hoveredAnchors.Contains(anchor)) { hoveredAnchors.Remove(anchor); } } }
private CardAnchor ClosestHoveredAnchor() { CardAnchor closestHoveredAnchor = null; float closestDistance = float.MaxValue; foreach (CardAnchor anchor in hoveredAnchors) { float distanceToAnchor = Vector3.Distance(anchor.transform.position, transform.position); if (distanceToAnchor < closestDistance) { closestDistance = distanceToAnchor; closestHoveredAnchor = anchor; } } return(closestHoveredAnchor); }
public void OnDrag(PointerEventData eventData) { if (!CanBeDragged) { return; } transform.position = Input.mousePosition + mouseDragOffset; // highlight just the closest hovered card anchor CardAnchor closestHoveredAnchor = ClosestHoveredAnchor(); foreach (CardAnchor anchor in hoveredAnchors) { if (anchor == closestHoveredAnchor) { anchor.OnCardDragHover(this); } else { anchor.OnCardDragUnhover(); } } }
public void AttachToAnchor(CardAnchor anchor) { currentAnchor = anchor; anchor.OnAttachCard(this); }