//选牌中 private void MiddleSelectedPoker() { if (m_IsSelectedPoker && m_StartSelectedPoker != null) { //计算拖拽时选中的牌 PokerCtrl ctrl = GetRayHitPoker(); if (ctrl != null) { m_CurrSelectedPoker.Clear(); m_EndSelectedPoker = ctrl; int startIndex = PrefabManager.Instance.GetIndex(RoomPaoDeKuaiProxy.Instance.PlayerSeat.Pos, m_StartSelectedPoker); int endIndex = PrefabManager.Instance.GetIndex(RoomPaoDeKuaiProxy.Instance.PlayerSeat.Pos, m_EndSelectedPoker); List <PokerCtrl> playerSeatPoker = PrefabManager.Instance.GetHand(RoomPaoDeKuaiProxy.Instance.PlayerSeat.Pos); int minIndex = endIndex - startIndex > 0 ? startIndex : endIndex; int maxIndex = endIndex + startIndex - minIndex; for (int i = minIndex; i <= maxIndex; ++i) { m_CurrSelectedPoker.Add(playerSeatPoker[i]); } //设置拖拽选中状态 for (int i = 0; i < playerSeatPoker.Count; ++i) { playerSeatPoker[i].SetSelected(false); } for (int i = 0; i < m_CurrSelectedPoker.Count; ++i) { m_CurrSelectedPoker[i].SetSelected(true); } } } }
/// <summary> /// 出牌 /// </summary> /// <param name="pos"></param> /// <param name="pokers"></param> /// <returns></returns> public List <PokerCtrl> PlayPokers(int pos, List <Poker> pokers, bool isPlayer) { if (!m_DicHand.ContainsKey(pos)) { return(null); } Debug.Log("--------------------------出牌 "); ClearCurrPlayPoker(); m_CurrPlayPoker.Clear(); List <PokerCtrl> handPoker = m_DicHand[pos]; for (int i = 0; i < pokers.Count; ++i) { for (int j = 0; j < handPoker.Count; ++j) { if (pokers[i].index == handPoker[j].Poker.index) { Debug.Log(string.Format("出牌:index:{0} size:{1} color:{2}", pokers[i].index, pokers[i].size, pokers[i].color)); PokerCtrl oldCtrl = handPoker[j]; PokerCtrl ctrl = SpawnPoker(pos, pokers[i], "Hand"); m_CurrPlayPoker.Add(ctrl); handPoker.Remove(oldCtrl); DespawnPoker(oldCtrl); break; } } } return(m_CurrPlayPoker); }
//开始选牌 private void StartSelectedPoker() { if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = m_UIScenePaoDeKuaiView.CurrentCamare.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity)) { Debug.Log("-------------Ray ray -----------------"); if (hit.transform.gameObject.layer != 1 << LayerMask.NameToLayer("PlayerHand")) { return; } } PokerCtrl ctrl = GetRayHitPoker(); if (ctrl != null) { //ResetDragPoker(); m_EndSelectedPoker = null; //结束选中的牌 m_CurrSelectedPoker.Clear(); //当前拖拽选中的牌 //获得第一张牌 m_StartSelectedPoker = ctrl; m_CurrSelectedPoker.Add(ctrl); m_IsSelectedPoker = true; ctrl.SetSelected(true); } }
/// <summary> /// 发牌(生成牌) /// </summary> /// <param name="toSeatPos"></param> /// <param name="poker"></param> /// <param name="isPlayer"></param> /// <param name="isSort"></param> /// <returns></returns> public PokerCtrl DrawPoker(int toSeatPos, Poker poker, bool isPlayer, bool isSort) { if (isPlayer && poker.color == 0) { AppDebug.ThrowError("生成了一张空牌 1"); } PokerCtrl ctrl = SpawnPoker(toSeatPos, poker, (isPlayer && (RoomPaoDeKuaiProxy.Instance.CurrentRoom.Status != RoomEntity.RoomStatus.Replay)) ? "PlayerHand" : "Hand"); if (!m_DicHand.ContainsKey(toSeatPos)) { m_DicHand.Add(toSeatPos, new List <PokerCtrl>()); } m_DicHand[toSeatPos].Add(ctrl); //if (isSort) //{ // Sort(m_DicHand[toSeatPos], RoomMaJiangProxy.Instance.GetSeatBySeatId(toSeatPos).UniversalList); //} if (isPlayer && (ctrl.Poker == null || ctrl.Poker.color == 0)) { AppDebug.ThrowError("生成了一张空牌 2"); } return(ctrl); }
private void ResetDragPoker() { m_StartSelectedPoker = null; //初始选中的牌 m_EndSelectedPoker = null; //结束选中的牌 m_IsSelectedPoker = false; m_CurrSelectedPoker.Clear(); //当前拖拽选中的牌 m_CurrLiftUpPoker.Clear(); //当前抬起的牌 }
/// <summary> /// 清空当前出的桌面牌 /// </summary> public void ClearCurrPlayPoker() { for (int i = m_CurrPlayPoker.Count - 1; i >= 0; --i) { PokerCtrl poker = m_CurrPlayPoker[i]; poker.Reset(); m_CurrPlayPoker.Remove(poker); DespawnPoker(poker.gameObject); } }
/// <summary> /// 清空当桌面 /// </summary> public void ClearTable() { ClearCurrPlayPoker(); foreach (KeyValuePair <int, List <PokerCtrl> > item in m_DicHand) { for (int i = item.Value.Count - 1; i >= 0; --i) { PokerCtrl poker = item.Value[i]; item.Value.RemoveAt(i); DespawnPoker(poker.gameObject); } } }
/// <summary> /// 获取牌的序号 /// </summary> /// <param name="seatPos"></param> /// <param name="majiang"></param> /// <returns></returns> public int GetIndex(int seatPos, PokerCtrl poker) { List <PokerCtrl> hand = m_DicHand[seatPos]; for (int i = 0; i < hand.Count; ++i) { if (poker.Poker.index == hand[i].Poker.index) { Debug.Log("摸的牌放入第" + i + "个位置"); return(i); } } return(0); }
/// <summary> /// 摸牌动作(替换牌) /// </summary> /// <param name="fromSeatIndex">从哪摸</param> /// <param name="toSeatPos">摸到哪</param> /// <param name="poker">摸啥牌</param> /// <returns></returns> public PokerCtrl DrawPoker(int toSeatPos, PokerCtrl poker, bool isPlayer) { if (isPlayer && poker == null) { AppDebug.ThrowError("摸牌动作是一张空牌"); } PokerCtrl pokerInWall = null; pokerInWall = m_ListWall[0]; m_ListWall.Remove(pokerInWall); poker.transform.SetParent(pokerInWall.transform.parent); poker.transform.position = pokerInWall.transform.position; poker.transform.rotation = pokerInWall.transform.rotation; DespawnPoker(pokerInWall); return(poker); }
/// <summary> /// 生成牌 /// </summary> /// <param name="seatPos">座位号</param> /// <param name="poker">牌</param> /// <param name="layer">层级</param> /// <returns></returns> public PokerCtrl SpawnPoker(int seatPos, Poker poker, string layer) { PokerCtrl ctrl = LoadPrefabPoker((poker == null || poker.color == 0) ? Poker.DefaultName : poker.ToString()).GetOrCreatComponent <PokerCtrl>(); //ctrl.Color = m_CurrentColor; //SeatEntity seat = RoomMaJiangProxy.Instance.GetSeatBySeatId(seatPos); //bool isUniversal = false; //if (seat != null) //{ // isUniversal = MahJongHelper.CheckUniversal(poker, seat.UniversalList); //} ctrl.Init(poker); ctrl.gameObject.SetLayer(LayerMask.NameToLayer(layer)); m_AllPoker.Add(ctrl); return(ctrl); }
/// <summary> /// 排序手牌 /// </summary> /// <param name="seatPos"></param> public void SortHandPokers(int seatPos) { List <PokerCtrl> lst = GetHand(seatPos); //MahJongManager if (lst == null || lst.Count == 0 || lst[0].Poker.size == 0) { return; } string temp = "排序后的手牌为:"; for (int i = 0; i < lst.Count; ++i) { temp += lst[i].Poker.ToString() + " "; } List <Poker> pokers = new List <Poker>(); for (int i = 0; i < lst.Count; ++i) { pokers.Add(lst[i].Poker); } PaoDeKuaiHelper.Sort(pokers); for (int i = 0; i < pokers.Count; ++i) { for (int j = lst.Count - 1; j >= 0; --j) { if (lst[j].Poker == pokers[i]) { PokerCtrl poker = lst[j]; lst.Remove(poker); lst.Insert(i, poker); break; } } } }
private PokerCtrl GetRayHitPoker() { PokerCtrl ctrl = null; Vector3 ScreenmousePos = m_UIScenePaoDeKuaiView.CurrentCamare.ScreenToWorldPoint(Input.mousePosition); RaycastHit2D[] hitArr = Physics2D.RaycastAll(new Vector2(ScreenmousePos.x, ScreenmousePos.y), new Vector2(ScreenmousePos.x, ScreenmousePos.y - 1f), 1, 1 << LayerMask.NameToLayer("PlayerHand")); if (hitArr.Length > 0) { ctrl = hitArr[0].collider.gameObject.GetComponent <PokerCtrl>(); for (int i = 1; i < hitArr.Length; ++i) { PokerCtrl ctrlTemp = hitArr[i].collider.gameObject.GetComponent <PokerCtrl>(); if (ctrl.Poker.size > ctrlTemp.Poker.size || (ctrl.Poker.size == ctrlTemp.Poker.size && ctrl.Poker.color > ctrlTemp.Poker.color)) { ctrl = ctrlTemp; } } } return(ctrl); }
/// <summary> /// 开局初始化 /// </summary> /// <param name="pokerCount"></param> /// <param name="playerCount"></param> /// <param name="bankerPos"></param> /// <returns></returns> public List <PokerCtrl> Rebuild(int pokerCount) { m_DicHand.Clear(); m_ListWall.Clear(); m_DicTable.Clear(); for (int i = 0; i < m_AllPoker.Count; ++i) { m_AllPoker[i].Reset(); } m_AllPoker.Clear(); m_nPokerCount = pokerCount; List <PokerCtrl> tempWall = new List <PokerCtrl>(); for (int i = 0; i < m_nPokerCount; ++i) { PokerCtrl majiang = SpawnPoker(1, null, "Hand"); tempWall.Add(majiang); } return(tempWall); }
/// <summary> /// 回收Poker /// </summary> /// <param name="poker"></param> public void DespawnPoker(PokerCtrl poker) { Debug.Log("------回收Poker---------" + poker.Poker.ToChinese()); poker.Reset(); DespawnPoker(poker.gameObject); }