예제 #1
0
    /// <summary>
    /// 播放直接碰杠动作
    /// </summary>
    public void PlayCommonPengGang()
    {
        GameObject pengedCard = null;

        pengedCard = getCard;
        getCard    = null;
        if (_data.userId != playerInfoProxy.userID)
        {
            ResourcesMgr.Instance.SetCardMesh(pengedCard, battleProxy.GetPlayerActS2C().actCard);
        }

        for (int i = 0; i < pengGangCards.Count; i++)
        {
            if (BattleAreaUtil.GetMeshCardValue(pengGangCards[i][0]) == battleProxy.GetPlayerActS2C().actCard)
            {
                pengGangCards[i].Add(pengedCard);
                pengedCard.transform.SetParent(pengGangCardContainer);
                for (int j = 0; j < pengGangCards[i].Count; j++)
                {
                    ResourcesMgr.Instance.SetCardMesh(pengGangCards[i][j], battleProxy.GetPlayerActS2C().actCard);
                }
                break;
            }
        }

        BattleAreaUtil.ResortCard(this);
    }
예제 #2
0
 /// <summary>
 /// 出牌
 /// </summary>
 private void PutCard()
 {
     if (!_data.isOnline)
     {
         NetMgr.Instance.ShowDisconnectAlert();
         return;
     }
     //出牌
     if (selectCard != null && battleProxy.isSelfAction && battleProxy.GetPlayerActTipS2C() != null && battleProxy.GetPlayerActTipS2C().acts.Contains(PlayerActType.PUT_CARD))
     {
         var cardValue = BattleAreaUtil.GetMeshCardValue(selectCard);
         if (battleProxy.GetPlayerActTipS2C().forbitCards.IndexOf(cardValue) != -1)
         {
             PopMsg.Instance.ShowMsg("吃牌后当前牌不能出牌");
             return;
         }
         PlayAMahjongC2S actC2S = new PlayAMahjongC2S();
         actC2S.mahjongCode = cardValue;
         NetMgr.Instance.SendBuff(SocketType.BATTLE, MsgNoC2S.C2S_ROOM_PLAY_A_MAHJONG.GetHashCode(), 0, actC2S, true);
         battleProxy.isSelfAction = false;
         selectCardInstance       = selectCard.GetInstanceID();
         selectCard = null;
     }
     isTouchMove = false;
 }
예제 #3
0
    /// <summary>
    /// 播放被吃的动作
    /// </summary>
    public GameObject PlayChied()
    {
        GameObject pengedCard = null;

        for (int i = putCards.Count - 1; i >= 0; i--)
        {
            if (BattleAreaUtil.GetMeshCardValue(putCards[i]) == battleProxy.GetPlayerActS2C().actCard)
            {
                pengedCard = putCards[i];
                putCards.RemoveAt(i);
                break;
            }
        }
        BattleAreaUtil.ResortPutCard(this);
        return(pengedCard);
    }
예제 #4
0
    /// <summary>
    /// 播放直接暗杠
    /// </summary>
    public void PlayCommonAnGang()
    {
        List <GameObject> gangCards = new List <GameObject>();

        if (getCard != null)
        {
            gangCards.Add(getCard);
            getCard.transform.DOKill();
        }
        getCard = null;
        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)//自己暗杠找到真正的牌暗杠
        {
            for (int i = 0; i < handCards.Count;)
            {
                if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                {
                    gangCards.Add(handCards[i]);
                    handCards.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
        }
        else//不是自己暗杠随机找牌暗杠
        {
            var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 3);
            gangCards.Add(handCards[randomIndex]);
            gangCards.Add(handCards[randomIndex + 1]);
            gangCards.Add(handCards[randomIndex + 2]);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
            foreach (GameObject gangCard in gangCards)
            {
                ResourcesMgr.Instance.SetCardMesh(gangCard, battleProxy.GetPlayerActS2C().actCard);
            }
        }
        foreach (GameObject card in gangCards)
        {
            card.transform.SetParent(pengGangCardContainer);
        }
        pengGangCards.Add(gangCards);
        BattleAreaUtil.ResortCard(this);
    }
예제 #5
0
    /// <summary>
    /// 播放直杠动作
    /// </summary>
    /// <param name="zhiGangedCard"></param>
    public void PlayZhiGang(GameObject zhiGangedCard)
    {
        zhiGangedCard.transform.DOKill();
        List <GameObject> gangCards = new List <GameObject>();

        gangCards.Add(zhiGangedCard);
        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
        {
            for (int i = 0; i < handCards.Count;)
            {
                if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                {
                    gangCards.Add(handCards[i]);
                    handCards.RemoveAt(i);
                }
                else
                {
                    i++;
                }
                if (gangCards.Count == 4)
                {
                    break;
                }
            }
        }
        else
        {
            var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 3);
            gangCards.Add(handCards[randomIndex]);
            gangCards.Add(handCards[randomIndex + 1]);
            gangCards.Add(handCards[randomIndex + 2]);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
            foreach (GameObject gangCard in gangCards)
            {
                ResourcesMgr.Instance.SetCardMesh(gangCard, battleProxy.GetPlayerActS2C().actCard);
            }
        }
        foreach (GameObject card in gangCards)
        {
            card.transform.SetParent(pengGangCardContainer);
        }
        pengGangCards.Add(gangCards);
        BattleAreaUtil.ResortHandGangGetCard(this);
    }
예제 #6
0
    /// <summary>
    /// 播放吃的动作
    /// </summary>
    public void PlayChi(GameObject chiedCard)
    {
        chiedCard.transform.DOKill();
        List <GameObject> chiCards = new List <GameObject>();

        chiCards.Add(chiedCard);
        List <int> chiCardArr = new List <int>();

        chiCardArr.Add(battleProxy.GetPlayerActS2C().actCard);
        chiCardArr.AddRange(battleProxy.GetPlayerActS2C().chiCards);
        chiCardArr.Sort();
        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) //自己碰找到真正的牌碰
        {
            for (int i = 0; i < battleProxy.GetPlayerActS2C().chiCards.Count; i++)
            {
                for (int j = 0; j < handCards.Count; j++)
                {
                    if (BattleAreaUtil.GetMeshCardValue(handCards[j]) == battleProxy.GetPlayerActS2C().chiCards[i])
                    {
                        chiCards.Add(handCards[j]);
                        handCards.RemoveAt(j);
                        break;
                    }
                }
            }
        }
        else
        {
            var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 2);
            chiCards.Add(handCards[randomIndex]);
            chiCards.Add(handCards[randomIndex + 1]);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
        }
        for (int i = 0; i < chiCards.Count; i++)
        {
            ResourcesMgr.Instance.SetCardMesh(chiCards[i], chiCardArr[i]);
        }
        foreach (GameObject card in chiCards)
        {
            card.transform.SetParent(pengGangCardContainer);
        }
        pengGangCards.Add(chiCards);
        BattleAreaUtil.ResortCard(this);
    }
예제 #7
0
    /// <summary>
    /// 播放碰的动作
    /// </summary>
    public void PlayPeng(GameObject pengedCard)
    {
        List <GameObject> pengCards = new List <GameObject>();

        pengedCard.transform.DOKill();
        pengCards.Add(pengedCard);
        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport) //自己碰找到真正的牌碰
        {
            for (int i = 0; i < handCards.Count;)
            {
                if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                {
                    pengCards.Add(handCards[i]);
                    handCards.RemoveAt(i);
                }
                else
                {
                    i++;
                }
                if (pengCards.Count == 3)
                {
                    break;
                }
            }
        }
        else
        {
            var randomIndex = Random.Range(0, handCards.Count - 2);
            pengCards.Add(handCards[randomIndex]);
            pengCards.Add(handCards[randomIndex + 1]);
            handCards.RemoveAt(randomIndex);
            handCards.RemoveAt(randomIndex);
            foreach (GameObject pengCard in pengCards)
            {
                ResourcesMgr.Instance.SetCardMesh(pengCard, battleProxy.GetPlayerActS2C().actCard);
            }
        }
        foreach (GameObject card in pengCards)
        {
            card.transform.SetParent(pengGangCardContainer);
        }
        pengGangCards.Add(pengCards);
        BattleAreaUtil.ResortCard(this);
    }
예제 #8
0
    /// <summary>
    /// 播放被胡动作
    /// </summary>
    /// <returns></returns>
    public GameObject PlayHued()
    {
        GameObject huCard = null;

        if (putCards.Count > 0 && BattleAreaUtil.GetMeshCardValue(putCards[putCards.Count - 1]) == battleProxy.GetPlayerActS2C().actCard)
        {
            huCard = putCards[putCards.Count - 1];
            putCards.RemoveAt(putCards.Count - 1);
        }
        BattleAreaUtil.ResortPutCard(this);
        if (huCard == null)//找不到胡的牌,重新构建一个
        {
            huCard = ResourcesMgr.Instance.GetFromPool(battleProxy.GetPlayerActS2C().actCard);
            huCard.transform.SetParent(handCardContainer);
            huCard.transform.localPosition    = sendCard.localPosition;
            huCard.transform.localScale       = sendCard.localScale;
            huCard.transform.localEulerAngles = sendCard.localEulerAngles;
        }
        RecoveryHandCardsColor();
        return(huCard);
    }
예제 #9
0
    /// <summary>
    /// 播放回头碰杠动作
    /// </summary>
    public void PlayBackPengGang()
    {
        GameObject pengedCard = null;

        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
        {
            for (int i = 0; i < handCards.Count; i++)
            {
                if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                {
                    pengedCard = handCards[i];
                    handCards.RemoveAt(i);
                    break;
                }
            }
        }
        else
        {
            var randomIndex = UnityEngine.Random.Range(0, handCards.Count - 1);
            pengedCard = handCards[randomIndex];
            handCards.RemoveAt(randomIndex);
        }

        for (int i = 0; i < pengGangCards.Count; i++)
        {
            if (BattleAreaUtil.GetMeshCardValue(pengGangCards[i][0]) == battleProxy.GetPlayerActS2C().actCard)
            {
                pengGangCards[i].Add(pengedCard);
                pengedCard.transform.SetParent(pengGangCardContainer);
                for (int j = 0; j < pengGangCards[i].Count; j++)
                {
                    ResourcesMgr.Instance.SetCardMesh(pengGangCards[i][j], battleProxy.GetPlayerActS2C().actCard);
                }
                break;
            }
        }
        BattleAreaUtil.ResortCard(this);
    }
예제 #10
0
    /// <summary>
    /// 手牌变灰,true为全部,false-可能是部分
    /// </summary>
    /// <param name="canOperateCards"></param>
    /// <param name="isAllCards"></param>
    public void SetHandCardsGray(List <int> canOperateCards, bool isAllCards)
    {
        if (_data.userId == playerInfoProxy.userID)
        {
            if (!isAllCards)
            {
                List <GameObject> grayCardList = new List <GameObject>();
                grayCardList = handCards.FindAll(o => !canOperateCards.Contains(BattleAreaUtil.GetMeshCardValue(o)));

                var getCardPlayerVOS2C = battleProxy.playerIdInfoDic[battleProxy.GetPlayerActS2C().userId];
                if (!canOperateCards.Contains(getCardPlayerVOS2C.getCard))
                {
                    getCard.GetComponent <MeshRenderer>().material.color = Color.gray;
                    getCard.GetComponent <BoxCollider>().enabled         = false;
                }
                if (canOperateCards != null)
                {
                    for (int i = 0; i < grayCardList.Count; i++)
                    {
                        grayCardList[i].GetComponent <MeshRenderer>().material.color = Color.gray;
                        grayCardList[i].GetComponent <BoxCollider>().enabled         = false;
                    }
                }
                else
                {
                    Debug.LogError("canOperateCards is null");
                }
            }
            else
            {
                for (int i = 0; i < handCards.Count; i++)
                {
                    handCards[i].GetComponent <MeshRenderer>().material.color = Color.gray;
                    handCards[i].GetComponent <BoxCollider>().enabled         = false;
                }
            }
        }
    }
예제 #11
0
    /// <summary>
    /// 播放出牌动作
    /// </summary>
    public IEnumerator PlayPutCard()
    {
        var        cardValue = battleProxy.GetPlayerActS2C().actCard;
        GameObject putCard   = null;

        if (getCard != null)
        {
            handCards.Add(getCard);
            getCard.transform.DOKill();
            getCard = null;
        }
        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
        {
            for (int i = 0; i < handCards.Count; i++)
            {
                if (selectCardInstance == handCards[i].GetInstanceID() && BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                {
                    putCard = handCards[i];
                    handCards.RemoveAt(i);
                    break;
                }
            }
            if (putCard == null)
            {
                for (int i = 0; i < handCards.Count; i++)
                {
                    if (BattleAreaUtil.GetMeshCardValue(handCards[i]) == battleProxy.GetPlayerActS2C().actCard)
                    {
                        putCard = handCards[i];
                        handCards.RemoveAt(i);
                        break;
                    }
                }
            }
            if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
            {
                for (int i = 0; i < handCards.Count; i++)
                {
                    handCards[i].name = "HandCard" + i;
                }
                handCards.Sort(BattleAreaUtil.CompareCard);
            }
        }
        else
        {
            var randomIndex = Random.Range(0, handCards.Count - 1);
            putCard = handCards[randomIndex];
            handCards.RemoveAt(randomIndex);
            ResourcesMgr.Instance.SetCardMesh(putCard, cardValue);
        }
        putCards.Add(putCard);
        var selfInfoVO = battleProxy.playerIdInfoDic[playerInfoProxy.userID];
        var sitIndex   = (_data.sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM;

        GameMgr.Instance.StartCoroutine(AudioSystem.Instance.PlayEffectAudio(string.Format("Voices/{0}/Card/{1}", _data.sex == 1 ? "Man" : "Woman", cardValue)));
        if (battleProxy.isSkipTween)
        {
            BattleAreaUtil.ResortCard(this);
            ApplicationFacade.Instance.SendNotification(NotificationConstant.TING_UPDATE);
            ApplicationFacade.Instance.SendNotification(NotificationConstant.SHOW_CARD_ARROW, this);
            yield break;
        }
        battleProxy.SetIsForbit(true);
        putCard.transform.DOKill();
        if (sitIndex == 1)
        {
            putCard.transform.localEulerAngles = new Vector3(0, -60, 90);
            putCard.transform.DOScale(Vector3.one * 3, 0.14f);
        }
        else if (sitIndex == 2)
        {
            putCard.transform.localEulerAngles = new Vector3(0, 0, 180);
            putCard.transform.DOScale(Vector3.one * 1.5f, 0.14f);
        }
        else if (sitIndex == 3)
        {
            putCard.transform.localEulerAngles = new Vector3(0, 60, -90);
            putCard.transform.DOScale(Vector3.one * 3, 0.14f);
        }
        else
        {
            putCard.transform.DOScale(Vector3.one * 1.5f, 0.14f);
        }
        putCard.transform.DOLocalMove(sendCard.localPosition, 0.14f);
        yield return(new WaitForSeconds(0.25f));

        putCard.transform.SetParent(putCardContainer);
        var anglePosition = BattleAreaUtil.GetPutCardPosition(this, putCards.Count - 1);

        putCard.transform.localEulerAngles = anglePosition[0];
        putCard.transform.DOLocalMove(anglePosition[1], 0.1f);
        putCard.transform.DOScale(Vector3.one, 0.1f);
        yield return(new WaitForSeconds(0.1f));

        GameMgr.Instance.StartCoroutine(AudioSystem.Instance.PlayEffectAudio("Voices/Effect/PutCard"));
        BattleAreaUtil.ResortCard(this);
        ApplicationFacade.Instance.SendNotification(NotificationConstant.TING_UPDATE);
        battleProxy.SetIsForbit(false);
        ApplicationFacade.Instance.SendNotification(NotificationConstant.SHOW_CARD_ARROW, this);

        if (PlayerPrefs.GetInt(battleProxy.GetPlayerActS2C().userId.ToString()) == 1)
        {
            SetHandCardsGray(null, true);
        }
    }