示例#1
0
    private int GetCountToNextLegalRotation(HackCard hackcard, int startingRotation = 0)
    {
        FindAndStoreAdjacentSquares();

        // We check all four rotations for a match and allow placing the square if there are any
        // If there are, we return the number of rotations necessary for later processing
        // If there are none, we return -1
        // Starting rotation is set to 1 if we want to find the next legal rotation and skip 'no rotation'
        for (int rotations = startingRotation; rotations < 4; rotations++)
        {
            string rotatedLeftCircuit   = hackcard.GetLeftCircuit();
            string rotatedTopCircuit    = hackcard.GetTopCircuit();
            string rotatedRightCircuit  = hackcard.GetRightCircuit();
            string rotatedBottomCircuit = hackcard.GetBottomCircuit();
            for (int i = 0; i < rotations; i++)
            {
                string previousLeftCircuit = rotatedLeftCircuit;
                rotatedLeftCircuit   = rotatedBottomCircuit;
                rotatedBottomCircuit = rotatedRightCircuit;
                rotatedRightCircuit  = rotatedTopCircuit;
                rotatedTopCircuit    = previousLeftCircuit;
            }
            bool isCurrentRotationLegal = CheckRotation(rotatedLeftCircuit, rotatedTopCircuit, rotatedRightCircuit, rotatedBottomCircuit);
            if (isCurrentRotationLegal)
            {
                return(rotations);
            }
        }
        return(-1);
    }
    public void KeepOrDiscardFromTopXCards(List <int> idsToKeep, List <int> idsToDiscard, int amountOfCards)
    {
        int currentIndex = 0;
        // save the current card so we can see if it changes or not
        HackCard currentTopCard = cards[0];

        // loop through the top X cards to check the lists for their ids
        for (int i = 0; i < amountOfCards; i++)
        {
            int currentCardId = cards[currentIndex].GetCardId();
            if (idsToKeep.Contains(currentCardId))
            {
                currentIndex++;
                idsToKeep.Remove(currentCardId);
            }
            else if (idsToDiscard.Contains(currentCardId))
            {
                hackDiscard.AddCardToDiscard(cards[currentIndex]);
                cards.RemoveAt(currentIndex);
                idsToDiscard.Remove(currentCardId);
            }
        }

        if (cards[0] != currentTopCard)
        {
            ClearTemporaryCardModifications();
            SetTopCard();
        }
        SetTextFieldCount();
    }
示例#3
0
    public bool AttachCardToSquare(HackCard hackCard, string[] tempCircuitConnections)
    {
        int timesToRotate = GetCountToNextLegalRotation(hackCard);

        if (timesToRotate != -1)
        {
            HackCard newHackCard = Instantiate(hackCard, new Vector2(hackholder.transform.position.x, hackholder.transform.position.y), Quaternion.identity);

            newHackCard.SetModifiedCircuit(tempCircuitConnections);

            newHackCard.transform.SetParent(hackholder.transform);
            newHackCard.transform.localScale = new Vector3(1, 1, 1);
            newHackCard.SetGridSquareHolder(this);

            for (int i = 0; i < timesToRotate; i++)
            {
                RotateCardNinetyDegrees(newHackCard);
                newHackCard.RotateCircuitsAndSpikesNinetyDegrees();
            }

            HackBattleData hackBattleData = FindObjectOfType <HackBattleData>();
            hackBattleData.SetStateToCardUI();

            newHackCard.SetupUI(GetCountToPreviousLegalRotation(newHackCard, 1), GetCountToNextLegalRotation(newHackCard, 1));
            attachedHackCard = newHackCard;
            UpdateSecurityRating();

            return(true);
        }
        else
        {
            return(false);
        }
    }
示例#4
0
 private void RotateCardNinetyDegrees(HackCard cardToRotate)
 {
     // Variables must be shifted one to the right (eg left => top, top => right, right => bottom, bottom => left)
     // this must be done for circuits AND spikes
     cardToRotate.transform.Find("Card").gameObject.transform.Rotate(0, 0, 270);
     //cardToRotate.transform.Rotate(0, 0, 270);
 }
示例#5
0
    private int GetCountToPreviousLegalRotation(HackCard hackcard, int startingRotation = 0)
    {
        FindAndStoreAdjacentSquares();

        for (int rotations = startingRotation; rotations < 4; rotations++)
        {
            string rotatedLeftCircuit   = hackcard.GetLeftCircuit();
            string rotatedTopCircuit    = hackcard.GetTopCircuit();
            string rotatedRightCircuit  = hackcard.GetRightCircuit();
            string rotatedBottomCircuit = hackcard.GetBottomCircuit();
            for (int i = 0; i < rotations; i++)
            {
                string previousLeftCircuit = rotatedLeftCircuit;
                rotatedLeftCircuit   = rotatedTopCircuit;
                rotatedTopCircuit    = rotatedRightCircuit;
                rotatedRightCircuit  = rotatedBottomCircuit;
                rotatedBottomCircuit = previousLeftCircuit;
            }
            bool isCurrentRotationLegal = CheckRotation(rotatedLeftCircuit, rotatedTopCircuit, rotatedRightCircuit, rotatedBottomCircuit);
            if (isCurrentRotationLegal)
            {
                return(rotations);
            }
        }
        return(-1);
    }
 private void SetPreviousCardAndModifiers()
 {
     previousTopHackCard   = cards[0];
     prevTempLeftCircuit   = tempLeftCircuit;
     prevTempTopCircuit    = tempTopCircuit;
     prevTempRightCircuit  = tempRightCircuit;
     prevtempBottomCircuit = tempBottomCircuit;
 }
    public HackCard GetCardById(int cardId)
    {
        string   paddedCardId = "" + cardId.ToString("000");
        string   imagePath    = "CardPrefabs/HackPlayer/HackCard" + paddedCardId;
        HackCard newHackCard  = Resources.Load <HackCard>(imagePath);

        return(newHackCard);
    }
示例#8
0
    public bool DoesSquareHaveCard()
    {
        HackCard attachedCard = GetComponentInChildren <HackCard>();

        if (attachedCard)
        {
            return(true);
        }
        return(false);
    }
    public void ToggleToHackCard()
    {
        runnerMode = false;
        cardBattleContextHolder.SetActive(false);
        cardHackContextHolder.SetActive(true);

        string   paddedCardId = "" + card.GetCardId().ToString("000");
        string   imagePath    = "CardPrefabs/HackPlayer/HackCard" + paddedCardId;
        HackCard newHackCard  = Resources.Load <HackCard>(imagePath);

        hackCard             = newHackCard;
        cardHackImage.sprite = hackCard.GetCardImage();

        SetupSpikes(hackCard);
    }
    private void CreateCardOption(HackCard card, int counter)
    {
        float imageOffset = cardWidth;

        contentWidth += cardWidth;
        if (counter > 0)
        {
            imageOffset  += cardWidth / 4;
            contentWidth += cardWidth / 4;
        }
        imageOffset *= counter;
        HackDummyTile newDummyCard = Instantiate(hackDummyTile, new Vector2(transform.position.x + imageOffset, transform.position.y), Quaternion.identity);

        newDummyCard.transform.SetParent(tileHolder.transform);
        newDummyCard.SetupDummyTile(card);

        tileOptions.Add(newDummyCard);
    }
    public void AddConnectionsToActiveCard(int number, string color)
    {
        HackCard topCard = cards[0];

        // in circuit array: 0 = left, 1 = top, 2 = right, 3 = bottom
        string[]   circuits              = { topCard.GetLeftCircuit(), topCard.GetTopCircuit(), topCard.GetRightCircuit(), topCard.GetBottomCircuit() };
        List <int> emptyColorIndices     = new List <int>();
        List <int> differentColorIndices = new List <int>();
        List <int> sameColorIndices      = new List <int>();

        for (int i = 0; i < circuits.Length; i++)
        {
            if (circuits[i] == color)
            {
                sameColorIndices.Add(i);
            }
            else if (circuits[i] == "none")
            {
                emptyColorIndices.Add(i);
            }
            else
            {
                differentColorIndices.Add(i);
            }
        }

        for (int i = 0; i < number; i++)
        {
            if (emptyColorIndices.Count > 0)
            {
                int indexToUse = Random.Range(0, emptyColorIndices.Count);
                SetTemporaryCircuit(emptyColorIndices[indexToUse], color);
                emptyColorIndices.RemoveAt(indexToUse);
            }
            else if (differentColorIndices.Count > 0)
            {
                int indexToUse = Random.Range(0, differentColorIndices.Count);
                SetTemporaryCircuit(differentColorIndices[indexToUse], color);
                differentColorIndices.RemoveAt(indexToUse);
            }
        }

        SetTopCard();
    }
    private void SetupSpikes(HackCard hackCard)
    {
        string emptyImagePath = "CardParts/Circuits/EMPTYCIRCUIT";

        if (hackCard.GetTopLeftSpike().GetSpikeColor() != "none")
        {
            string topLeftSpikePath = "CardParts/Spikes/" + hackCard.GetTopLeftSpike().GetSpikeColor().ToUpper() + "-UPLEFT";
            topLeftSpikeImage.sprite = Resources.Load <Sprite>(topLeftSpikePath);
        }
        else
        {
            topLeftSpikeImage.sprite = Resources.Load <Sprite>(emptyImagePath);
        }

        if (hackCard.GetTopRightSpike().GetSpikeColor() != "none")
        {
            string topRightSpikePath = "CardParts/Spikes/" + hackCard.GetTopRightSpike().GetSpikeColor().ToUpper() + "-UPRIGHT";
            topRightSpikeImage.sprite = Resources.Load <Sprite>(topRightSpikePath);
        }
        else
        {
            topRightSpikeImage.sprite = Resources.Load <Sprite>(emptyImagePath);
        }

        if (hackCard.GetBottomLeftSpike().GetSpikeColor() != "none")
        {
            string bottomLeftSpikePath = "CardParts/Spikes/" + hackCard.GetBottomLeftSpike().GetSpikeColor().ToUpper() + "-BOTTOMLEFT";
            bottomLeftSpikeImage.sprite = Resources.Load <Sprite>(bottomLeftSpikePath);
        }
        else
        {
            bottomLeftSpikeImage.sprite = Resources.Load <Sprite>(emptyImagePath);
        }

        if (hackCard.GetbottomRightSpike().GetSpikeColor() != "none")
        {
            string bottomRightSpikePath = "CardParts/Spikes/" + hackCard.GetbottomRightSpike().GetSpikeColor().ToUpper() + "-BOTTOMRIGHT";
            bottomRightSpikeImage.sprite = Resources.Load <Sprite>(bottomRightSpikePath);
        }
        else
        {
            bottomRightSpikeImage.sprite = Resources.Load <Sprite>(emptyImagePath);
        }
    }
    public void ReAttachTopCardFromDiscard(HackCard cardFromDiscard)
    {
        // TODO: THIS NEEDS TO GET THE TOP CARD FROM DISCARD, NOT THE PREVIOUSLY PLAYED CARD
        // TODO: THIS IS BAD!!!!!!
        // reattaching from discard works differently and the animation is handled by the discard
        // pile, so we need a separate method
        if (cards.Count > 0)
        {
            ShiftAllCardsDownOneInOrder();
            cards[0] = cardFromDiscard;
            ReSetPrevModifiers();
        }
        else
        {
            cards.Add(cardFromDiscard);
            ReSetPrevModifiers();
        }

        SetTopCard();
        SetTextFieldCount();
    }
    public void SetupCardSample(
        HackCard newHackCard,
        Card newCard,
        Sprite topLeftSpikeImage,
        Sprite topRightSpikeImage,
        Sprite bottomLeftSpikeImage,
        Sprite bottomRightSpikeImage
        )
    {
        runnerCard.SetActive(false);
        hackerCard.SetActive(true);

        hackCard = newHackCard;
        card     = newCard;
        hackerCardImage.sprite         = hackCard.GetCardImage();
        hackerCardLeftCircuit.sprite   = card.GetLeftCircuitImage();
        hackerCardTopCircuit.sprite    = card.GetTopCircuitImage();
        hackerCardRightCircuit.sprite  = card.GetRightCircuitImage();
        hackerCardBottomCircuit.sprite = card.GetBottomCircuitImage();
        topLeftSpike.sprite            = topLeftSpikeImage;
        topRightSpike.sprite           = topRightSpikeImage;
        bottomLeftSpike.sprite         = bottomLeftSpikeImage;
        bottomRightSpike.sprite        = bottomRightSpikeImage;
    }
    public void SetTopCard()
    {
        Image[]        imageHolders   = GetComponentsInChildren <Image>();
        AllSpikeImages allSpikeImages = FindObjectOfType <AllSpikeImages>();

        if (cards.Count == 0)
        {
            foreach (Image image in imageHolders)
            {
                image.sprite = allSpikeImages.GetEmptyImage();
            }
        }
        else
        {
            HackCard topCard = cards[0];
            foreach (Image image in imageHolders)
            {
                switch (image.name)
                {
                case "HackDeckCardBack":
                    image.sprite = allSpikeImages.GetCardBack();
                    break;

                case "LeftCircuit":
                    string color;
                    if (tempLeftCircuit != null)
                    {
                        color = tempLeftCircuit;
                    }
                    else
                    {
                        color = topCard.GetLeftCircuit();
                    }
                    Sprite currentImage = allSpikeImages.GetCircuitImageByColorAndDirection(color, "left");
                    image.sprite = currentImage;
                    break;

                case "TopCircuit":
                    if (tempTopCircuit != null)
                    {
                        color = tempTopCircuit;
                    }
                    else
                    {
                        color = topCard.GetTopCircuit();
                    }
                    currentImage = allSpikeImages.GetCircuitImageByColorAndDirection(color, "top");
                    image.sprite = currentImage;
                    break;

                case "RightCircuit":
                    if (tempRightCircuit != null)
                    {
                        color = tempRightCircuit;
                    }
                    else
                    {
                        color = topCard.GetRightCircuit();
                    }
                    currentImage = allSpikeImages.GetCircuitImageByColorAndDirection(color, "right");
                    image.sprite = currentImage;
                    break;

                case "DownCircuit":
                    if (tempBottomCircuit != null)
                    {
                        color = tempBottomCircuit;
                    }
                    else
                    {
                        color = topCard.GetBottomCircuit();
                    }
                    currentImage = allSpikeImages.GetCircuitImageByColorAndDirection(color, "bottom");
                    image.sprite = currentImage;
                    break;

                case "TopLeftSpike":
                    Spike  currentspike = topCard.GetTopLeftSpike();
                    string state        = currentspike.GetSpikeState();
                    color        = currentspike.GetSpikeColor();
                    currentImage = allSpikeImages.GetSpikebyColorCornerAndState(color, "topleft", state);
                    image.sprite = currentImage;
                    break;

                case "TopRightSpike":
                    currentspike = topCard.GetTopRightSpike();
                    state        = currentspike.GetSpikeState();
                    color        = currentspike.GetSpikeColor();
                    currentImage = allSpikeImages.GetSpikebyColorCornerAndState(color, "topright", state);
                    image.sprite = currentImage;
                    break;

                case "BottomLeftSpike":
                    currentspike = topCard.GetBottomLeftSpike();
                    state        = currentspike.GetSpikeState();
                    color        = currentspike.GetSpikeColor();
                    currentImage = allSpikeImages.GetSpikebyColorCornerAndState(color, "bottomleft", state);
                    image.sprite = currentImage;
                    break;

                case "BottomRightSpike":
                    currentspike = topCard.GetbottomRightSpike();
                    state        = currentspike.GetSpikeState();
                    color        = currentspike.GetSpikeColor();
                    currentImage = allSpikeImages.GetSpikebyColorCornerAndState(color, "bottomright", state);
                    image.sprite = currentImage;
                    break;

                case "CardImage":
                    image.sprite = topCard.GetCardImage();
                    break;
                }
            }
        }
    }
 public void SetPreviousTopHackCard(HackCard card)
 {
     previousTopHackCard = card;
 }
    public void SetupDummyTile(HackCard card)
    {
        Image[] images = GetComponentsInChildren <Image>();
        id = card.GetCardId();
        foreach (Image image in images)
        {
            switch (image.name)
            {
            case "LeftCircuit":
                circuitLeft = card.GetImageByGameObjectName("Left");
                if (circuitLeft != null)
                {
                    image.sprite = circuitLeft;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "TopCircuit":
                circuitTop = card.GetImageByGameObjectName("Up");
                if (circuitTop != null)
                {
                    image.sprite = circuitTop;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "RightCircuit":
                circuitRight = card.GetImageByGameObjectName("Right");
                if (circuitRight != null)
                {
                    image.sprite = circuitRight;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "DownCircuit":
                circuitDown = card.GetImageByGameObjectName("Down");
                if (circuitDown != null)
                {
                    image.sprite = circuitDown;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "TopLeftSpike":
                spikeTopLeft = card.GetImageByGameObjectName("TopLeft");
                if (spikeTopLeft != null)
                {
                    image.sprite = spikeTopLeft;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "TopRightSpike":
                spikeTopRight = card.GetImageByGameObjectName("TopRight");
                if (spikeTopRight != null)
                {
                    image.sprite = spikeTopRight;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "BottomLeftSpike":
                spikeBottomLeft = card.GetImageByGameObjectName("BottomLeft");
                if (spikeBottomLeft != null)
                {
                    image.sprite = spikeBottomLeft;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "BottomRightSpike":
                spikeBottomRight = card.GetImageByGameObjectName("BottomRight");
                if (spikeBottomRight != null)
                {
                    image.sprite = spikeBottomRight;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "FrontImage":
                cardImage = card.GetImageByGameObjectName("Image");
                if (cardImage != null)
                {
                    image.sprite = cardImage;
                }
                else
                {
                    image.sprite = emptyImageSprite;
                }
                break;

            case "Selected":
                selectedImage = image;
                break;
            }
        }
    }
示例#18
0
 public void AddCardToDiscard(HackCard card)
 {
     cards.Add(card);
     SetTopCard();
     UpdateTextFieldCounter();
 }