public void ShowRecord() { SQSceneLoader.It.LoadScene("PlayBackScene", () => { List <string> views = new List <string>(); views.Add("MJGameBackUI"); views.Add("NetLoadingView"); views.Add("SceneLoadingView"); StartGameRespone data = new StartGameRespone(); data.roomInfo = mModel.CurRecordDetailData.roomInfo; data.startInfo = mModel.CurRecordDetailData.startInfo; HandleStartGameData(data);//初始化数据 BaseView.CloseAllViewBut(views); mGameUI = OpenWindow() as MJGameBackUI; mGameUI.InfoAllPlayerData(data); }); }
/// <summary> /// 准备 /// </summary> /// <param name="info"></param> private void InitReady(StartGameRespone info) { if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER)//在准备阶段或是结束阶段 { for (int i = 0; i < info.roomInfo.playerList.Count; i++) { PlayerInfoStruct item = info.roomInfo.playerList[i]; if (item.seatId == MJGameModel.Inst.mMySeatId)//自己 { } mAllPlayer[MJGameModel.Inst.mnewSeatToIndex[item.seatId]].SetReady(item.isReady); } } else { //全部不显示准备 for (int i = 0; i < info.roomInfo.playerList.Count; i++) { PlayerInfoStruct item = info.roomInfo.playerList[i]; mAllPlayer[MJGameModel.Inst.mnewSeatToIndex[item.seatId]].SetReady(false); } } }
private void HandleStartGameData(StartGameRespone data, bool isStart = false) { MJGameModel.Inst.mStartGameData = data; SQDebug.Log("准备房间 玩家数据移植:" + Time.deltaTime); MJGameModel.Inst.ReadyCountDownTime = 0; //准备倒计时 mModel.mPlayCount = data.roomInfo.maxGameCount; //最大局数 mModel.mCurPlayCount = data.roomInfo.currGameCount; //当前局数 MJGameModel.Inst.mRoomId = data.roomInfo.roomId; //房间号 MJGameModel.Inst.mMySeatId = data.roomInfo.mySeatId; //我自己的座位号 MJGameModel.Inst.mZhuangSeatId = data.startInfo.zhuangSeatId; //庄家座位号 MJGameModel.Inst.TurnFixedTime = data.roomInfo.turnFixedTime; //操作固定时间 MJGameModel.Inst.mRoomMgSeatId = 1; //房主座位号 int totalPlayerCount = data.roomInfo.maxPlayer; //房间总共人数 MJGameModel.Inst.totalPlayerCount = totalPlayerCount; totalPlayerCount = totalPlayerCount == 2 ? 4 : totalPlayerCount; MJGameModel.Inst.mnewSeatToIndex = new int[totalPlayerCount + 1]; //玩家座位号 数组 MJGameModel.Inst.mSeatToDirectionIndex = new int[5]; //所有玩家座位号对应桌面东南西北高亮显示的index MJGameModel.Inst.mRoomPlayers = new PlayerInfoStruct[totalPlayerCount + 1]; //玩家 数据缓存数组 foreach (var itemRoomPlayer in data.roomInfo.playerList) //玩家信息数据 { MJGameModel.Inst.mRoomPlayers[itemRoomPlayer.seatId] = itemRoomPlayer; MJGameModel.Inst.mnewSeatToIndex[itemRoomPlayer.seatId] = SeatIdToIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, totalPlayerCount); MJGameModel.Inst.mSeatToDirectionIndex[itemRoomPlayer.seatId] = SeatIdToDirectionIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, data.roomInfo.maxPlayer); } #endregion MJGameModel.Inst.isGetStartGameData = true; MJGameModel.Inst.totalCardNum = data.startInfo.totalCardNum; //总共有多少张牌 MJGameModel.Inst.leaveCardNum = data.startInfo.leaveCardNum; //剩余多少张牌 MJGameModel.Inst.mCurInsSeatId = data.startInfo.currTurnSeatId; //当前指针 指的玩家座位号 MJGameModel.Inst.isMyHit = data.startInfo.currTurnSeatId == MJGameModel.Inst.mMySeatId; //是否轮到我操作 MJGameModel.Inst.allPlayersCardsInfoStruct = new CardsInfoStruct[totalPlayerCount + 1]; //可操作列表 if (data.roomInfo.optList != null) { for (int i = 0; i < data.roomInfo.optList.Count; i++) { if (data.roomInfo.optList[i].ins == eMJInstructionsType.HIT) { GetCanHuList(data.roomInfo.optList[i]); } } } //手牌信息 if (data.startInfo.cardsInfoList != null) { foreach (var item in data.startInfo.cardsInfoList) { MJGameModel.Inst.allPlayersCardsInfoStruct[item.seatId] = item; //找出我定缺的类型 if (item.seatId == MJGameModel.Inst.mMySeatId) //我自己 { if (item.isFixedColor) //已经定缺 { MJGameModel.Inst.SetMyFixedType(item.fixedType); if (item.handList != null)//手牌排序 { item.handList = MJGameModel.Inst.ChangList(item.handList, item.fixedType); } } else { MJGameModel.Inst.SetMyFixedType(0); } } if (item.handList != null) { foreach (var VARIABLE in item.handList) { MJGameModel.Inst.mySelfCards.Add(VARIABLE); } if (item.isHasCurrCard) { MJGameModel.Inst.mySelfCards.Add(item.currCard); } foreach (var oneItem in MJGameModel.Inst.mySelfCards) { if (oneItem < 10) { MJGameModel.Inst.handCardsTiao.Add(oneItem); } else if (oneItem < 20) { MJGameModel.Inst.handCardsTong.Add(oneItem); } else if (oneItem < 30) { MJGameModel.Inst.handCardsWan.Add(oneItem); } } } } } //MJGameModel.Inst.UpdataModelDada(data); if (isStart && !MJGameModel.Inst.IsContainsDingque && !MJGameModel.Inst.IsContainsChange)//如果开始发牌且没有定缺也没有换三张,房间状态改为开始 { MJGameModel.Inst.mState = eMJRoomStatus.STARTE; MJGameModel.Inst.mStartGameData.roomInfo.roomState = eRoomState.START;//改变房间状态 } ; if (mGameUI != null) { List <string> view = new List <string>(); view.Add("GameUI"); BaseView.CloseAllViewBut(view); mGameUI.GetGameStartFormCtr(); } else { SQSceneLoader.It.LoadScene("mahjong_scenes", () => { mGameUI = OpenWindow() as MJGameUI; List <string> view = new List <string>(); view.Add("GameUI"); BaseView.CloseAllViewBut(view); mGameUI.GetGameStartFormCtr(); }); } }
/// <summary> /// 开始游戏数据处理 /// </summary> private void HandleStartGameData(MessageData msg) { #region 准备房间 玩家数据移植 StartGameRespone data = msg.Read <StartGameRespone>(); HandleStartGameData(data); }
/// <summary> /// 初始化 玩家数据 /// </summary> /// <param name="info"></param> public void InfoAllPlayerData(StartGameRespone info) { InitData(); //初始化操作列表信息 if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER) // 不显示剩余牌数量 { SetLeftCardNum(info.startInfo.leaveCardNum, false); } else { SetLeftCardNum(info.startInfo.leaveCardNum, true); } InitMJScene(); //准备 InitReady(info); //头像 foreach (var item in info.roomInfo.playerList) { int index = MJGameModel.Inst.mnewSeatToIndex[item.seatId]; InitOnePlayerIcon(mAllPlayer[index], item); SetPlayerSeatId(item.seatId, mAllPlayer[index]); //座位号///********************** InitOnePlayerOnlineState(mAllPlayer[index], item); //在线状态 } //手牌 BuildHandMahjong(MJGameModel.Inst.allPlayersCardsInfoStruct); //打出的牌 InitAllPlayerCollectCards(MJGameModel.Inst.allPlayersCardsInfoStruct); //碰的牌 InfoAllPlayerPengCard(MJGameModel.Inst.allPlayersCardsInfoStruct); //听牌标记 //InitAllTingTag(info.playerList); //胡牌标记 InitAllHuTag(MJGameModel.Inst.allPlayersCardsInfoStruct); //定缺标记 InitAllFixeType(MJGameModel.Inst.allPlayersCardsInfoStruct, info.roomInfo.roomState); //设置 打牌指针 轮到谁操作 mMJSceneRoot.SetLight(MJGameModel.Inst.mCurInsSeatId); //cd SetAllPlayerCD(MJGameModel.Inst.mCurInsSeatId); //设置 色子显示 mMJSceneRoot.SetTouZiNum(info.startInfo.dices); //桌上的牌 if (info.roomInfo.roomState == eRoomState.READY || info.roomInfo.roomState == eRoomState.GAMEOVER)//准备和结束不显桌上的牌 { mMJSceneRoot.SetDeskCard(0, info.startInfo.dices, true); } else { mMJSceneRoot.SetDeskCard(info.startInfo.leaveCardNum, info.startInfo.dices, true); } //桌子位置 mMJSceneRoot.SetDescRotate(MJGameModel.Inst.mMySeatId - 1); //桌子上信息 int _roomId = info.roomInfo.mode == "m4" ? 0 : int.Parse(info.roomInfo.roomId); //如果是平台房就不显示房间号 mMJSceneRoot.SetDescInfo(999, int.Parse(info.roomInfo.roomId), info.roomInfo.currGameCount, info.roomInfo.maxGameCount, 9999); // 番数 低分 没有 //上一次打出牌特效 if (info.roomInfo.roomState == eRoomState.START && info.roomInfo.lastHitSeatId != 0) { int index = MJGameModel.Inst.mnewSeatToIndex[info.roomInfo.lastHitSeatId]; SetCurCardEffect(mAllPlayer[index], eMJInstructionsType.HIT, mCurCardOffset); //打出的牌特效 } SetRoomPlayNum(MJGameModel.Inst.mStartGameData.roomInfo.currGameCount, true); //设局数显示 //我的操作列表 mSelfPlayer.ShowInstructions(info.roomInfo.optList); //MJGameModel.Inst.mIsTing = false;//听牌 MJGameModel.Inst.isFirstGetStartGameData = false; mIsStart = true; }
private void HandleStartGameData(StartGameRespone data) { mjController = Global.Inst.GetController <MJGameController>(); #region 准备房间 玩家数据移植 //StartGameRespone data = msg.Read<StartGameRespone>(); MJGameModel.Inst.mStartGameData = data; SQDebug.Log("准备房间 玩家数据移植:" + Time.deltaTime); MJGameModel.Inst.mPlayCount = data.roomInfo.maxGameCount; //最大局数 MJGameModel.Inst.mCurPlayCount = data.roomInfo.currGameCount; //当前局数 MJGameModel.Inst.mRoomId = data.roomInfo.roomId; //房间号 MJGameModel.Inst.mZhuangSeatId = data.startInfo.zhuangSeatId; foreach (var itemRoomPlayer in data.roomInfo.playerList) //玩家信息数据 { if (itemRoomPlayer.uId == PlayerModel.Inst.UserInfo.userId) { MJGameModel.Inst.mMySeatId = itemRoomPlayer.seatId; break; } } //MJGameModel.Inst.mMySeatId = data.roomInfo.mySeatId;//我自己的座位号 MJGameModel.Inst.mRoomMgSeatId = 1; //房主座位号 int totalPlayerCount = data.roomInfo.maxPlayer; //房间总共人数 MJGameModel.Inst.totalPlayerCount = totalPlayerCount; totalPlayerCount = totalPlayerCount == 2 ? 4 : totalPlayerCount; MJGameModel.Inst.AllPlayerEfixe = new List <int[]>();//所有玩家定缺区间 for (int i = 0; i < 5; i++) { MJGameModel.Inst.AllPlayerEfixe.Add(new int[2]); } MJGameModel.Inst.mnewSeatToIndex = new int[totalPlayerCount + 1]; //玩家座位号 数组 MJGameModel.Inst.mSeatToDirectionIndex = new int[5]; //所有玩家座位号对应桌面东南西北高亮显示的index MJGameModel.Inst.mRoomPlayers = new PlayerInfoStruct[totalPlayerCount + 1]; //玩家 数据缓存数组 foreach (var itemRoomPlayer in data.roomInfo.playerList) //玩家信息数据 { MJGameModel.Inst.mRoomPlayers[itemRoomPlayer.seatId] = itemRoomPlayer; MJGameModel.Inst.mnewSeatToIndex[itemRoomPlayer.seatId] = mjController.SeatIdToIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, totalPlayerCount); MJGameModel.Inst.mSeatToDirectionIndex[itemRoomPlayer.seatId] = mjController.SeatIdToDirectionIndex(MJGameModel.Inst.mMySeatId, itemRoomPlayer.seatId, data.roomInfo.maxPlayer); } #endregion MJGameModel.Inst.isGetStartGameData = true; MJGameModel.Inst.totalCardNum = data.startInfo.totalCardNum; //总共有多少张牌 MJGameModel.Inst.leaveCardNum = data.startInfo.leaveCardNum; //剩余多少张牌 MJGameModel.Inst.mCurInsSeatId = data.startInfo.currTurnSeatId; //当前指针 指的玩家座位号 MJGameModel.Inst.isMyHit = data.startInfo.currTurnSeatId == MJGameModel.Inst.mMySeatId; //是否轮到我操作 MJGameModel.Inst.allPlayersCardsInfoStruct = new CardsInfoStruct[totalPlayerCount + 1]; //可操作列表 if (data.roomInfo.optList != null) { for (int i = 0; i < data.roomInfo.optList.Count; i++) { if (data.roomInfo.optList[i].ins == eMJInstructionsType.HIT) { mjController.GetCanHuList(data.roomInfo.optList[i]); } } } //手牌信息 if (data.startInfo.cardsInfoList != null) { foreach (var item in data.startInfo.cardsInfoList) { MJGameModel.Inst.allPlayersCardsInfoStruct[item.seatId] = item; //找出我定缺的类型 if (item.seatId == MJGameModel.Inst.mMySeatId) //我自己 { if (item.isFixedColor) //已经定缺 { MJGameModel.Inst.SetMyFixedType(item.fixedType); if (item.handList != null)//手牌排序 { item.handList = MJGameModel.Inst.ChangList(item.handList, item.fixedType); } } else { MJGameModel.Inst.SetMyFixedType(0); } } if (item.handList != null) { foreach (var VARIABLE in item.handList) { MJGameModel.Inst.mySelfCards.Add(VARIABLE); } if (item.isHasCurrCard) { MJGameModel.Inst.mySelfCards.Add(item.currCard); } foreach (var oneItem in MJGameModel.Inst.mySelfCards) { if (oneItem < 10) { MJGameModel.Inst.handCardsTiao.Add(oneItem); } else if (oneItem < 20) { MJGameModel.Inst.handCardsTong.Add(oneItem); } else if (oneItem < 30) { MJGameModel.Inst.handCardsWan.Add(oneItem); } } } } } }