public void OCustomLogic_ykmj(ISFSObject data) { if (!ConfigData.Jue) { return; } int type = data.ContainsKey(RequestKey.KeyType) ? data.GetInt(RequestKey.KeyType) : -1; var seat = data.ContainsKey(RequestKey.KeySeat) ? data.GetInt(RequestKey.KeySeat) : -1; int value = data.ContainsKey(RequestKey.KeyOpCard) ? data.GetInt(RequestKey.KeyOpCard) : -1; if (seat == -1 && DataCenter.IsReconect) { seat = DataCenter.SelfSeat; } if (GameCenter.DataCenter.SelfSeat != seat) { return; } PlayerHand = Game.MahjongGroups.MahjongHandWall[0].MahjongList; PengList = Game.MahjongGroups.MahjongCpgs[0].CpgList; switch (type) { case NetworkProtocol.MJRequestTypeCPG: EnGroupType cpgType = data.ContainsKey(ProtocolKey.KeyTType) ? (EnGroupType)data.GetInt(ProtocolKey.KeyTType) : EnGroupType.None; if (cpgType == EnGroupType.Peng) { int card = data.ContainsKey(RequestKey.KeyCard) ? data.GetInt(RequestKey.KeyCard) : -1; OnPengCard(card); } break; case NetworkProtocol.MJRequestTypeGetInCard: OnGetCard(value); break; case NetworkProtocol.MJThrowoutCard: OnOutPutCard(value); break; case -1: if (DataCenter.IsReconect) { CheckJueCard(); } break; } }
public void SetCpgCard(List <CpgModel> cpgList) { if (null == cpgList || cpgList.Count == 0) { return; } for (int i = 0; i < cpgList.Count; i++) { EnGroupType cpgType = EnGroupType.None; if (cpgList[i].Type == CpgProtocol.AnGang) { cpgType = EnGroupType.AnGang; } UiCardGroup uiGroup = GameCenter.Assets.GetUIMahjongGroup(cpgList[i].Cards, UIMahjongType.Small, cpgType); CardGroup.AddUiCdGroup(uiGroup); } }
public void SetData(ISFSObject data) { var db = GameCenter.DataCenter; db.CurrOpSeat = data.TryGetInt(RequestKey.KeySeat); GangBao = data.ContainsKey("bao"); CurrOpChair = db.CurrOpChair; OldOpChair = db.OldOpChair; CpgData = MahjongUtility.CreateCpg(data); CpgData.Laizi = db.Game.LaiziCard; //cpg中有赖子牌,标记Icon CpgType = CpgData.Type; db.Players[db.CurrOpChair].IsTuiDan = data.ContainsKey("tuidan"); if (CpgType != EnGroupType.ZhuaGang && IsNotXjfdType(CpgType)) { //将cpg信息添加到玩家数据中 GameCenter.DataCenter.Players[CurrOpChair].CpgDatas.Add(CpgData); } CpgModel = new CpgModel(data); }
public CpgSaveData(CpgData data, int index) { type = data.Type; value = data.AllCards().ToArray(); this.index = index; }
public UiCardGroup GetGroup(int[] value, EnD2MjType type, bool isHaveBg = false, int laizi = UtilDef.NullMj, EnGroupType cpgType = EnGroupType.None) { GameObject[] list = new GameObject[value.Length]; Vector2 mjSize = new Vector2(); for (int i = 0; i < value.Length; i++) { list[i] = GetMj(value[i], type, laizi, cpgType, i); switch (type) { case EnD2MjType.Me: mjSize = MjSizeMe; break; case EnD2MjType.Up: mjSize = MjSizeUp; break; } } //tileBack_up_0 UiCardGroup cardGroup = UiCardGroup.create(list, mjSize, isHaveBg ? Bg : null, cpgType); return(cardGroup); }
public virtual GameObject GetMj(int value, EnD2MjType type, int laizi = UtilDef.NullMj, EnGroupType cpgType = EnGroupType.None, int cdindex = 0) { GameObject ret = null; //暗杠时显示背面 只在精品麻将中有这种限制,第四张要反过来 if (GameConfig.GameKey == "jpmj" && cpgType == EnGroupType.AnGang && TileBackUp != null && cdindex < 3) { ret = Instantiate(TileBackUp); return(ret); } switch (type) { case EnD2MjType.Me: ret = Instantiate(SingleMe); Image valueImageMe = ret.transform.FindChild("CdValue").GetComponent <Image>(); //修正花牌显示 if (value >= 96) { valueImageMe.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero; } valueImageMe.sprite = Instantiate(_mahjongMeKv[value]); valueImageMe.SetNativeSize(); break; case EnD2MjType.Up: ret = Instantiate(SingleUp); Image valueImage = ret.transform.FindChild("CdValue").GetComponent <Image>(); //修正花牌显示 if (value >= 96) { valueImage.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero; } valueImage.sprite = Instantiate(_mahjongUpKv[value]); valueImage.SetNativeSize(); break; } //如果花牌为赖子牌 if (laizi != UtilDef.NullMj) { bool result = false; if (value == laizi) { result = true; } if (laizi >= 96 && value >= 96) { result = true; } ret.transform.Find("Laizi").gameObject.SetActive(result); } return(ret); }
public static UiCardGroup Create(GameObject[] objList, Vector2 MjSize, Sprite bg, EnGroupType cpgType = EnGroupType.None) { GameObject obj = new GameObject(); UiCardGroup ret = obj.AddComponent <UiCardGroup>(); ret._mjSize = MjSize; ret.AddObj(objList); //根据暗杠的形式摆牌 //if (cpgType == EnGroupType.AnGang) //{ // ret.SortAnGangGroup(); // return ret; //} ret.Sort(); if (bg != null) { Image imgBg = obj.AddComponent <Image>(); imgBg.sprite = bg; imgBg.type = Image.Type.Sliced; //设置底图大小 要比大 RectTransform rtf = obj.GetComponent <RectTransform>(); rtf.sizeDelta = new Vector2(ret.mObjList.Count * ret._mjSize.x + 20, ret._mjSize.y + 20); obj.AddComponent <Button>(); } return(ret); }
public UiCardGroup GetUIMahjongGroup(IList <int> cards, UIMahjongType uiType, EnGroupType cpgType = EnGroupType.None, bool isHaveBg = false) { Vector2 mjSize = Vector2.zero; GameObject[] list = new GameObject[cards.Count]; UiCardGroup cardGroup; switch (uiType) { case UIMahjongType.Big: mjSize = mSizeBig; break; case UIMahjongType.Small: mjSize = mSizeSmall; break; } if (cpgType == EnGroupType.XFDan || cpgType == EnGroupType.YaoDan || cpgType == EnGroupType.JiuDan || cpgType == EnGroupType.ZFBDan) { List <int> cardsList = new List <int>(); Dictionary <int, int> dic = new Dictionary <int, int>(); for (int i = 0; i < cards.Count; i++) { if (!dic.ContainsKey(cards[i])) { dic[cards[i]] = 1; cardsList.Add(cards[i]); } else { dic[cards[i]]++; } } GameObject[] xjfdList = new GameObject[cardsList.Count]; for (int i = 0; i < cardsList.Count; i++) { if (dic.ContainsKey(cardsList[i])) { xjfdList[i] = GetUIMahjong(cardsList[i], uiType); if (dic[cardsList[i]] > 1) { //GameObject temp = MahjongUtility.GetScriptableAssets<MahjongMiscAssets>().GetAssetToObj("NumSign" + dic[cardsList[i]]); GameObject temp = GameUtils.GetAssets <GameObject>("NumSign" + dic[cardsList[i]]); temp.SetActive(false); var obj = Instantiate(temp); if (obj != null) { obj.transform.parent = xjfdList[i].transform; obj.transform.localRotation = Quaternion.Euler(0, 0, 0); obj.gameObject.layer = xjfdList[i].gameObject.layer; switch (uiType) { case UIMahjongType.Big: obj.transform.localPosition = new Vector3(-20, -37, 0); obj.transform.localScale = Vector3.one * 0.7f; break; case UIMahjongType.Small: obj.transform.localPosition = new Vector3(-7, -3f, 0); obj.transform.localScale = Vector3.one * 0.4f; break; } obj.SetActive(true); } } } } cardGroup = UiCardGroup.Create(xjfdList, mjSize, isHaveBg ? MahjongCardAssets.TileBackground : null, cpgType); } else { for (int i = 0; i < cards.Count; i++) { //暗杠时显示背面, 第四张要反过来 if (cpgType == EnGroupType.AnGang && i < 3) { list[i] = GetUIMahjongBg(uiType); } else { list[i] = GetUIMahjong(cards[i], uiType); } } cardGroup = UiCardGroup.Create(list, mjSize, isHaveBg ? MahjongCardAssets.TileBackground : null, cpgType); } return(cardGroup); }
public static CpgData CreateCpg(ISFSObject data) { CpgData ret = null; EnGroupType type = EnGroupType.None; if (data.ContainsKey(ProtocolKey.KeyTType)) { type = (EnGroupType)(data.GetInt(ProtocolKey.KeyTType)); } else if (data.ContainsKey(RequestKey.KeyType)) { type = (EnGroupType)(data.GetInt(RequestKey.KeyType)); } switch (type) { case EnGroupType.Chi: ret = new CpgChi(); break; case EnGroupType.JueGang: case EnGroupType.Peng: ret = new CpgPeng(); break; case EnGroupType.ZhuaGang: ret = new CpgZhuaGang(); break; case EnGroupType.MingGang: case EnGroupType.AnGang: { if (data.ContainsKey("bao")) { ret = new CpgSelfGangBao(); } else { ret = new CpgSelfGang(); } } break; case EnGroupType.PengGang: ret = new CpgOtherGang(); break; case EnGroupType.XFGang: case (EnGroupType)NetworkProtocol.MJRequestTypeXFG: ret = new CpgXFGang(); break; case EnGroupType.XFDan: case EnGroupType.ZFBDan: case EnGroupType.YaoDan: case EnGroupType.JiuDan: ret = new CpgXfdGang(); break; case EnGroupType.AnJueGang: ret = new CpgAnJueGang(); break; } ret.ParseData(data); return(ret); }
/// <summary> /// 查找手牌中可以杠出的牌 /// </summary> /// <returns></returns> private List <int> FindCanXjfd() { _hasDan = new bool[4]; int yaoJiNum = 0; var dataCenter = GameCenter.DataCenter; List <int> canXjfd = new List <int>(); List <int>[] tempXjfds = new List <int> [4]; for (int i = 0; i < tempXjfds.Length; i++) { tempXjfds[i] = new List <int>(); } var cpgData = dataCenter.OneselfData.CpgDatas; for (int i = 0; i < cpgData.Count; i++) { EnGroupType type = cpgData[i].Type; switch (type) { case EnGroupType.YaoDan: _hasDan[0] = true; break; case EnGroupType.JiuDan: _hasDan[1] = true; break; case EnGroupType.ZFBDan: _hasDan[2] = true; break; case EnGroupType.XFDan: _hasDan[3] = true; break; } } if (dataCenter.Players[dataCenter.CurrOpChair].IsAuto) { canXjfd.Add(dataCenter.GetInMahjong); return(canXjfd); } List <int> cards = dataCenter.OneselfData.HardCards; MahjongUtility.SortMahjong(cards); Dictionary <int, int> dic = GameCenter.Network.C2S.Custom <C2SCustom>().GetCardAmountOnXjfd(cards); for (int i = 0; i < _hasDan.Length; i++) { var tempXjfd = tempXjfds[i]; if (!dataCenter.ConfigData.YaoJiuDan && i <= 1 && !dataCenter.ConfigData.FeiDan) { continue; } if (i == 0 && dataCenter.ConfigData.FeiDan && dic.ContainsKey(33)) { canXjfd.Add(33); yaoJiNum = dic.ContainsKey(33) ? dic[33] : 0; dic.Remove(33); } if (_hasDan[i]) { CheckIsHaveNeed(dic, i, canXjfd, out canXjfd); } else { CheckIsHaveNeed(dic, i, tempXjfd, out tempXjfd); } } if (!dataCenter.OneselfData.IsTuiDan && !dataCenter.ConfigData.ZanDan) { return(canXjfd); } for (int i = 0; i < tempXjfds.Length; i++) { var temp = tempXjfds[i]; if (temp != null && temp.Count > 0) { temp.Sort(); int diffcultNum = 0; if (temp.Count > 0) { diffcultNum++; } for (int j = 0; j < temp.Count - 1; j++) { if (temp[j] != temp[j + 1]) { diffcultNum++; } } if (dataCenter.ConfigData.FeiDan) { diffcultNum += yaoJiNum; } int cnt = 3; if (!dataCenter.ConfigData.SanFeng && temp[0] >= 65 && temp[0] <= 74) { cnt = 4; } if (diffcultNum >= cnt) { for (int j = 0; j < temp.Count; j++) { canXjfd.Add(temp[j]); } } } } return(canXjfd); }