示例#1
0
    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();
    }
示例#2
0
    private void OnTriggerEnter2D(Collider2D collider)
    {
        CardAnchor anchor = collider.GetComponent <CardAnchor>();

        if (anchor != null)
        {
            hoveredAnchors.Add(anchor);
        }
    }
示例#3
0
    private void OnTriggerExit2D(Collider2D collider)
    {
        CardAnchor anchor = collider.GetComponent <CardAnchor>();

        if (anchor != null)
        {
            anchor.OnCardDragUnhover();
            if (hoveredAnchors.Contains(anchor))
            {
                hoveredAnchors.Remove(anchor);
            }
        }
    }
示例#4
0
    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);
    }
示例#5
0
    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();
            }
        }
    }
示例#6
0
 public void AttachToAnchor(CardAnchor anchor)
 {
     currentAnchor = anchor;
     anchor.OnAttachCard(this);
 }