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