Exemplo n.º 1
0
    /// <summary>
    /// 出牌
    /// </summary>
    /// <param name="paiValue"></param>
    /// <returns></returns>
    public IEnumerator OutCard(int paiValue)
    {
        yield return(null);

        if (viewSeat == 0)
        {
            for (int i = 0; i < handCardList.Count; ++i)
            {
                if (handCardList[i].PaiVal == paiValue)
                {
                    MJItem item = handCardList[i];
                    handCardList[i].eventPai -= this.myPaiEvents;
                    handCardList.Remove(handCardList[i]);
                    StartCoroutine(DoOutCard(item));
                    yield break;
                }
            }
        }
        else
        {
            int    index = Random.Range(0, handCardList.Count);
            MJItem item  = handCardList[index];
            handCardList.Remove(handCardList[index]);
            item.PaiVal = paiValue;
            StartCoroutine(DoOutCard(item));
            yield break;
        }
    }
Exemplo n.º 2
0
 public void InitMJItem()
 {
     if (_mjItemList != null)
     {
         for (int i = 0; i < _mjItemList.Count; ++i)
         {
             MJItem item = _mjItemList[i];
             if (item != null)
             {
                 _mjItemList[i].gameObject.SetActive(false);
             }
         }
     }
     else
     {
         _mjItemList = new List <MJItem>(136);
         for (int i = 0; i < 136; ++i)
         {
             _mjItemList.Add(null);
         }
         _prefab = Resources.Load <GameObject>(MJResMgr.prefabPath + "MJ");
         if (_prefab == null)
         {
             Debug.LogError("CreatMJWall");
         }
     }
 }
Exemplo n.º 3
0
    private List <MJItem> GetOperCardList(MJOperatorModel data, MJItem item)
    {
        int           index    = 0;
        List <MJItem> itemList = new List <MJItem>();

        int[] pais = data.Pais;
        for (int i = 0; i < pais.Length; ++i)
        {
            if (pais[i] > 0 && pais[i] < 48)
            {
                while (index < handCardList.Count)
                {
                    if (handCardList[index].PaiVal == pais[i])
                    {
                        itemList.Add(handCardList[index++]);
                        break;
                    }
                }
                Debug.LogError("GetOperCardList , oper card is not exist");
            }
            else
            {
                Debug.LogError("GetOperCardList data.Pais[" + i + "]:" + pais[i]);
            }
        }
        item.PaiVal = data.Pai;
        itemList.Add(item);

        InsertSort(itemList);
        return(itemList);
    }
Exemplo n.º 4
0
 void Update()
 {
     if (Input.GetMouseButtonUp(0))
     {
         Ray        ray;
         RaycastHit rayhit;
         if (MahjongConst.IsUsed2DCamera)
         {
             ray = _mjCamera.Camera2D.ScreenPointToRay(Input.mousePosition);
         }
         else
         {
             ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         }
         if (Physics.Raycast(ray, out rayhit))
         {
             //Debug.Log(rayhit.collider.gameObject.name);
             GameObject go    = rayhit.collider.gameObject;
             Transform  trans = go.transform.parent;
             if (trans != null)
             {
                 MJItem item = trans.GetComponent <MJItem>();
                 if (item != null)
                 {
                     item.OnClick();
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
    /// <summary>
    /// 倒牌
    /// </summary>
    /// <returns></returns>
    public IEnumerator FallCard(bool show = true)
    {
        yield return(null);

        if (viewSeat == 0)
        {
            for (int i = 0; i < handCardList.Count; i++)
            {
                handCardList[i].eventPai -= this.myPaiEvents;
            }
            if (MahjongConst.IsUsed2DCamera)
            {
                yield break;
            }
        }
        for (int i = 0; i < handCardList.Count; ++i)
        {
            float  x  = i * MahjongConst.MahjongOffset_x;
            MJItem mj = handCardList[i];
            mj.transform.DOLocalMove(new Vector3(x, 0, -0.1f), 0.05f);
            float r = -90f;
            if (show)
            {
                r = 90f;
            }
            mj.transform.DOLocalRotate(new Vector3(r, 0, 0), 0.05f);
        }
        yield return(new WaitForSeconds(0.05f));
    }
Exemplo n.º 6
0
    private void myPaiEvents(MJItem val)
    {
        int paiVal = val.PaiVal;

        //测试用 改请求
        StartCoroutine(OutCard(val.PaiVal));
    }
Exemplo n.º 7
0
    /// <summary>
    /// 操作牌调用
    /// </summary>
    /// <param name="oper"></param>
    /// <returns></returns>
    public IEnumerator OperateCard(MJOperatorModel oper, MJItem item)
    {
        yield return(null);

        switch (oper.Oper)
        {
        case MahjongOperAll.GiveUp:
            break;

        case MahjongOperAll.Collect:
        case MahjongOperAll.TripletLeft:
        case MahjongOperAll.TripletCenter:
        case MahjongOperAll.TripletRight:
        case MahjongOperAll.DarkBar:
        case MahjongOperAll.BrightBarLeft:
        case MahjongOperAll.BrightBarCenter:
        case MahjongOperAll.BrightBarRight:
            CreateOperCard(oper, item);
            break;

        case MahjongOperAll.AddBarLeft:
        case MahjongOperAll.AddBarCenter:
        case MahjongOperAll.AddBarRight:
            AddOperCard(oper, item);
            break;

        case MahjongOperAll.Ting:
        case MahjongOperAll.Hu:
            break;
        }
    }
Exemplo n.º 8
0
    int lastIndex; //尾牌位置


    /// <summary>
    /// 发牌
    /// </summary>
    /// <param name="dun">牌墩,从视图玩家1左边开始数,墩数从1开始</param>
    /// <param name="viewSeat">视图玩家座位号</param>
    /// <returns></returns>
    IEnumerator SendAllCard(int dun, int viewSeat)
    {
        yield return(null);

        index     = dun * 2 - 1;
        lastIndex = index + 2;
        //4圈牌
        for (int i = 0; i < 4; ++i)
        {
            //4人
            for (int j = 0; j < 4; j++)
            {
                int num = 4;
                if (i == 3)
                {
                    if (viewSeat == j)
                    {
                        num = 2;
                    }
                    else
                    {
                        num = 1;
                    }
                }
                //牌数
                for (int k = 0; k < num; ++k)
                {
                    float x = (i * 4 + k) * MahjongConst.MahjongOffset_x;
                    if (index == -1)
                    {
                        index = 135;
                    }
                    MJItem mj = _mjItemMgr.MJItemList[index--];
                    //*******测试*********
                    int testIndex    = Random.Range(0, mahjongValueList.Count);
                    int testPaiValue = mahjongValueList[testIndex];
                    mahjongValueList.Remove(testIndex);
                    //*******测试*********
                    mj.PaiVal = testPaiValue;
                    mj.transform.SetParent(_mjPlayerList[j]._handCardPoint);
                    mj.transform.DOLocalMove(new Vector3(x, 0, 0), 0.05f);
                    mj.transform.DOLocalRotate(Vector3.zero, 0.05f);
                    _mjPlayerList[j].AddHandCard(mj);
                    yield return(new WaitForSeconds(0.03f));

                    if (MahjongConst.IsUsed2DCamera && j == 0)
                    {
                        mj.Layer = _mjPlayerList[j]._handCardPoint.gameObject.layer;
                    }
                }
                yield return(new WaitForSeconds(0.2f));
            }
        }
    }
Exemplo n.º 9
0
 /// <summary>
 /// 更新操作牌
 /// </summary>
 /// <param name="data"></param>
 /// <param name="item"></param>
 private void AddOperCard(MJOperatorModel data, MJItem item)
 {
     for (int i = 0; i < operCardList.Count; ++i)
     {
         if (data.Pai == operCardList[i].KeyItem.PaiVal)
         {
             item.PaiVal = data.Pai;
             operCardList[i].AddShow(data, item);
             break;
         }
     }
 }
Exemplo n.º 10
0
 /// <summary>
 /// 排序
 /// </summary>
 /// <returns></returns>
 IEnumerator SortHandCard()
 {
     //handCardList.Sort();
     InsertSort(handCardList);
     for (int i = 0; i < handCardList.Count; ++i)
     {
         float  x  = i * MahjongConst.MahjongOffset_x;
         MJItem mj = handCardList[i];
         mj.transform.DOLocalMove(new Vector3(x, 0, 0), 0.05f);
         mj.transform.DOLocalRotate(Vector3.zero, 0.05f);
     }
     yield return(new WaitForSeconds(0.05f));
 }
Exemplo n.º 11
0
    /// <summary>
    /// 操作牌
    /// </summary>
    /// <param name="viewSeat"></param>
    /// <param name="oper"></param>
    /// <returns></returns>
    public IEnumerator OperateCard(int viewSeat, MJOperatorModel oper, int outCardViewSeat)
    {
        yield return(null);

        MJPlayer player = _mjPlayerList[viewSeat];
        MJItem   item   = null;

        if (outCardViewSeat != -1)
        {
            item = _mjPlayerList[viewSeat].GetLastOutCard();
        }
        StartCoroutine(player.OperateCard(oper, item));
    }
Exemplo n.º 12
0
    /// <summary>
    /// 排序
    /// </summary>
    /// <param name="list"></param>
    private void InsertSort(List <MJItem> list)
    {
        for (int i = 1; i < list.Count; i++)
        {
            MJItem insertItem  = list[i];
            int    insertIndex = i - 1;

            while (insertIndex >= 0 && insertItem.PaiVal < list[insertIndex].PaiVal)
            {
                list[insertIndex + 1] = list[insertIndex];
                insertIndex--;
            }
            list[insertIndex + 1] = insertItem;
        }
    }
Exemplo n.º 13
0
    /// <summary>
    /// 创建操作牌
    /// </summary>
    /// <param name="data"></param>
    /// <param name="item"></param>
    private void CreateOperCard(MJOperatorModel data, MJItem item)
    {
        float xOffset = 0;

        for (int i = 0; i < operCardList.Count; ++i)
        {
            xOffset = xOffset + operCardList[i].Width + MahjongConst.MahjongOperCardInterval;
        }
        MJOperatorCard oper = new GameObject().AddComponent <MJOperatorCard>();

        oper.transform.SetParent(_operCardPoint);
        oper.transform.localPosition = new Vector3(xOffset, 0, 0);
        oper.Show(data, GetOperCardList(data, item));
        operCardList.Add(oper);
    }
Exemplo n.º 14
0
    /// <summary>
    /// 增加
    /// </summary>
    /// <param name="data"></param>
    /// <param name="mj"></param>
    /// <returns></returns>
    public IEnumerator AddShow(MJOperatorModel data, MJItem mj)
    {
        yield return(null);

        if (_operData.Oper != MahjongOperAll.None)
        {
            yield break;
        }
        _operData = data;
        Vector3 keyPos = _keyItem.transform.position;

        //mj.PaiVal = data.Pai;
        mj.transform.SetParent(transform);
        mj.transform.DOLocalMove(keyPos + new Vector3(0, 0, MahjongConst.MahjongOffset_x), 0.05f);
        mj.transform.DOLocalRotate(new Vector3(0, 90, 0), 0.05f);
        operList.Add(mj);
        yield return(new WaitForSeconds(0.05f));
    }
Exemplo n.º 15
0
    /// <summary>
    /// 发牌
    /// </summary>
    /// <param name="paiValue"></param>
    /// <param name="item"></param>
    /// <returns></returns>
    public IEnumerator SentCard(int paiValue, MJItem item)
    {
        yield return(null);

        item.PaiVal = paiValue;
        float x = handCardList.Count * MahjongConst.MahjongOffset_x;

        item.transform.SetParent(_handCardPoint);
        if (MahjongConst.IsUsed2DCamera && viewSeat == 0)
        {
            item.Layer = _handCardPoint.gameObject.layer;
        }
        item.transform.DOLocalMove(new Vector3(x, 0, 0), 0.05f);
        item.transform.DOLocalRotate(Vector3.zero, 0.05f);
        if (viewSeat == 0)
        {
            item.eventPai += this.myPaiEvents;
        }
        handCardList.Add(item);
        yield return(new WaitForSeconds(0.05f));
    }
Exemplo n.º 16
0
    /// <summary>
    /// 创建牌墩
    /// </summary>
    /// <returns></returns>
    public IEnumerator CreatMJWall()
    {
        yield return(null);

        float x, y, z;
        int   index = 0;

        for (int i = 0; i < 17; ++i)
        {
            x = i * MahjongConst.MahjongOffset_x;
            for (int j = 0; j < 2; ++j)
            {
                y = j * MahjongConst.MahjongOffset_y;
                for (int k = 0; k < 4; ++k)
                {
                    MJItem     mjItem = MJControl.Instance._mjItemMgr.MJItemList[k * 34 + index];
                    GameObject mj     = null;
                    if (mjItem == null)
                    {
                        mj = Instantiate(MJControl.Instance._mjItemMgr.Prefab) as GameObject;
                    }
                    else
                    {
                        mj = mjItem.gameObject;
                    }
                    mj.transform.SetParent(WallPoints[k]);
                    mj.transform.localPosition    = new Vector3(x, y, 0);
                    mj.transform.localEulerAngles = new Vector3(0, 0, 180);
                    mj.name = MJControl.Instance._mjItemMgr.Prefab.name + index;
                    MJItem item = mj.GetComponent <MJItem>();
                    MJControl.Instance._mjItemMgr.MJItemList[k * 34 + index] = item;
                    mj.SetActive(true);
                }
                index++;
                yield return(new WaitForSeconds(0.03f));
            }
        }
    }
Exemplo n.º 17
0
    IEnumerator DoOutCard(MJItem item)
    {
        yield return(null);

        MJItem mj = item;

        mj.transform.SetParent(_outCardPoint);
        if (MahjongConst.IsUsed2DCamera && viewSeat == 0)
        {
            mj.Layer = _outCardPoint.gameObject.layer;
        }
        Vector3 endPos = GetOutCardPos();

        mj.transform.DOLocalMove(endPos + new Vector3(0.1f, 0, -0.15f), 0.05f);
        mj.transform.DOLocalRotate(Vector3.zero, 0.05f);
        outCardList.Add(mj);
        yield return(new WaitForSeconds(0.05f));

        StartCoroutine(SortHandCard());
        yield return(new WaitForSeconds(0.2f));

        mj.transform.DOLocalMove(endPos, 0.1f);
    }
Exemplo n.º 18
0
    /// <summary>
    /// 显示
    /// </summary>
    /// <param name="data"></param>
    /// <param name="list"></param>
    /// <returns></returns>
    public IEnumerator Show(MJOperatorModel data, List <MJItem> list)
    {
        yield return(null);

        operList = new List <MJItem>();
        int        keyIndex;
        List <int> values = data.GetOperValue(out keyIndex);

        if (keyIndex != -1)
        {
            _keyItem = list[keyIndex];
        }
        float xOffset = 0;

        for (int i = 0; i < list.Count; ++i)
        {
            //list[i].PaiVal = values[i];
            list[i].transform.SetParent(transform);
            if (i == keyIndex || i == keyIndex - 1)
            {
                list[i].transform.DOLocalMove(
                    new Vector3(xOffset, (MahjongConst.MahjongOffset_z + MahjongConst.MahjongOffset_x) / 2, 0),
                    0.05f);
                list[i].transform.DOLocalRotate(new Vector3(0, 90, 0), 0.05f);
                xOffset += (MahjongConst.MahjongOffset_x + MahjongConst.MahjongOffset_z) / 2;
            }
            else
            {
                list[i].transform.DOLocalMove(new Vector3(xOffset, 0, 0), 0.05f);
                list[i].transform.DOLocalRotate(Vector3.zero, 0.05f);
                xOffset += MahjongConst.MahjongOffset_x;
            }
            operList.Add(list[i]);
        }
        yield return(new WaitForSeconds(0.05f));
    }
Exemplo n.º 19
0
 public void AddHandCard(MJItem item)
 {
     handCardList.Add(item);
 }