예제 #1
0
 public bool CanPlay()
 {
     foreach (ColorCard c in MyCards)
     {
         if (ColorGame.CheckCardMatch(topCard, c))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        if (player.isGameOver || isStatic)
        {
            return;
        }

        if (Input.touchCount == 1)
        {
            Touch t = Input.GetTouch(0);


            // Handle finger movements based on TouchPhase
            switch (t.phase)
            {
            //When a touch has first been detected, change the message and record the starting position
            case TouchPhase.Began:
                // Record initial touch position.
                startPos = t.position;
                break;

            //Determine if the touch is a moving touch
            case TouchPhase.Moved:
                // SWIPE FOR SCROLLING WHEEL
                // Determine direction by comparing the current touch position with the initial one
                direction = t.position - startPos;

                gameObject.transform.Rotate(0f, 0f, -t.deltaPosition.x / 10);

                if (gameObject.transform.rotation.z < 0f)
                {
                    gameObject.transform.rotation = Quaternion.Euler(0, 0, 0);
                }

                if (gameObject.transform.rotation.eulerAngles.z > (cardUIObjects.Count - 1) * CARD_ANGLE_INCREMENT)
                {
                    gameObject.transform.rotation = Quaternion.Euler(0, 0, (cardUIObjects.Count - 1) * CARD_ANGLE_INCREMENT);
                }

                currentRotationAngle = gameObject.transform.rotation.eulerAngles.z;
                MoveCardWheelZ();

                wasMoved = true;
                break;

            case TouchPhase.Ended:

                TapCount += 1;

                if (TapCount == 1)
                {
                    NewTime = Time.time + MaxDoubleTapTime;
                }
                else if (TapCount == 2 && Time.time <= NewTime)
                {
                    // Double tap detected
                    // Get current selected card object
                    ColorCard currentSelectedCard = addedCards[currentHighlightIndex];

                    // Check match with game rules
                    bool cardsMatch = ColorGame.CheckCardMatch(player.GetTopCard(), currentSelectedCard);

                    if (cardsMatch && player.HasTurn() && !player.MustDrawBeforePlaying())
                    {
                        // Send played card to server
                        player.PlayCard(currentSelectedCard);

                        // Remove the card from the wheel
                        RemoveCard(currentSelectedCard);

                        // Remove playing permission
                        player.SetTurn(false);
                    }
                    TapCount = 0;
                }

                else
                {
                    TapCount = 0;
                }

                wasMoved = false;
                break;
            }



            if (Time.time > NewTime)
            {
                TapCount = 0;
            }
        }


        if (Input.GetKeyDown(KeyCode.F))
        {
            // Double tap detected
            // Get current selected card object
            ColorCard currentSelectedCard = addedCards[currentHighlightIndex];

            // Check match with game rules
            bool cardsMatch = ColorGame.CheckCardMatch(player.GetTopCard(), currentSelectedCard);

            if (cardsMatch && player.HasTurn() && !player.MustDrawBeforePlaying())
            {
                // Send played card to server
                player.PlayCard(currentSelectedCard);

                // Remove the card from the wheel
                RemoveCard(currentSelectedCard);

                // Remove playing permission
                player.SetTurn(false);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Q))
        {
            currentRotationAngle -= CARD_ANGLE_INCREMENT;
            MoveCardWheelZ();
        }
        else if (Input.GetKeyDown(KeyCode.E))
        {
            currentRotationAngle += CARD_ANGLE_INCREMENT;
            MoveCardWheelZ();
        }
        else if (Input.GetKeyDown(KeyCode.D) && player.MustDrawBeforePlaying() && player.HasTurn())
        {
            player.DrawCards();
            MoveCardWheelZ();
        }

        if (cardUIObjects.Count != 0)
        {
            // Check card to highlight
            HighlightActiveCard();
        }
    }