Exemplo n.º 1
0
    // Tries to play a Card on a Tile. Returns true is successful.
    // Assumes that the player whose turn it is can be the only one who calls this (for now).
    public bool PlayCard(int cardIndex, string targetTile)
    {
        bool   wasPlayed = false;
        int    locX      = int.Parse(targetTile.Substring(1, 2));
        int    locY      = int.Parse(targetTile.Substring(5, 2));
        int    round     = matchData.Round;
        int    turn      = matchData.Turn;
        string tileType  = targetTile.Substring(8);
        // GridUnit target = GridManager.grid[locX, locY];
        CardData target;
        Card     card = players[turn - 1].hand[cardIndex];

        Debug.Log(debugTag + "Trying to play Card " + cardIndex + " on " + tileType
                  + " at " + locX + ", " + locY);

        target = gridController.GetServerTile(tileType, locX, locY);

        if (!target.IsBankrupt && RuleSet.IsLegal(target, card, turn))
        {
            // gridController.UpdateMarketCardValues();

            gridController.AddCardToStack(locX, locY, target.Category, card);
            UpdatePlayersInfo();

            // // If the card is meant to be stacked
            // if (!card.DiscardFlag)
            // {
            //  gridController.IncrementStackSize(locY, target.Target);
            //  gridController.AddCardToStack(locX, locY, target.Target, card);
            //  // target.CalcTotalValue(); // This fixes Market Cards not calcing first time
            //  UpdatePlayersInfo();

            //  // if (gridController.ShiftRowCheck(locX, locY))
            //  // {
            //  //  GameObject cardObj = (GameObject)Instantiate(gameCardPrefab,
            //  //      new Vector3(target.CardObject.transform.position.x,
            //  //          target.CardObject.transform.position.y
            //  //          - (gridController.shiftUnit * target.CardStack.Count),
            //  //          (target.CardObject.transform.position.z)
            //  //          + (gridController.cardThickness * target.CardStack.Count)),
            //  //      Quaternion.identity);
            //  // }
            // }

            Card topCard;
            if (DrawCard(masterDeckMutable.gameCardDeck, masterDeck.gameCardDeck, out topCard))
            {
                matchDataBroadcaster.TopCardStr   = JsonUtility.ToJson(topCard);
                players[turn - 1].hand[cardIndex] = topCard;
            }
            else
            {
                matchDataBroadcaster.TopCardStr = "empty";
            }

            Debug.Log(debugTag.head + locX + ", " + locY);

            TurnEvent turnEvent = new TurnEvent(matchData.Phase, turn, "Play",
                                                "GameCard", turn, cardIndex, matchDataBroadcaster.TopCardStr,
                                                JsonUtility.ToJson(new Card(gridController.GetServerTile(tileType, locX, locY))),
                                                locX, locY,
                                                JsonUtility.ToJson(card));

            matchDataBroadcaster.TurnEventStr = JsonUtility.ToJson(turnEvent);

            this.IncrementTurn();
            wasPlayed = true;

            if (target.IsBankrupt)
            {
                gridController.BankruptTile(locX, locY);
            }

            gridController.UpdateMarketCardValues();
            UpdatePlayersInfo();

            cardsPlayed++;
        }

        Debug.Log(debugTag + "GameCards left: " + masterDeckMutable.gameCardDeck.Count + "/" + masterDeck.gameCardDeck.Count);
        Debug.Log(debugTag + "Cards Played: " + cardsPlayed);

        return(wasPlayed);
    }