public void PutCard(TTCard card, int indexOfRow, int indexOfColumn)
        {
            if (IsCardExistAt(indexOfRow, indexOfColumn))
            {
                return;
            }

            _slots[indexOfRow, indexOfColumn] = card;
            _ruleContext.ApplyRuleOnMove(this, card.belongPlayerId, indexOfRow, indexOfColumn);
        }
 public void SelectCard(TTCard card)
 {
     if (_presenter.GetCurrentPlayer() == card.belongPlayerId)
     {
         _selectedCard = card;
     }
     else
     {
         Debug.LogWarning("Selected card not belong to current turn player.");
     }
 }
 public void SelectSlot(int indexOfRow, int indexOfColumn)
 {
     if (_selectedCard != null)
     {
         if (!_presenter.IsCardExistAt(indexOfRow, indexOfColumn))
         {
             _presenter.PutCard(_selectedCard, indexOfRow, indexOfColumn);
             _selectedCard = null;
         }
     }
 }
        public void ApplyRuleOnMove(TTBoard board, int movedPlayerId, int indexOfRow, int indexOfColumn)
        {
            TTCard movedCard = board.GetCardAt(indexOfRow, indexOfColumn);

            foreach (Direction direction in System.Enum.GetValues(typeof(Direction)))
            {
                TTCard adjacentCard = board.GetCardAt(indexOfRow, indexOfColumn, direction);
                if (adjacentCard != null && (adjacentCard.belongPlayerId != movedPlayerId))
                {
                    int  movedCardRank    = movedCard.GetRankOf(direction);
                    int  adjacentCardRank = adjacentCard.GetOppositeRankOf(direction);
                    bool canTurnCard      = CompareRank(movedCardRank, adjacentCardRank) > 0;
                    if (canTurnCard)
                    {
                        adjacentCard.belongPlayerId = movedPlayerId;
                    }
                }
            }
        }
        public void UpdateUI(TTCard updateCard)
        {
            card = updateCard;
            if (card != null)
            {
                _cardParent.SetActive(true);

                TTCardData cardData = card.cardData;
                _rankUpText.text    = GetRankString(cardData.rankUp);
                _rankRightText.text = GetRankString(cardData.rankRight);
                _rankDownText.text  = GetRankString(cardData.rankDown);
                _rankLeftText.text  = GetRankString(cardData.rankLeft);
                backgroundImg.color = TTGameView.Instance.GetCardColorOf(card.belongPlayerId);
            }
            else
            {
                _cardParent.SetActive(false);
            }
        }
 public void UpdateUI(TTCard card)
 {
     cardUI.UpdateUI(card);
 }