/// <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; } }
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"); } } }
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); }
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(); } } } } }
/// <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)); }
private void myPaiEvents(MJItem val) { int paiVal = val.PaiVal; //测试用 改请求 StartCoroutine(OutCard(val.PaiVal)); }
/// <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; } }
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)); } } }
/// <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; } } }
/// <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)); }
/// <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)); }
/// <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; } }
/// <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); }
/// <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)); }
/// <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)); }
/// <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)); } } }
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); }
/// <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)); }
public void AddHandCard(MJItem item) { handCardList.Add(item); }