コード例 #1
0
    void AddTileColumn(GameObject tile, int column, int times, int side)
    {
        //Debug.Log(Time.frameCount + "AddTile: " + tile.name + ", column = " + column + ", " + times + " times" + " side = " + side);
        SideController currentSide = currentBoard.GetSide(side);

        //Debug.Log("Current side = " + currentSide.name);

        if (column >= currentSide.NumColumns())
        {
            //Debug.Log("Adding a new column");
            currentSide.AddColumn();
        }

        ColumnController currentColumn = currentSide.GetCurrentColumn();

        //Debug.Log(Time.frameCount + "AddTile: currentColumn = " + currentColumn);
        CardController currentCard = currentColumn.GetCard();

        for (int i = 0; i < times; i++)
        {
            if (i != 0)
            {
                tile = Instantiate(tile);
            }
            tile.name = tile.GetComponent <TileController>().number + " " + Random.Range(0.1f, 100f);
            //Debug.Log(Time.frameCount + "AddTile: adding tile " + tile + " " + tile.transform.lossyScale);
            currentCard.AddTile(tile.GetComponent <TileController>());
        }
    }
コード例 #2
0
    void AddTilesToCard(CardController thisCard, string[] tempFactors)
    {
        int tempInt;

        foreach (string s in tempFactors)
        {
            //Debug.Log("AddTilesToCard: Adding " + s);
            if (int.TryParse(s, out tempInt) && tempInt > 0)
            {
                GameObject tempTile = Instantiate(tilePlain);
                tempTile.name = tempInt + " " + Random.Range(0.1f, 100f);
                tempTile.GetComponent <SpriteRenderer>().sprite = tileSprites[s];

                thisCard.AddTile(tempTile.GetComponent <TileController>());
            }
        }
        thisCard.DistributeTiles();
        thisCard.ResizeY();
    }
コード例 #3
0
    private void OnTilesLinked(GameObject one, GameObject two)
    {
        /* Purpose: called whenever the user links two tiles
         * Parameters: one and two, should be game objects with TileController scripts
         */

        //Debug.Log("OnTilesLinked: Start");

        //We need to make sure these two objects are actually tiles
        //So, try to access their TileControllers
        TileController thisTile  = one.GetComponent <TileController>();
        TileController otherTile = two.GetComponent <TileController>();

        //Debug.Log("Linking two tiles " + thisTile + " and " + otherTile);

        //If both turned out to be tiles . . .
        if (thisTile != null && otherTile != null)
        {
            //We now need to check which cards the two tiles belong to
            //since you can't combine or cancel tiles on the same card
            CardController otherCard = otherTile.GetCard();
            CardController thisCard  = thisTile.GetCard();

            //If both tiles belong to cards
            if (otherCard != null && thisCard != null)
            {
                //Next, we need to find out if the cards that the two tiles belong
                //to themselves belong to even larger cards.
                CardController thisParentCard  = thisCard.GetParentCard();
                CardController otherParentCard = otherCard.GetParentCard();

                //If the two cards are different
                //and if the two tiles represent the same prime factor
                if (!otherCard.Equals(thisCard) &&
                    otherTile.number == thisTile.number)
                {
                    //If the numbers are on the same side of the equation
                    //we'll need to factor out the common factor but not
                    //simply "delete it" from the equation
                    //Debug.Log(thisTile.GetSide());
                    //Debug.Log(otherTile.GetSide());
                    if (thisTile.GetSide().Equals(otherTile.GetSide()))
                    {
                        //If either the two cards do not themselves belong to
                        //an even larger card or they both belong to the same card
                        //Debug.Log("Here we are");
                        //Debug.Log("thisParentCard = " + thisParentCard);
                        //Debug.Log("otherParentCard = " + otherParentCard);
                        if ((thisParentCard == null &&
                             otherParentCard == null)
                            ||
                            (thisParentCard != null &&
                             thisParentCard.Equals(otherParentCard)))
                        {
                            //Debug.Log("Removing tile other " + otherTile.name);

                            //Then we've found a common factor and can extract it!
                            //We need to remove the common tile from both the original cards
                            //Debug.Log(name + " need to remove other card " + otherCard + " and otherTile = " + otherTile);
                            otherCard.RemoveTile(otherTile, false);
                            //if(thisCard.GetChildCards().Count == 0)
                            //{
                            //Debug.Log("Removing tile this " + thisTile);
                            thisCard.RemoveTile(thisTile, true);
                            //}

                            //Debug.Log("Our two parent cards are " + thisParentCard + " and " + otherParentCard);
                            //If the larger card doesn't exist, we need to create it
                            if (thisParentCard == null &&
                                otherParentCard == null)
                            {
                                //if (thisCard.GetChildCards().Count == 0)
                                //{
                                //We need to add the two cards to a new common card
                                //Debug.Log("Creating a new card");
                                List <TileController> commonTiles = new List <TileController>();
                                commonTiles.Add(otherTile);
                                List <CardController> childCards = new List <CardController>();
                                foreach (CardController c in thisCard.GetChildCards())
                                {
                                    childCards.Add(c);
                                }
                                thisCard.MergeWith(otherCard, childCards, commonTiles);
                                //}

                                /*else
                                 * {
                                 *  thisCard.AddChildCard(otherCard);
                                 *  thisCard.ResizeTiles();
                                 * }
                                 */
                            }
                            else if (thisParentCard != null &&
                                     thisParentCard.Equals(otherParentCard))
                            {
                                //We just need to add the common factor to the tiles in
                                //the larger card to which the two cards belong.
                                Debug.Log("Adding extra tile");
                                thisParentCard.AddTile(otherTile);
                                thisParentCard.AdjustCardSizeAndContents();
                                if (thisParentCard.GetParentCard())
                                {
                                    thisParentCard.GetParentCard().AdjustCardSizeAndContents();
                                }
                            }
                            //Debug.Log("Now to distribute Columns");
                            thisTile.GetSide().DistributeColumns();
                        }
                    }
                    else if (thisTile.GetSide().NumColumns() == 1 &&
                             otherTile.GetSide().NumColumns() == 1)
                    {
                        //If either the two cards do not themselves belong to
                        //an even larger card or they both belong to the same card
                        if (thisParentCard == null &&
                            otherParentCard == null)
                        {
                            //Debug.Log("Removing tile other");

                            //Then we've found a common factor and can extract it!
                            //We need to remove the common tile from both the original cards
                            //Debug.Log("Removing tiles");
                            otherCard.RemoveTile(otherTile, true);
                            //Debug.Log("Removing tile this");
                            thisCard.RemoveTile(thisTile, true);
                            if (otherCard.GetTiles().Count > 0)
                            {
                                //Debug.Log("Adjusts other");
                                otherCard.AdjustCardSizeAndContents();
                            }
                            else if (otherCard.GetChildCards().Count > 0)
                            {
                                otherCard.GetColumn().FreeChildCards();
                            }
                            if (thisCard.GetTiles().Count > 0)
                            {
                                //Debug.Log("Adjusts this");
                                thisCard.AdjustCardSizeAndContents();
                            }
                            else if (thisCard.GetChildCards().Count > 0)
                            {
                                thisCard.GetColumn().FreeChildCards();
                            }
                        }
                    }
                }
            }
            currentBoard.GetSide(0).DistributeColumns();
            currentBoard.GetSide(1).DistributeColumns();
        }
        else //Now to check if these are cards
        {
            //We need to make sure these two objects are actually tiles
            //So, try to access their TileControllers
            CardController thisCard  = one.GetComponent <CardController>();
            CardController otherCard = two.GetComponent <CardController>();

            if (thisCard && otherCard)
            {
                int newCardValue = thisCard.GetValue() + otherCard.GetValue();
                Debug.Log(thisCard.GetValue() + " + " + otherCard.GetValue() + " = " + newCardValue);
                if (thisCard.transform.position.x < otherCard.transform.position.x)
                {
                    otherCard.GetSide().RemoveCard(otherCard, true);
                    thisCard.RemoveTiles();
                    AddTilesToThisCard(thisCard, newCardValue);
                }
                else
                {
                    thisCard.GetSide().RemoveCard(thisCard, true);
                    otherCard.RemoveTiles();
                    AddTilesToThisCard(otherCard, newCardValue);
                }
            }
        }
    }