예제 #1
0
    public void AddCard(QueensCard card)
    {
        card.gameObject.transform.position = transform.position;

        if (cards.Count > 0)
        {
            cards.Peek().gameObject.SetActive(false);
        }

        Debug.Log("card Added");

        card.Reveal();

        card.discarded = true;
        cards.Push(card.gameObject);
    }
예제 #2
0
    // Start is called before the first frame update
    void Awake()
    {
        initDictionary();

        xmlr = new PT_XMLReader();
        xmlr.Parse(deckXML.ToString());

        // Get a pseudo collection of all our playable cards
        PT_XMLHashList xPlayables = xmlr.xml["xml"][0]["playableCard"];

        cardPos = Vector2.zero;

        cardPos.x = -xBorder - 2.5f;
        cardPos.y = 8;

        // Create PlayableCards
        for (int i = 0; i < xPlayables.Count; i++)
        {
            if (demoMode)
            {
                amount = int.Parse(xPlayables[i].att("amount"));
            }
            else
            {
                amount = 1;
            }

            for (int j = 0; j < amount; j++)
            {
                GameObject testCard = Instantiate(queensCardPrefab);
                QueensCard cardData = testCard.GetComponent <QueensCard>();

                // do this for each pip or decorator in our list of decorators. Create previous code to get a list of decorators.
                GameObject     pip             = Instantiate(prefabSprite) as GameObject;
                SpriteRenderer currentRenderer = pip.GetComponent <SpriteRenderer>();

                currentRenderer.sortingOrder = 1;                  // make it render above card
                pip.transform.parent         = testCard.transform; // make deco a child of card GO
                pip.transform.localPosition  = Vector3.zero;
                //pip.transform.localPosition = xtypes[0].att("pos");

                cardData.cardName = xPlayables[i].att("type");
                cardData.cardType = CardType.PlayableCard;
                if (!demoMode)
                {
                    cardData.SetBannerText(cardData.cardName);
                }
                else
                {
                    cardData.SetBannerText("");
                }


                Sprite curPip = null;

                if (xPlayables[i].att("type").Equals("king"))
                {
                    cardData.SetBannerText(xPlayables[i].att("name") + " King");
                    curPip            = GetKingSprite(xPlayables[i].att("name"));
                    cardData.cardType = CardType.KingCard;

                    // Set banner pip
                    GameObject     bannerPip  = Instantiate(prefabSprite) as GameObject;
                    SpriteRenderer bannerRend = bannerPip.GetComponent <SpriteRenderer>();

                    bannerRend.sortingOrder           = 2;
                    bannerPip.transform.parent        = testCard.transform;
                    bannerPip.transform.localPosition = new Vector3(0, -1.24f, 0);

                    if (bannerSprite != null)
                    {
                        bannerRend.sprite = bannerSprite;
                    }
                }

                else
                {
                    curPip = spritesDict[cardData.cardName];
                }

                testCard.transform.position = GetNewCardPos();

                testCard.gameObject.name = cardData.cardName;

                //Debug.Log(cardData.cardName);

                if (curPip != null)
                {
                    currentRenderer.sprite = curPip;
                }

                playableGOs.Add(testCard);
            }
        }

        // Store all decorators
        decorators = new List <Decorator>();
        // grab all decorators from the XML file
        PT_XMLHashList xDecos = xmlr.xml["xml"][0]["decorator"];
        Decorator      deco;

        for (int i = 0; i < xDecos.Count; i++)
        {
            // for each decorator in the XML, copy attributes and set up location and flip if needed
            deco       = new Decorator();
            deco.type  = xDecos[i].att("type");
            deco.flip  = (xDecos[i].att("flip") == "1");  // too cute by half - if it's 1, set to 1, else set to 0
            deco.scale = float.Parse(xDecos[i].att("scale"));
            deco.loc.x = float.Parse(xDecos[i].att("x"));
            deco.loc.y = float.Parse(xDecos[i].att("y"));
            deco.loc.z = float.Parse(xDecos[i].att("z"));
            decorators.Add(deco);
        }


        // Create QueenCards
        PT_XMLHashList xQueens = xmlr.xml["xml"][0]["queenCard"];

        // Rough, way too much duplicate code, could be cleaned with definittions and more organization
        for (int i = 0; i < xQueens.Count; i++)
        {
            // testing card creation;
            GameObject testCard = Instantiate(queensCardPrefab);
            QueensCard cardData = testCard.GetComponent <QueensCard>();

            // do this for each pip or decorator in our list of decorators. Create previous code to get a list of decorators.
            GameObject     pip             = Instantiate(prefabSprite) as GameObject;
            SpriteRenderer currentRenderer = pip.GetComponent <SpriteRenderer>();

            // Set banner pip
            GameObject     bannerPip  = Instantiate(prefabSprite) as GameObject;
            SpriteRenderer bannerRend = bannerPip.GetComponent <SpriteRenderer>();

            currentRenderer.sortingOrder = 1;                  // make it render above card
            pip.transform.parent         = testCard.transform; // make deco a child of card GO
            pip.transform.localPosition  = new Vector3(0, .2f, 0);

            bannerRend.sortingOrder           = 2;
            bannerPip.transform.parent        = testCard.transform;
            bannerPip.transform.localPosition = new Vector3(0, -1.24f, 0);

            cardData.cardName = xQueens[i].att("name");
            cardData.value    = int.Parse(xQueens[i].att("value"));
            cardData.cardType = CardType.QueenCard;

            if (bannerSprite != null)
            {
                bannerRend.sprite = bannerSprite;
            }

            Sprite curPip = null;

            cardData.SetBannerText(xQueens[i].att("name") + " Queen");
            curPip = GetQueenSprite(xQueens[i].att("name"));

            cardData.Initialize();

            testCard.transform.position = GetNewCardPos();
            testCard.gameObject.name    = cardData.cardName;

            queensGOs.Add(testCard);

            //Debug.Log(cardData.cardName);

            if (curPip != null)
            {
                currentRenderer.sprite = curPip;
            }
        } // end of for loop for queen card creation

        // Create number cards
        cardDefs = new List <CardDefinition>();
        // first we reference our xml NumberCard Definitions
        PT_XMLHashList xNumberCards = xmlr.xml["xml"][0]["numberCard"];

        // foreach of those definitions

        for (int i = 0; i < xNumberCards.Count; i++)
        {
            if (demoMode)
            {
                amount = int.Parse(xNumberCards[i].att("amount"));
            }
            else
            {
                amount = 1;
            }

            CardDefinition cDef = new CardDefinition();
            cDef.rank = int.Parse(xNumberCards[i].att("value"));

            PT_XMLHashList xPips = xNumberCards[i]["pip"];

            if (xPips != null)
            {
                for (int j = 0; j < xPips.Count; j++)
                {
                    deco      = new Decorator();
                    deco.type = "pip";
                    deco.flip = (xPips[j].att("flip") == "1");   // too cute by half - if it's 1, set to 1, else set to 0

                    deco.loc.x = float.Parse(xPips[j].att("x"));
                    deco.loc.y = float.Parse(xPips[j].att("y"));
                    deco.loc.z = float.Parse(xPips[j].att("z"));
                    if (xPips[j].HasAtt("scale"))
                    {
                        deco.scale = float.Parse(xPips[j].att("scale"));
                    }
                    cDef.pips.Add(deco);

                    if (xPips[j].HasAtt("rotation"))
                    {
                        deco.rotation = float.Parse(xPips[j].att("rotation"));
                    }
                }
            }
            cardDefs.Add(cDef);
        }

        foreach (CardDefinition cdef in cardDefs)
        {
            for (int k = 0; k < amount; k++)
            {
                GameObject cgo = Instantiate(queensCardPrefab) as GameObject;
                // set cgo transform parent
                QueensCard card = cgo.GetComponent <QueensCard>();

                card.name     = cdef.rank.ToString();
                card.value    = cdef.rank;
                card.cardType = CardType.ValueCard;

                //Add Decorators
                foreach (Decorator decko in decorators)
                {
                    GameObject     tGO = Instantiate(prefabSprite) as GameObject;
                    SpriteRenderer tSR = tGO.GetComponent <SpriteRenderer>();

                    tSR.sprite = GetSpriteByRank(card.value);
                    tSR.color  = Color.black;

                    tSR.sortingOrder            = 1;             // make it render above card
                    tGO.transform.parent        = cgo.transform; // make deco a child of card GO
                    tGO.transform.localPosition = decko.loc;     // set the deco's local position

                    if (decko.flip)
                    {
                        tGO.transform.rotation = Quaternion.Euler(0, 0, 180);
                    }

                    if (decko.scale != 1)
                    {
                        tGO.transform.localScale = Vector3.one * decko.scale;
                    }

                    tGO.name = decko.type;

                    card.decoratorGos.Add(tGO);
                } // end of foreach decorator creation

                // Add the pips
                foreach (Decorator pip in cdef.pips)
                {
                    GameObject tempGO = Instantiate(prefabSprite) as GameObject;
                    tempGO.transform.parent        = cgo.transform;
                    tempGO.transform.localPosition = pip.loc;

                    if (pip.flip)
                    {
                        tempGO.transform.rotation = Quaternion.Euler(0, 0, 180);
                    }

                    if (pip.scale != 1)
                    {
                        tempGO.transform.localScale = Vector3.one * pip.scale;
                    }

                    if (pip.rotation != 0)
                    {
                        tempGO.transform.rotation = Quaternion.Euler(0, 0, pip.rotation);
                    }

                    tempGO.name = "pip";
                    SpriteRenderer tempSR = tempGO.GetComponent <SpriteRenderer>();
                    tempSR.sprite       = GetPipSprite(card.name);
                    tempSR.sortingOrder = 1;
                    card.pipGos.Add(tempGO);
                }

                playableGOs.Add(cgo);

                cgo.transform.position = GetNewCardPos();
            }
        }

        foreach (GameObject card in playableGOs)
        {
            cardGOs.Add(card);
        }

        Shuffle(ref playableGOs);

        foreach (GameObject card in queensGOs)
        {
            cardGOs.Add(card);
        }


        foreach (GameObject card in cardGOs)
        {
            GameObject     spriteBackGO = Instantiate(prefabSprite) as GameObject;
            SpriteRenderer spriteBack   = spriteBackGO.GetComponent <SpriteRenderer>();

            QueensCard cardMono = card.GetComponent <QueensCard>();

            cardMono.cardBack = spriteBack;


            spriteBack.sprite = cardBackRed;

            if (cardMono.cardType == CardType.QueenCard)
            {
                spriteBack.sprite = cardBackQueen;
            }

            spriteBackGO.transform.SetParent(card.transform);
            spriteBackGO.transform.localPosition = Vector3.zero;
            spriteBack.sortingOrder = 3;

            spriteBackGO.name = "back";


            // card.FaceUp = false;
        }

        // Give the Deck the Cards We Created Here
        deck.queensCards   = this.queensGOs;
        deck.playableCards = this.playableGOs;
        deck.cards         = this.cardGOs;

        if (demoMode)
        {
            tempPlayField();
        }
    } // end of Awake method