/// <summary> /// 发牌 /// </summary> public void DealPoker(int seatPos, bool isAni) { SeatEntity seat = RoomJuYouProxy.Instance.GetSeatBySeatId(seatPos); if (seat == null) { return; } List <MaJiangCtrl_JuYou> majiangs = new List <MaJiangCtrl_JuYou>(); List <MaJiangCtrl_JuYou> majiangsHand = MahJongManager_JuYou.Instance.GetHand(seat.Index); //手里的牌 for (int j = 0; j < seat.PokerList.Count; ++j) { if (majiangsHand == null || j >= majiangsHand.Count) { MaJiangCtrl_JuYou majiang = null; majiang = MahJongManager_JuYou.Instance.DrawMaJiang(seat.Index, seat.PokerList[j]); majiangs.Add(majiang); } } if (majiangs.Count > 0) { m_Seats[seat.Index].DrawPoker(majiangs, false); } }
/// <summary> /// 座位弃牌 /// </summary> public void OnSeatDiscardPoker() { //找到手牌 List <MaJiangCtrl_JuYou> handPokerList = MahJongManager_JuYou.Instance.GetHand(m_nSeatIndex); if (handPokerList == null) { return; } int handPokerListCount = handPokerList.Count; List <MaJiangCtrl_JuYou> TablePokerList = MahJongManager_JuYou.Instance.GetDicTable(m_nSeatIndex); //if (TablePokerList != null && TablePokerList.Count >= 16) Debug.Log("弃掉桌面牌" + m_nSeatIndex+ "TablePokerList.Count"+ TablePokerList.Count); if (TablePokerList != null && TablePokerList.Count >= 16) { MahJongManager_JuYou.Instance.ClearDicTable(m_nSeatIndex); } for (int i = 0; i < handPokerListCount; i++) { AppDebug.Log(string.Format("座位Index{0}弃牌{1}", m_nSeatIndex, handPokerList[0].Poker.ToChinese())); MaJiangCtrl_JuYou majiang = MahJongManager_JuYou.Instance.ClearHandPoker(m_nSeatIndex, handPokerList[0].Poker); if (majiang != null) { majiang.gameObject.SetParent(m_DeskTopContainer.transform); majiang.gameObject.layer = m_DeskTopContainer.gameObject.layer; majiang.transform.localPosition = m_DeskTopContainer.GetLocalPos(majiang.transform); } } //if (TablePokerList != null && TablePokerList.Count > 18) MahJongManager_JuYou.Instance.ClearDicTable(m_nSeatIndex); }
/// <summary> /// 开局 /// </summary> /// <param name="room"></param> /// <param name="isPlayAnimation"></param> public void Begin(RoomEntity room, bool isPlayAnimation) { //CompassCtrl.Instance.SetNormal(); //<--------------指南针控制 //UIItemTingTip.Instance.Close(); //m_UISceneMaJiang3DView.Begin(); //m_UIScenePaiJiu3DView. //设置开局的 //====================初始化墙==================== InitWall(isPlayAnimation); //===================摸牌======================= if (!isPlayAnimation) { for (int i = 0; i < room.SeatList.Count; i++) { SeatEntity seat = room.SeatList[i]; //桌面上的牌 for (int j = 0; j < seat.TablePokerList.Count; j++) { MaJiangCtrl_JuYou majiang = MahJongManager_JuYou.Instance.DrawMaJiang(seat.Index, seat.TablePokerList[j]); //清空摸到手里的已出过的牌 if (seat.TablePokerList.Count > 0) { m_Seats[seat.Index].OnSeatDiscardPoker(); } //if (seat.TablePokerList.Count > 0) MahJongManager_JuYou.Instance.ClearDicTable(seat.Index); } List <MaJiangCtrl_JuYou> majiangs = new List <MaJiangCtrl_JuYou>(); //手里的牌 for (int j = 0; j < seat.PokerList.Count; ++j) { if (seat == RoomJuYouProxy.Instance.PlayerSeat) { AppDebug.Log(string.Format("---PlayerSeat---------重连房间座位手牌{0}", seat.PokerList[j].ToChinese())); } MaJiangCtrl_JuYou majiang = null; majiang = MahJongManager_JuYou.Instance.DrawMaJiang(seat.Index, seat.PokerList[j]); majiangs.Add(majiang); } m_Seats[seat.Index].DrawPoker(majiangs, true); } } else { //// 清空手牌 // for (int i = 0; i < room.SeatList.Count; i++) // { // SeatCtrl_JuYou seatCtrl = m_Seats[room.SeatList[i].Index]; // if (seatCtrl != null) seatCtrl.OnSeatDiscardPoker(); // } //其他动画 m_UISceneJuYou3DView.Begin(RoomJuYouProxy.Instance.CurrentRoom); //StartCoroutine(BeginAnimation(/*isReplay*/)); } }
//public void CreateWall() //{ // for (int i = 0; i < m_nMaJiangCount; ++i) // { // MaJiangCtrl_JuYou majiang = SpawnMaJiang(1, null, "Hand"); // m_ListWall.Add(majiang); // } //} public void CreateWall() { for (int i = 0; i < m_nMaJiangCount; ++i) { MaJiangCtrl_JuYou majiang = SpawnMaJiang(1, null, "Hand"); m_ListWall.Add(majiang); } }
public MaJiangCtrl_JuYou SpawnMaJiang(int seatPos, Poker poker, string layer) { MaJiangCtrl_JuYou ctrl = m_WallPool.Spawn((poker == null || poker.color == 0) ? "1_1" : poker.ToString()).gameObject.GetOrCreatComponent <MaJiangCtrl_JuYou>(); //====================麻将颜色============================================== //if (string.IsNullOrEmpty(m_CurrentColor)) //{ // AppDebug.LogError("颜色是空的???"); // string materialName = "mj_dif"; // string materialPath = string.Format("download/{0}/source/modelsource/materials/{1}.drb", ConstDefine.GAME_NAME, materialName); // AssetBundleManager.Instance.LoadOrDownload<Material>(materialPath, materialName, (Material go) => // { // if (go != null) // { // ctrl.GetComponent<Renderer>().material = go; // } // }, 1); //} //else //{ // string materialName = string.Format("mj_{0}", m_CurrentColor); // string materialPath = string.Format("download/{0}/source/modelsource/materials/{1}.drb", ConstDefine.GAME_NAME, materialName); // AssetBundleManager.Instance.LoadOrDownload<Material>(materialPath, materialName, (Material go) => // { // if (go != null) // { // ctrl.GetComponent<Renderer>().material = go; // } // else // { // string materialName1 = "mj_dif"; // string materialPath1 = string.Format("download/{0}/source/modelsource/materials/{1}.drb", ConstDefine.GAME_NAME, materialName1); // AssetBundleManager.Instance.LoadOrDownload<Material>(materialPath1, materialName1, (Material go1) => // { // if (go1 != null) // { // ctrl.GetComponent<Renderer>().material = go1; // } // }, 1); // } // }, 1); //} // ============================================================ //bool isUniversal = MahJongHelper.CheckUniversal(poker, RoomJuYouProxy.Instance.GetSeatBySeatId(seatPos).UniversalList); ctrl.Init(poker); ctrl.gameObject.SetLayer(LayerMask.NameToLayer(layer)); m_AllPoker.Add(ctrl); return(ctrl); }
private void ClearPokerList(List <MaJiangCtrl_JuYou> lst) { MaJiangCtrl_JuYou majiang = null; for (int i = lst.Count - 1; i >= 0; --i) { majiang = lst[i]; lst.Remove(majiang); if (majiang != null) { m_WallPool.Despawn(majiang.transform); } else { AppDebug.ThrowError("没找到要丢弃的牌!!!!!!" + lst[i].ToString()); } } }
protected override void OnPlayerClick() { base.OnPlayerClick(); //如果点击的是UI 不做处理 if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = HandPokerCamera.ScreenPointToRay(Input.mousePosition); RaycastHit[] hitArr = Physics.RaycastAll(ray, Mathf.Infinity, 1 << LayerMask.NameToLayer("PlayerHand")); Debug.Log(hitArr.Length); if (hitArr.Length > 0) { MaJiangCtrl_JuYou ctrl = hitArr[0].collider.gameObject.GetComponent <MaJiangCtrl_JuYou>(); AudioEffectManager.Instance.Play("dianpai", Vector3.zero, false); //for (int q = 0; q < RoomMaJiangProxy.Instance.PlayerSeat.HoldPoker.Count; ++q) //{ // if (MahJongHelper.HasPoker(ctrl.Poker, RoomMaJiangProxy.Instance.PlayerSeat.HoldPoker[q])) // { // List<MaJiangCtrl> hand = MahJongManager.Instance.GetHand(RoomMaJiangProxy.Instance.PlayerSeat.Pos); // for (int i = 0; i < hand.Count; ++i) // { // if (MahJongHelper.ContainPoker(hand[i].Poker, RoomMaJiangProxy.Instance.PlayerSeat.HoldPoker[q])) // { // hand[i].Hold(true, false); // } // } // return; // } //} if (!ctrl.IsBeenPlayed) { JuYouGameCtrl.Instance.OnPokerClick(ctrl); } } }
/// <summary> /// 丢弃手牌 /// </summary> /// <param name="seatIndex"></param> public MaJiangCtrl_JuYou ClearHandPoker(int seatIndex, Poker poker) { List <MaJiangCtrl_JuYou> lst = m_DicHand[seatIndex]; //从手牌里找牌 MaJiangCtrl_JuYou majiang = null; for (int i = 0; i < lst.Count; ++i) { if (lst[i].Poker.index == poker.index) { majiang = lst[i]; lst.Remove(lst[i]); //lst.RemoveAt(i); break; } } if (majiang == null) { AppDebug.ThrowError("没找到要打的牌!!!!!!" + poker.ToString()); } MaJiangCtrl_JuYou ctrl = SpawnMaJiang(seatIndex, poker, "Table"); if (majiang != null) { ctrl.transform.position = majiang.transform.position; ctrl.transform.rotation = majiang.transform.rotation; m_WallPool.Despawn(majiang.transform);//删除 } //把牌放桌面上 if (!m_DicTable.ContainsKey(seatIndex)) { m_DicTable.Add(seatIndex, new List <MaJiangCtrl_JuYou>()); } m_DicTable[seatIndex].Add(ctrl); return(ctrl); }
/// <summary> /// 摸牌 /// </summary> /// <param name="fromSeatIndex">从哪摸</param> /// <param name="toSeatIndex">摸到哪</param> /// <param name="poker">摸啥牌</param> /// <returns></returns> public MaJiangCtrl_JuYou DrawMaJiang(int toSeatIndex, Poker poker) { if (CurrentWallIndex >= m_ListWall.Count) { CurrentWallIndex = 0; } if (m_ListWall == null || m_ListWall.Count <= CurrentWallIndex) { AppDebug.ThrowError("摸的牌墙木有牌了阿!!!!"); return(null); } MaJiangCtrl_JuYou majiang = null; //MaJiangCtrl majiang = null; majiang = m_ListWall[CurrentWallIndex++]; MaJiangCtrl_JuYou ctrl = SpawnMaJiang(toSeatIndex, poker, toSeatIndex == 0? "PlayerHand" : "Hand"); ctrl.transform.SetParent(majiang.transform.parent); ctrl.transform.position = majiang.transform.position; ctrl.transform.rotation = majiang.transform.rotation; //m_ListWall.Remove(majiang); m_WallPool.Despawn(majiang.transform); if (!m_DicHand.ContainsKey(toSeatIndex)) { m_DicHand.Add(toSeatIndex, new List <MaJiangCtrl_JuYou>()); } m_DicHand[toSeatIndex].Add(ctrl); --OverplusWallCount; return(ctrl); }