Exemple #1
0
        //选牌中
        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);
        }
Exemple #3
0
        //开始选牌
        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);
        }
Exemple #5
0
 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);
        }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        /// <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;
                    }
                }
            }
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        /// <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);
        }
Exemple #14
0
 /// <summary>
 /// 回收Poker
 /// </summary>
 /// <param name="poker"></param>
 public void DespawnPoker(PokerCtrl poker)
 {
     Debug.Log("------回收Poker---------" + poker.Poker.ToChinese());
     poker.Reset();
     DespawnPoker(poker.gameObject);
 }