Example #1
0
    protected override void OnPlayerClick()
    {
        base.OnPlayerClick();

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        RaycastHit[] hits = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("Table"));
        if (hits != null && hits.Length > 0)
        {
            MaJiangCtrl_PaiJiu ctrl = hits[0].collider.gameObject.GetComponent <MaJiangCtrl_PaiJiu>();
            if (ctrl == null)
            {
                return;
            }

#if IS_ZHANGJIAKOU
            //发送切牌信息
            if (RoomPaiJiuProxy.Instance.CurrentRoom.roomStatus == ROOM_STATUS.CUTPOKER && RoomPaiJiuProxy.Instance.PlayerSeat.isCutPoker == Seat.CutPoker.CutPoker)
            {
                Debug.Log("点击牌墙 可以切牌 ");
                for (int i = 0; i < wallList.Count; i++)
                {
                    if (ctrl == wallList[i])
                    {
                        int index = ctrl.transform.GetSiblingIndex();

                        PaiJiuGameCtrl.Instance.OnBtnClientSendCutPokerInfo(index / 2);
                        break;
                    }
                }
            }
#endif
        }
    }
Example #2
0
    /// <summary>
    /// 开局动画
    /// </summary>
    /// <param name="isReplay"></param>
    /// <returns></returns>
    private IEnumerator BeginAnimation(/*bool isReplay*/)
    {
        yield return(new WaitForSeconds(0.7f));

        //===================摇骰子=====================
        StartCoroutine(RollDice(0, 0, RoomPaiJiuProxy.Instance.CurrentRoom.currentDice.diceA, RoomPaiJiuProxy.Instance.CurrentRoom.currentDice.diceB));
        yield return(new WaitForSeconds(ROLL_DICE_ANIMATION_DURATION));

        int loopCount = RoomPaiJiuProxy.Instance.PlayerSeat.PokerList.Count / countPerTimes;   //===================根据手牌长度设定摸牌循环次数============count/countPerTimes=========

        int firstGivePos = RoomPaiJiuProxy.Instance.CurrentRoom.currentDice.seatPos;

        //按顺序发牌
        for (int i = 0; i < loopCount; ++i)
        {
            for (int j = 0; j < RoomPaiJiuProxy.Instance.CurrentRoom.SeatList.Count; ++j)
            {
                int         seatPos = (firstGivePos + j - 1) % RoomPaiJiuProxy.Instance.CurrentRoom.SeatList.Count;
                PaiJiu.Seat seat    = RoomPaiJiuProxy.Instance.CurrentRoom.SeatList[seatPos];
                if (seat.PlayerId <= 0)
                {
                    continue;
                }

                for (int k = 0; k < countPerTimes; ++k)
                {
                    //发牌入手
                    MaJiangCtrl_PaiJiu majiang = MahJongManager_PaiJiu.Instance.DrawMaJiang(seat.Pos, seat.PokerList[(i * countPerTimes) + k]);

                    //显示手牌
                    if (seat == RoomPaiJiuProxy.Instance.PlayerSeat)
                    {
                        m_UIScenePaiJiu3DView.DrawPoker(majiang);
                    }
                    else
                    {
                        GetSeatCtrlBySeatPos(seat.Pos).DrawPoker(majiang);
                    }
                }
#if IS_ZHANGJIAKOU
                AudioEffectManager.Instance.Play(ConstDefine_PaiJiu.FaPai_paijiu, Vector3.zero);        //播放声音
#endif
                yield return(new WaitForSeconds(DEAL_ANIMATION_DURATION));
            }
        }
#if IS_ZHANGJIAKOU
        // 如果有牌墙具体信息 则翻开牌墙
        if (RoomPaiJiuProxy.Instance.CurrentRoom.pokerWall.Count > 0)
        {
            DrawMaJiangWall(RoomPaiJiuProxy.Instance.CurrentRoom.pokerWall, true);
        }
#endif
        yield return(new WaitForSeconds(PLAYER_OPEN_POKER_DURATION));

        PaiJiuGameCtrl.Instance.ClientSendGetSettle();
    }
    /// <summary>
    /// 创建Poker
    /// </summary>
    /// <param name="majiang"></param>
    /// <param name="isInit"></param>
    /// <param name="onComplete"></param>
    private void CreatePoker(MaJiangCtrl_PaiJiu majiang, bool isInit, Action <UIItemHandPoker_PaiJiu> onComplete)
    {
        UIViewManager.Instance.LoadItemAsync("UIItemHandPoker_PaiJiu", (GameObject prefab) =>
        {
            GameObject go = Instantiate(prefab);
            majiang.gameObject.SetLayer(LayerMask.NameToLayer("UI"));
            UIItemHandPoker_PaiJiu uiPoker = go.GetComponent <UIItemHandPoker_PaiJiu>();
            uiPoker.SetUI(majiang);
            m_HandList.Add(uiPoker);


            uiPoker.gameObject.SetParent(m_HandConatiner.transform);
            m_HandConatiner.Sort();
            if (onComplete != null)
            {
                onComplete(uiPoker);
            }
        });
    }
Example #4
0
    /// <summary>
    ///  发牌
    /// </summary>
    /// <param name="room"></param>
    /// <param name="isPlayAnimation"></param>
    private void DrawPoker(PaiJiu.Room room, bool isPlayAnimation)
    {
        //===================摸牌=======================
        if (!isPlayAnimation)
        {
            for (int i = 0; i < room.SeatList.Count; i++)
            {
                PaiJiu.Seat seat = room.SeatList[i];
                //桌面上的牌
                for (int j = 0; j < seat.TablePokerList.Count; j++)
                {
                    AppDebug.Log(string.Format("重连房间座位{0}已出的牌{1}", seat.Pos, (seat.TablePokerList[j].type + "_" + seat.TablePokerList[j].size)));
                    MaJiangCtrl_PaiJiu majiang = MahJongManager_PaiJiu.Instance.DrawMaJiang(seat.Pos, seat.TablePokerList[j]);
                }

                //清空摸到手里的已出过的牌
                if (seat.TablePokerList.Count > 0)
                {
                    GetSeatCtrlBySeatPos(seat.Pos).ClearHandPoker();
                }
                //AppDebug.Log(string.Format("------------------------------------------------重连房间座位手牌长度{0}", seat.PokerList.Count));


                //手里的牌
                for (int j = 0; j < seat.PokerList.Count; ++j)
                {
                    //if (seat == RoomPaiJiuProxy.Instance.PlayerSeat) AppDebug.Log(string.Format("---PlayerSeat---------重连房间座位手牌{0}", seat.PokerList[j].type + "_" + seat.PokerList[j].size));
                    MaJiangCtrl_PaiJiu majiang = null;
                    majiang = MahJongManager_PaiJiu.Instance.DrawMaJiang(seat.Pos, seat.PokerList[j]);

                    //显示手牌
                    if (seat == RoomPaiJiuProxy.Instance.PlayerSeat)
                    {
                        m_UIScenePaiJiu3DView.DrawPoker(majiang);
                    }
                    else
                    {
                        GetSeatCtrlBySeatPos(seat.Pos).DrawPoker(majiang);
                    }
                    //DRB.MahJong.MaJiangSceneCtrl
                }
            }
#if IS_ZHANGJIAKOU
            // 如果有牌墙具体信息 则翻开牌墙
            if (room.pokerWall.Count > 0)
            {
                DrawMaJiangWall(room.pokerWall, false);
            }
#endif
        }
        else
        {
            //清空手牌
            for (int i = 0; i < room.SeatList.Count; i++)
            {
                SeatCtrl_PaiJiu seatCtrl = GetSeatCtrlBySeatPos(room.SeatList[i].Pos);
                if (seatCtrl != null)
                {
                    seatCtrl.ClearHandPoker();
                }
            }
            StartCoroutine(BeginAnimation(/*isReplay*/));
        }
    }
 /// <summary>
 ///  麻将UI 摸牌
 /// </summary>
 /// <param name="majiang"></param>
 /// <param name="isInit"></param>
 public void DrawPoker(MaJiangCtrl_PaiJiu majiang, bool isInit = false)
 {
     CreatePoker(majiang, isInit, null);
 }