Example #1
0
    // Update is called once per frame
    void Update()
    {
        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics2D.OverlapPoint(mousePos) == myCollider)
            {
                this.StartDrag(mousePos);
            }
        }
        else if (Input.GetMouseButtonUp(0) && this.mouseOffset.IsValid)
        {
            // Set our sorting order based on the sorting orders
            // of anything beneath us.
            setOrderInLayer();

            this.mouseOffset = new OptionalVector2(); // i.e. no longer valid
        }
        else if (Input.GetMouseButton(0) && this.mouseOffset.IsValid)
        {
            var adjustedPositon = mousePos - this.mouseOffset.Vector;
            this.transform.position = new Vector3(
                adjustedPositon.x,
                adjustedPositon.y,
                transform.position.z
                );
        }
    }
    public void StartDrag(Vector2 mousePos)
    {
        var xyPos = new Vector2(this.transform.position.x, this.transform.position.y);

        this.mouseOffset = new OptionalVector2(mousePos - xyPos);
        print(string.Format("Mouse down while mouse over card! Mouse offset = {0}", mouseOffset));
        this.currentLayerID = SortingLayer.NameToID("Moving");
    }
    // Start is called before the first frame update
    void Start()
    {
        // this.myRenderer = this.GetComponent<SpriteRenderer>();
        this.myCollider          = this.GetComponent <Collider2D>();
        this.mouseOffset         = new OptionalVector2(); // i.e. not valid
        this.currentSortingOrder = front.sortingOrder;
        this.currentLayerID      = front.sortingLayerID;
        this.defaultLayerID      = this.currentLayerID;

        this.front.enabled = flippedOver;
        this.back.enabled  = !flippedOver;
    }
Example #4
0
 // Start is called before the first frame update
 void Start()
 {
     myCollider       = GetComponent <Collider2D>();
     mySpriteRenderer = GetComponent <SpriteRenderer>();
     if (myCollider == null || mySpriteRenderer == null)
     {
         Debug.LogError("Token object MUST have collider and sprite renderer!");
         return;
     }
     this.mouseOffset    = new OptionalVector2(); // i.e. not valid
     this.currentLayerID = mySpriteRenderer.sortingLayerID;
     this.defaultLayerID = this.currentLayerID;
 }
    // Update is called once per frame
    void Update()
    {
        // Don't do anything if the card is part of a deck.
        var deckBehaviour = GetComponentInParent <DeckBehaviour>();

        if (deckBehaviour != null)
        {
            return;
        }
        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (Input.GetMouseButtonDown(0))
        {
            if (Physics2D.OverlapPoint(mousePos) == myCollider)
            {
                this.StartDrag(mousePos);
            }
        }
        else if (Input.GetMouseButtonUp(0) && this.mouseOffset.IsValid)
        {
            SetOrderInLayer();

            this.mouseOffset = new OptionalVector2(); // i.e. no longer valid
        }
        else if (Input.GetMouseButton(0) && this.mouseOffset.IsValid)
        {
            var adjustedPositon = mousePos - this.mouseOffset.Vector;
            this.transform.position = new Vector3(
                adjustedPositon.x,
                adjustedPositon.y,
                transform.position.z
                );
        }


        if (Input.GetButtonDown("Flip"))
        {
            if (Physics2D.OverlapPoint(mousePos) == myCollider)
            {
                this.flippedOver = !this.flippedOver;
            }
        }

        if (Input.GetButtonDown("Replace"))
        {
            if (Physics2D.OverlapPoint(mousePos) == myCollider)
            {
                print("replace button pressed.");
                // action is not valid if the card is not in collision with a deck
                var overlapResults = new List <Collider2D>();
                var contactFilter  = new ContactFilter2D();
                var numOverlaps    = this.myCollider.OverlapCollider(contactFilter.NoFilter(), overlapResults);
                if (numOverlaps == 0)
                {
                    print("Not overlapping with anything.");
                }
                else
                {
                    DeckBehaviour deck = null;
                    foreach (Collider2D collider in overlapResults)
                    {
                        var parent = collider.transform.parent;
                        if (parent != null)
                        {
                            deck = parent.GetComponent <DeckBehaviour>();
                            if (deck != null)
                            {
                                break;
                            }
                        }
                    }
                    if (deck == null)
                    {
                        print("Not overlapping with deck.");
                    }
                    else
                    {
                        print(string.Format("About to reattach to deck {0}", deckBehaviour));
                        // tell the deck to take us
                        deck.RestoreCard(transform);
                        // set our parent to the deck
                        transform.parent   = deck.transform;
                        transform.position = deck.transform.position;
                        flippedOver        = false;
                        // reshuffle the deck
                        deck.Shuffle();
                    }
                }
            }
        }

        this.front.enabled = flippedOver;
        this.back.enabled  = !flippedOver;

        // Ensure front and back faces are consistent with this card's sorting position
        this.front.sortingLayerID = this.currentLayerID;
        this.front.sortingOrder   = this.currentSortingOrder;

        this.back.sortingLayerID = this.currentLayerID;
        this.back.sortingOrder   = this.currentSortingOrder;
    }