// 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); }