Пример #1
0
 bool moveCardFromCollectionToDeck(DeckEditorCardObject deco)
 {
     // Forbid if the deck is full, the card is locked,
     // or if this could cause the player to be left with less than 15 cards
     if ((deckView && Player.deck.cards.Count >= 15) || (!deckView && deco.card.isLocked) ||
         (!deckView && (Player.collection.Count + Player.deck.cards.Count <= 15)))
     {
         AudioManager.amInstance.playBuzz();
         return(false);
     }
     else
     {
         if (deckView)
         {
             Player.deck.cards.Add(deco.card);
         }
         else
         {
             cardsToSell.Add(deco.card);
         }
         Player.collection.Remove(deco.card);
         updateHUDAfterMovement(deco, Origin.DECK);
         return(true);
     }
 }
Пример #2
0
    void updateHUDAfterMovement(DeckEditorCardObject movedDeco, Origin newOrigin)
    {
        // Sort
        Player.collection = Card.orderCards(Player.collection);
        if (deckView)
        {
            Player.deck.cards = Card.orderCards(Player.deck.cards);
        }
        else
        {
            cardsToSell = Card.orderCards(cardsToSell);
        }

        // Get origin/index info
        List <Card> newOriginList = (newOrigin == Origin.COLLECTION) ? Player.collection :
                                    (deckView) ? Player.deck.cards : cardsToSell;
        int nthPosition = newOriginList.IndexOf(movedDeco.card);

        // Update data for recently moved card with new origin
        movedDeco.initialize(movedDeco.card, newOrigin);
        Transform newPanel = (newOrigin == Origin.COLLECTION) ? collectionPanel : deckPanel;

        movedDeco.transform.SetParent(newPanel);
        movedDeco.transform.SetSiblingIndex(nthPosition);
        movedDeco.GetComponent <RectTransform>().localScale = Vector3.one;
        StartCoroutine(changeColliderSizeAfterOneFrame(movedDeco.gameObject));

        updateHUD();
    }
Пример #3
0
 bool moveCardFromDeckToCollection(DeckEditorCardObject deco)
 {
     Player.collection.Add(deco.card);
     if (deckView)
     {
         Player.deck.cards.Remove(deco.card);
     }
     else
     {
         cardsToSell.Remove(deco.card);
     }
     updateHUDAfterMovement(deco, Origin.COLLECTION);
     return(true);
 }
Пример #4
0
    public void moveAllToSell()
    {
        List <DeckEditorCardObject> decoList = new List <DeckEditorCardObject>();

        foreach (Transform child in collectionPanelRectTr)
        {
            DeckEditorCardObject deco = child.GetComponent <DeckEditorCardObject>();
            if (deco != null && !deco.card.isLocked)
            {
                decoList.Add(deco);
            }
        }
        foreach (DeckEditorCardObject deco in decoList)
        {
            moveCardBetweenCollectionAndDeck(deco);
        }
    }
Пример #5
0
    IEnumerator moveCardAnimation(DeckEditorCardObject deco, Vector2 oldLocalCardPosition)
    {
        if (deco.gameObject.GetComponent <Canvas>() != null) // If it is already moving (has a canvas), skip
        {
            yield break;
        }

        Transform cardTr     = deco.transform;
        Canvas    cardCanvas = deco.gameObject.AddComponent <Canvas>();

        cardCanvas.overrideSorting = true;
        cardCanvas.sortingOrder    = 10;

        float upperScreenLimit = Screen.height * 0.9f;
        float lowerScreenLimit = (deco.origin == Origin.COLLECTION || deckView) ?
                                 Screen.height * 0.2f : Screen.height * 0.4f;

        float speed          = 2000f;
        float transitionTime = Vector2.Distance(oldLocalCardPosition, deco.nextDestination) / speed;
        float timer          = 0;

        while (timer < transitionTime)
        {
            cardTr.localPosition = Vector3.Lerp(oldLocalCardPosition, deco.nextDestination, timer / transitionTime);
            float cardScreenPosition = RectTransformUtility.WorldToScreenPoint(cam, cardTr.position).y;
            if (cardScreenPosition < lowerScreenLimit || cardScreenPosition > upperScreenLimit) // If not inside the viewport
            {
                Destroy(cardCanvas);
                cardTr.localPosition = deco.nextDestination;
                yield break;
            }

            timer += Time.deltaTime;
            yield return(null);
        }
        Destroy(cardCanvas);
        cardTr.localPosition = deco.nextDestination;
    }
Пример #6
0
    public void moveCardBetweenCollectionAndDeck(DeckEditorCardObject deco)
    {
        // Get data
        int    oldCardIndex;
        Card   card      = deco.card;
        Origin oldOrigin = deco.origin;
        bool   cardMoved;

        Vector2 oldLocalCardPosition = (oldOrigin == Origin.COLLECTION) ?
                                       deckPanel.InverseTransformPoint(deco.transform.position) :
                                       collectionPanel.InverseTransformPoint(deco.transform.position);

        // Move card
        if (oldOrigin == Origin.COLLECTION)
        {
            oldCardIndex = Player.collection.IndexOf(card);
            cardMoved    = moveCardFromCollectionToDeck(deco);
        }
        else
        {
            oldCardIndex = (deckView) ? Player.deck.cards.IndexOf(card) : cardsToSell.IndexOf(card);
            cardMoved    = moveCardFromDeckToCollection(deco);
        }

        if (!cardMoved)
        {
            return;
        }

        StartCoroutine(moveCardAnimation(deco, oldLocalCardPosition));

        if (Player.keyboardModeOn)
        {
            selectClosestButton(oldCardIndex, oldOrigin);
        }
    }
Пример #7
0
 public void lockCard(DeckEditorCardObject deco)
 {
     deco.card.isLocked = !deco.card.isLocked;
     CardImageManager.ciInstance.updateImage(deco.gameObject, deco.card.cardEffect);
     orderCollectionAsAGrid();
 }
Пример #8
0
    private void Update()
    {
        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);

            // If a finger touches the screen, detect if there's a card there
            if (touch.phase == TouchPhase.Began)
            {
                Vector2      worldPoint   = cam.ScreenToWorldPoint(touch.position);
                RaycastHit2D raycastHit2D = Physics2D.Raycast(worldPoint, Vector3.forward);
                if (gameObject.name == "BattleManager")
                {
                    // If it finds a gameObject with a CardObject component that is interactable
                    if (raycastHit2D.collider != null && raycastHit2D.collider.GetComponent <CardObject>() != null &&
                        raycastHit2D.collider.gameObject.GetComponent <Button>().interactable)
                    {
                        selectedCard = raycastHit2D.collider.gameObject;
                    }
                }
                else if (gameObject.name == "DeckEditor")
                {
                    // If it finds a gameObject with a DeckEditorCardObject component
                    if (raycastHit2D.collider != null && raycastHit2D.collider.GetComponent <DeckEditorCardObject>() != null)
                    {
                        selectedCard = raycastHit2D.collider.gameObject;
                    }
                }
            }

            // Restart or advance timer
            if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved)
            {
                stationaryTouchTime = 0;
            }
            else if (touch.phase == TouchPhase.Stationary)
            {
                stationaryTouchTime += Time.deltaTime;
            }

            // Check for doubletaps
            doubleTap = (touch.tapCount > 1);

            // On finger lift, get slide direction
            if (touch.phase == TouchPhase.Ended)
            {
                slideDirection = getSlideDirection();
            }

            // Stop timer
            if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
            {
                stationaryTouchTime = 0;
            }
        }
        else // If not touching screen
        {
            setAllTouchVariablesToDefault();
        }

        if (selectedCard != null)
        {
            // If double tapping or sliding up
            if (gameObject.name == "BattleManager" && (doubleTap || slideDirection == Vector2.up))
            {
                CardObject cardObj = selectedCard.GetComponent <CardObject>();
                StartCoroutine(cardObj.playCardAsync());
                setAllTouchVariablesToDefault();
            } // If double tapping, or sliding right if in collection, or sliding left if in deck
            else if (gameObject.name == "DeckEditor" && (doubleTap ||
                                                         (slideDirection == Vector2.right && selectedCard.transform.parent.name == "CollectionPanel") ||
                                                         (slideDirection == Vector2.left && selectedCard.transform.parent.name == "DeckPanel")))
            {
                DeckEditorCardObject deco = selectedCard.GetComponent <DeckEditorCardObject>();
                deco.useCard();
                setAllTouchVariablesToDefault();
            }
        }
    }