예제 #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>
    public IEnumerator PlayCloseCardAction()
    {
        int rotateAngle = GlobalData.SitCardCloseArr[sitOffset];

        foreach (Transform item in handCardContainer)
        {
            if (item.gameObject.activeSelf)
            {
                item.localEulerAngles = new Vector3(rotateAngle, 0, 0);
            }
        }
        StartCoroutine(AudioSystem.Instance.PlayEffectAudio("Voices/Effect/RotateAllCard"));
        yield return(new WaitForSeconds(0.83f));

        if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
        {
            _data.handCards.Sort();
            for (int i = 0; i < handCards.Count; i++)
            {
                handCards[i].name = "HandCard" + i;
            }
            handCards.Sort(BattleAreaUtil.CompareCard);
        }
        BattleAreaUtil.ResortHandGangGetCard(this);
        foreach (Transform item in handCardContainer)
        {
            if (item.gameObject.activeSelf)
            {
                item.localEulerAngles = new Vector3(0, 0, 0);
            }
        }
    }
예제 #3
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;
 }
예제 #4
0
 /// <summary>
 /// 播放胡牌动作
 /// </summary>
 /// <param name="huedCard"></param>
 public void PlayHu(GameObject huedCard)
 {
     huedCard.transform.SetParent(handCardContainer);
     handCards.Add(huedCard);
     if (_data.userId == playerInfoProxy.userID || battleProxy.isReport)
     {
         for (int i = 0; i < handCards.Count; i++)
         {
             handCards[i].name = "HandCard" + i;
         }
         handCards.Sort(BattleAreaUtil.CompareCard);
     }
     BattleAreaUtil.ResortHandGangGetCard(this);
     RecoveryHandCardsColor();
 }
예제 #5
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);
    }
예제 #6
0
    /// <summary>
    /// 播放发牌动画
    /// </summary>
    private IEnumerator PlaySendCardAnimator()
    {
        //发牌之前先回收之前的牌
        foreach (BattleAreaItem areaItem in View.battleAreaItems)
        {
            areaItem.SaveAllCard();
        }
        View.cardArrowIcon.SetActive(false);
        ResourcesMgr.Instance.RecoveryAll();
        if (GlobalData.hasHeap)
        {
            foreach (BattleAreaItem areaItem in View.battleAreaItems)
            {
                BattleAreaUtil.InitHeapCard(areaItem, GlobalData.CardWare.Length);
            }
        }
        yield return(new WaitForSeconds(4f));

        HideRotaeSaizi();
        //Facade.SendNotification(NotificationConstant.HIDESAIZI);

        var selfInfoVO     = battleProxy.playerIdInfoDic[playerInfoProxy.userID];
        var sendStartIndex = (battleProxy.GetBankerPlayerInfoVOS2C().sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM;

        for (int i = 0; i < View.battleAreaItems.Count; i++)
        {
            View.battleAreaItems[i].SetData(battleProxy.playerSitInfoDic[GlobalData.GetNextSit(selfInfoVO.sit, i)]);
        }
        int sendCount = Mathf.CeilToInt((float)GlobalData.PLAYER_CARD_NUM / GlobalData.SEND_SINGLE) * GlobalData.SIT_NUM;

        for (int i = 0; i < sendCount; i++)
        {
            GameMgr.Instance.StartCoroutine(View.battleAreaItems[(i + sendStartIndex) % GlobalData.SIT_NUM].PlaySendCardAnimator());
            yield return(new WaitForSeconds(0.4f));
        }
        yield return(new WaitForSeconds(0.5f));

        for (int i = 0; i < View.battleAreaItems.Count; i++)
        {
            GameMgr.Instance.StartCoroutine(View.battleAreaItems[i].PlayCloseCardAction());
        }
        yield return(new WaitForSeconds(0.83f));

        ClientAIMgr.Instance.AIPutCard();
        battleProxy.SetIsForbit(false);
        SendNotification(NotificationConstant.MEDI_BATTLE_PLAYACTTIP);
    }
예제 #7
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);
    }
예제 #8
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);
    }
예제 #9
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);
    }
예제 #10
0
    /// <summary>
    /// 播放发牌动画
    /// </summary>
    private IEnumerator PlaySendCardAnimator()
    {
        //发牌之前先回收之前的牌
        foreach (BattleAreaItem areaItem in View.battleAreaItems)
        {
            areaItem.SaveAllCard();
        }
        View.cardArrowIcon.SetActive(false);
        if (GlobalData.hasHeap)
        {
            foreach (BattleAreaItem areaItem in View.battleAreaItems)
            {
                BattleAreaUtil.InitHeapCard(areaItem, GlobalData.CardWare.Length);
            }
        }
        var selfInfoVO     = battleProxy.playerIdInfoDic[playerInfoProxy.UserInfo.UserID];
        var sendStartIndex = (battleProxy.BankerPlayerInfoVOS2C.sit - selfInfoVO.sit + GlobalData.SIT_NUM) % GlobalData.SIT_NUM;

        for (int i = 0; i < View.battleAreaItems.Count; i++)
        {
            View.battleAreaItems[i].SetData(battleProxy.playerSitInfoDic[GlobalData.GetNextSit(selfInfoVO.sit, i)]);
        }
        //if (GlobalData.LoginServer != "127.0.0.1")
        //{
        int sendCount = Mathf.CeilToInt((float)GlobalData.PLAYER_CARD_NUM / GlobalData.SEND_SINGLE) * GlobalData.SIT_NUM;

        for (int i = 0; i < sendCount; i++)
        {
            GameMgr.Instance.StartCoroutine(View.battleAreaItems[(i + sendStartIndex) % GlobalData.SIT_NUM].PlaySendCardAnimator());
            yield return(new WaitForSeconds(0.4f));
        }
        yield return(new WaitForSeconds(0.5f));

        SendNotification(NotificationConstant.MEDI_BATTLE_UPDATEOOMMESSAGES);
        for (int i = 0; i < View.battleAreaItems.Count; i++)
        {
            GameMgr.Instance.StartCoroutine(View.battleAreaItems[i].PlayCloseCardAction());
        }
        //}
        yield return(new WaitForSeconds(0.83f));

        battleProxy.isForbit = false;

        SendNotification(NotificationConstant.MEDI_BATTLE_PLAYACTTIP);
    }
예제 #11
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);
    }
예제 #12
0
 /// <summary>
 /// 播放自摸胡牌动作
 /// </summary>
 public void PlaySelfHu()
 {
     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++)
         {
             handCards[i].name = "HandCard" + i;
         }
         handCards.Sort(BattleAreaUtil.CompareCard);
     }
     BattleAreaUtil.ResortHandGangGetCard(this);
     RecoveryHandCardsColor();
 }
예제 #13
0
    /// <summary>
    /// 播放牌面重置
    /// </summary>
    public void PlayRestCard()
    {
        List <GameObject> needSaveCard = new List <GameObject>();

        foreach (Transform card in handCardContainer)
        {
            if (defaultCardIdList.Contains(card.gameObject.GetInstanceID()))
            {
                continue;
            }
            needSaveCard.Add(card.gameObject);
        }
        foreach (GameObject item in needSaveCard)
        {
            ResourcesMgr.Instance.Add2Pool(item);
        }
        handCards.Clear();
        getCard = null;
        BattleAreaUtil.InitPlayerCards(this, true);
    }
예제 #14
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);
    }
예제 #15
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);
    }
예제 #16
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;
                }
            }
        }
    }
예제 #17
0
        /// <summary>
        /// 计算吃操作的权重
        /// </summary>
        /// <param name="actPowerVO">权重VO</param>
        /// <param name="canPutCards">可出的牌数组</param>
        /// <param name="passAddPower">是否增加过操作权重</param>
        private void CalculateChiPower(ActPowerVO actPowerVO, List <int> canPutCards, out bool passAddPower)
        {
            List <List <int> > chiSelectArr = BattleAreaUtil.GetCanChiArr(actPowerVO.actCard);

            chiPowerArr = new List <ChiPowerVO>();
            for (int i = 0; i < chiSelectArr.Count; i++)
            {
                var        copyCanPutCards = new List <int>(canPutCards);
                List <int> forbitCards     = new List <int>();

                if (chiSelectArr[i][0] == actPowerVO.actCard + 1)
                {
                    if (Array.IndexOf(GlobalData.CardValues, actPowerVO.actCard + 3) != -1)
                    {
                        forbitCards.Add(actPowerVO.actCard + 3);
                    }
                }
                else if (chiSelectArr[i][0] == actPowerVO.actCard - 2)
                {
                    if (Array.IndexOf(GlobalData.CardValues, actPowerVO.actCard - 3) != -1)
                    {
                        forbitCards.Add(actPowerVO.actCard - 3);
                    }
                }
                ChiPowerVO addChiPowerVO = new ChiPowerVO(chiSelectArr[i], actPowerVO.actCard, forbitCards, 0);
                chiPowerArr.Add(addChiPowerVO);
                bool isBreakCard = false;
                for (int j = 0; j < chiSelectArr[i].Count; j++)
                {
                    List <int> listFind = copyCanPutCards.FindAll(delegate(int s) {
                        return(s == chiSelectArr[i][j]);
                    });
                    if (listFind.Count > 1)//需要拆对
                    {
                        isBreakCard = true;
                    }
                }
                if (!isBreakCard)
                {
                    addChiPowerVO.power += 1000;
                }

                for (int j = 0; j < chiSelectArr[i].Count; j++)
                {
                    copyCanPutCards.Remove(chiSelectArr[i][j]);
                }
                bool hasDouble = false;
                for (int j = 0; j < copyCanPutCards.Count; j++)
                {
                    if (j > 0 && copyCanPutCards[j] == copyCanPutCards[j - 1])
                    {
                        hasDouble = true;
                        break;
                    }
                }
                if (hasDouble)
                {
                    addChiPowerVO.power += 1000;
                }
            }
            chiPowerArr.Sort((ChiPowerVO chiPowerVO1, ChiPowerVO chiPowerVO2) =>
            {
                if (chiPowerVO1.power > chiPowerVO2.power)
                {
                    return(-1);
                }
                else
                {
                    return(1);
                }
            });
            if (chiPowerArr[0].power <= 0)
            {
                passAddPower = true;
            }
            else
            {
                passAddPower      = false;
                actPowerVO.power += 50;
            }
        }
예제 #18
0
    /// <summary>
    /// 显示玩家操作提示
    /// </summary>
    public void ShowPlayActTip()
    {
        operates        = new List <OperateType>();
        operateCards    = new Dictionary <OperateType, List <int> >();
        operateActs     = new Dictionary <OperateType, List <PlayerActType> >();
        operateCardBtns = new List <GameObject>();
        for (int i = 0; i < battleProxy.GetPlayerActTipS2C().acts.Count; i++)
        {
            PlayerActType actType     = battleProxy.GetPlayerActTipS2C().acts[i];
            OperateType   operateType = OperateType.PASS;
            if (actType == PlayerActType.PUT_CARD)
            {
                continue;
            }
            switch (actType)
            {
            case PlayerActType.ZHI_GANG:
            case PlayerActType.BACK_AN_GANG:
            case PlayerActType.COMMON_AN_GANG:
            case PlayerActType.BACK_PENG_GANG:
            case PlayerActType.COMMON_PENG_GANG:
                operateType = OperateType.GANG;
                break;

            case PlayerActType.SELF_HU:
            case PlayerActType.QIANG_ZHI_GANG_HU:
            case PlayerActType.QIANG_PENG_GANG_HU:
            case PlayerActType.QIANG_AN_GANG_HU:
            case PlayerActType.CHI_HU:
                operateType = OperateType.HU;
                break;

            case PlayerActType.PENG:
                operateType = OperateType.PENG;
                break;

            case PlayerActType.CHI:
                operateType  = OperateType.CHI;
                chiSelectArr = BattleAreaUtil.GetCanChiArr(battleProxy.GetPlayerActTipS2C().actCards[i]);
                break;

            case PlayerActType.BAO_TING:
                operateType = OperateType.BAOTING;
                break;

            case PlayerActType.BAO_DIAO:
                operateType = OperateType.BAODIAO;
                break;

            case PlayerActType.CHENG_DIAO:
                operateType       = OperateType.CHENDIAO;
                chenDiaoSelectArr = battleProxy.GetPlayerActTipS2C().chenDiaoCards;
                break;

            case PlayerActType.BAO_JIA:
                operateType = OperateType.BAOJIA;
                break;

            case PlayerActType.PASS:
                operateType = OperateType.PASS;
                break;
            }
            if (operates.IndexOf(operateType) == -1)
            {
                operates.Add(operateType);
                operateCards.Add(operateType, new List <int>());
                operateActs.Add(operateType, new List <PlayerActType>());
            }
            operateCards[operateType].Add(battleProxy.GetPlayerActTipS2C().actCards[i]);
            operateActs[operateType].Add(actType);
            //if (operateType == OperateType.CHENDIAO)
            //{
            //    battleProxy.GetPlayerActTipS2C().chenDiaoCards.ForEach(o=> { operateCards[operateType].Add(o); });
            //    operateActs[operateType].Add(actType);
            //}
        }
        for (int i = 0; i < actionBtns.Count; i++)
        {
            if (i >= operateActs.Count)
            {
                actionBtnContainers[i].gameObject.SetActive(false);
                continue;
            }
            actionBtnContainers[i].gameObject.SetActive(true);
            foreach (Transform item in actionBtns[i].gameObject.transform)
            {
                Destroy(item.gameObject);
            }
            switch (operates[i])
            {
            case OperateType.GANG:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionGang");
                break;

            case OperateType.HU:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionHu");
                break;

            case OperateType.PASS:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionGuo");
                break;

            case OperateType.PENG:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionPeng");
                break;

            case OperateType.CHI:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionChi");
                break;

            case OperateType.BAOTING:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoTing");
                break;

            case OperateType.BAODIAO:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoDiao");
                break;

            case OperateType.BAOJIA:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionBaoJia");
                break;

            case OperateType.CHENDIAO:
                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/91city_chipenggang/ActionChenDiao");
                break;
            }
            actionBtns[i].gameObject.GetComponent <Animator>().Play("ShowActBtn" + (i + 1), 0, 0);
        }
        for (int i = 0; i < operateActs.Count; i++)
        {
            var perPosition = actionBtnContainers[i].localPosition;
            perPosition = new Vector3(503.3f - 163.8f * (operateActs.Count - i - 1), perPosition.y, perPosition.z);
            actionBtnContainers[i].localPosition = perPosition;
        }
    }
예제 #19
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);
        }
    }
예제 #20
0
    /// <summary>
    /// 显示玩家操作提示
    /// </summary>
    public void ShowPlayActTip()
    {
        //ClearOperateCardBtns();
        operates        = new List <OperateType>();
        operateCards    = new Dictionary <OperateType, List <int> >();
        operateActs     = new Dictionary <OperateType, List <PlayerActType> >();
        operateCardBtns = new List <GameObject>();
        for (int i = 0; i < battleProxy.playerActTipS2C.acts.Count; i++)
        {
            PlayerActType actType     = battleProxy.playerActTipS2C.acts[i];
            OperateType   operateType = OperateType.PASS;
            if (actType == PlayerActType.PUT_CARD)
            {
                continue;
            }
            if (actType == PlayerActType.PUT_FLOWER_CARD)
            {
                //PutFlowerCard();
                continue;
            }
            switch (actType)
            {
            case PlayerActType.ZHI_GANG:
            case PlayerActType.BACK_AN_GANG:
            case PlayerActType.COMMON_AN_GANG:
            case PlayerActType.BACK_PENG_GANG:
            case PlayerActType.COMMON_PENG_GANG:
                operateType = OperateType.GANG;
                break;

            case PlayerActType.SELF_HU:
            case PlayerActType.QIANG_ZHI_GANG_HU:
            case PlayerActType.QIANG_PENG_GANG_HU:
            case PlayerActType.QIANG_AN_GANG_HU:
            case PlayerActType.CHI_HU:
                operateType = OperateType.HU;
                break;

            case PlayerActType.PASS:
                operateType = OperateType.PASS;
                break;

            case PlayerActType.PENG:
                operateType = OperateType.PENG;
                break;

            case PlayerActType.CHI:
                operateType  = OperateType.CHI;
                chiSelectArr = BattleAreaUtil.GetCanChiArr(battleProxy.playerActTipS2C.actCards[i]);
                break;
                //case PlayerActType.PUT_FLOWER_CARD:
                //    //发送打花牌消息
                //    operateType = OperateType.FLOWER;
                //    break;
            }
            if (operates.IndexOf(operateType) == -1)
            {
                operates.Add(operateType);
                operateCards.Add(operateType, new List <int>());
                operateActs.Add(operateType, new List <PlayerActType>());
            }
            operateCards[operateType].Add(battleProxy.playerActTipS2C.actCards[i]);
            operateActs[operateType].Add(actType);
        }
        for (int i = 0; i < actionBtns.Count; i++)
        {
            if (i >= operateActs.Count)
            {
                actionBtnContainers[i].gameObject.SetActive(false);
                continue;
            }
            actionBtnContainers[i].gameObject.SetActive(true);
            switch (operates[i])
            {
            case OperateType.GANG:
                actionBtns[i].gameObject.SetActive(true);

                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionGang");
                break;

            case OperateType.HU:
                actionBtns[i].gameObject.SetActive(true);

                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionHu");
                break;

            case OperateType.PASS:
                actionBtns[i].gameObject.SetActive(true);

                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionGuo");
                break;

            case OperateType.PENG:
                actionBtns[i].gameObject.SetActive(true);

                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionPeng");
                break;

            case OperateType.CHI:
                actionBtns[i].gameObject.SetActive(true);

                actionBtns[i].gameObject.GetComponent <Image>().sprite = Resources.Load <Sprite>("Textures/ActionChi");
                break;
            }
            Animator animator = actionBtns[i].gameObject.GetComponent <Animator>();
            actionBtns[i].gameObject.GetComponent <Animator>().Play("ShowActBtn" + (i + 1), 0, 0);
        }
    }
예제 #21
0
    /// <summary>
    /// 播放摸牌动画
    /// </summary>
    public IEnumerator PlayGetCard()
    {
        GameObject cardItem = null;

        if (GlobalData.hasHeap)
        {
            cardItem = (ApplicationFacade.Instance.RetrieveMediator(Mediators.BATTLE_AREA_MEDIATOR) as BattleAreaMediator).GetHeapCard(battleProxy.GetPlayerActS2C().actCard);
            cardItem.transform.SetParent(handCardContainer);
            cardItem.transform.localScale       = sendCard.transform.localScale;
            cardItem.transform.localEulerAngles = sendCard.transform.localEulerAngles;
        }
        else
        {
            cardItem = ResourcesMgr.Instance.GetFromPool(battleProxy.GetPlayerActS2C().actCard);
            cardItem.transform.SetParent(handCardContainer);
            cardItem.transform.localPosition    = sendCard.transform.localPosition;
            cardItem.transform.localScale       = sendCard.transform.localScale;
            cardItem.transform.localEulerAngles = sendCard.transform.localEulerAngles;
        }

        Vector3 targetPos = Vector3.zero;

        if (handCards.Count > 0)
        {
            targetPos = handCards[handCards.Count - 1].transform.localPosition + getHandCardGap;
        }
        else
        {
            targetPos = getCardContainer.localPosition;
        }

        if (_data.userId == playerInfoProxy.userID)
        {
            targetPos.y = 0;
            targetPos.z = 0;
        }
        if (getCard != null)
        {
            handCards.Add(getCard);
            getCard.transform.DOKill();
            getCard = null;
        }
        if (handCards.Count != _data.handCards.Count)
        {
            Debug.LogError("显示和数据不一致");
        }
        getCard = cardItem;
        if (battleProxy.isSkipTween)
        {
            cardItem.transform.localPosition = targetPos;
            if (_data.userId == playerInfoProxy.userID)
            {
                cardItem.layer = GlobalData.SELF_HAND_CARDS;
            }
            else if (dir == AreaDir.RIGHT)
            {
                cardItem.layer = GlobalData.RIGHT_HAND_CARDS;
            }
            else
            {
                cardItem.layer = GlobalData.OTHER_CARDS;
            }
            BattleAreaUtil.ResortHandGangGetCard(this);
        }
        else
        {
            cardItem.transform.DOLocalMove(targetPos, 0.1f);
            if (_data.userId == playerInfoProxy.userID)
            {
                cardItem.layer = GlobalData.SELF_HAND_CARDS;
            }
            else if (dir == AreaDir.RIGHT)
            {
                cardItem.layer = GlobalData.RIGHT_HAND_CARDS;
            }
            else
            {
                cardItem.layer = GlobalData.OTHER_CARDS;
            }
            battleProxy.SetIsForbit(true);
            yield return(new WaitForSeconds(0.15f));

            BattleAreaUtil.ResortHandGangGetCard(this);
            battleProxy.SetIsForbit(false);
        }
    }
예제 #22
0
 /// <summary>
 /// 播放过的动作
 /// </summary>
 public void PlayPass()
 {
     BattleAreaUtil.ResortCard(this);
 }