//开始游戏 public static void StartGame(this FiveStarRoom fiveStarRoom) { Actor_FiveStar_StartGame actorFiveStarStart = new Actor_FiveStar_StartGame(); actorFiveStarStart.RoomConfigs = fiveStarRoom.RoomConfig.Configs; actorFiveStarStart.RoomId = fiveStarRoom.RoomId; if (fiveStarRoom.RoomType == RoomType.Match) { actorFiveStarStart.RoomId = fiveStarRoom.MathRoomId; } foreach (var player in fiveStarRoom.FiveStarPlayerDic.Values) { //因为有些对象不能进行序列化 就必须重新复制一份 actorFiveStarStart.PlayerInfos.Add(FiveStarPlayerFactory.CopySerialize(player)); } foreach (var player in fiveStarRoom.FiveStarPlayerDic) { player.Value.StartGame(actorFiveStarStart); } //第一局随机出一个休息的玩家 fiveStarRoom.NextRestSeatIndex = RandomTool.Random(1, fiveStarRoom.RoomConfig.RoomNumber); //不能为0 因为0要第一个摸牌 fiveStarRoom.SmallStartGame(); //小局开始游戏 //用来发送消息的序列化对象 放入简易对象池 不能直接销毁 因为会改变一些东西 foreach (var player in actorFiveStarStart.PlayerInfos) { FiveStarPlayerFactory.DisposeSerializePlayer(player); } }
public static void Dispose(Actor_FiveStar_Reconnection actorFiveStarReconnection) { for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++) { FiveStarPlayerFactory.DisposeSerializePlayer(actorFiveStarReconnection.Players[i]); } }
public static Actor_FiveStar_Reconnection Create(FiveStarRoom fiveStarRoom, long reconnectionUserId) { Actor_FiveStar_Reconnection actorFiveStarReconnection = new Actor_FiveStar_Reconnection(); for (int i = 0; i < fiveStarRoom.FiveStarPlayerDic.Count; i++) { actorFiveStarReconnection.Players.Add(FiveStarPlayerFactory.CopySerialize(fiveStarRoom.FiveStarPlayerDic[i])); } actorFiveStarReconnection.RoomId = fiveStarRoom.RoomId; if (fiveStarRoom.RoomType == RoomType.Match) { actorFiveStarReconnection.RoomId = fiveStarRoom.MathRoomId; } actorFiveStarReconnection.FriendsCircleId = fiveStarRoom.FriendsCircleId; actorFiveStarReconnection.RoomType = fiveStarRoom.RoomType; actorFiveStarReconnection.Configs = fiveStarRoom.RoomConfig.Configs; actorFiveStarReconnection.CurrRestSeatIndex = fiveStarRoom.CurrRestSeatIndex; actorFiveStarReconnection.CurrRoomStateType = fiveStarRoom.CurrRoomStateType; actorFiveStarReconnection.CurrOfficNum = fiveStarRoom.CurrOfficNum; if (fiveStarRoom.ResidueCards != null) { actorFiveStarReconnection.ResidueCardCount = fiveStarRoom.ResidueCards.Count; } actorFiveStarReconnection.IsDaPiaoBeing = fiveStarRoom.IsDaPiaoBeing; actorFiveStarReconnection.EndPlayCardSize = fiveStarRoom.CurrChuPaiCard;//最后出第一张牌 就是当前出的牌 for (int i = 0; i < actorFiveStarReconnection.Players.Count; i++) { if (reconnectionUserId == actorFiveStarReconnection.Players[i].User.UserId || actorFiveStarReconnection.Players[i].IsLiangDao) { continue; } if (actorFiveStarReconnection.Players[i].Hands == null) { continue; } fiveStarRoom.intData = actorFiveStarReconnection.Players[i].Hands.Count; actorFiveStarReconnection.Players[i].Hands = new RepeatedField <int>(); actorFiveStarReconnection.Players[i].Hands.Add(fiveStarRoom.intData);//不是自己本人 也没有亮倒的手牌信息 只能得到数量 } return(actorFiveStarReconnection); }
public static async Task <FiveStarRoom> Create(M2S_StartGame m2SStartGame) { try { FiveStarRoom fiveStarRoom = ComponentFactory.Create <FiveStarRoom>(); FiveStarRoomConfig fiveStarRoomConfig = FiveStarRoomConfigFactory.Create(m2SStartGame.RoomConfig.RoomConfigs);//创建房间配置信息 fiveStarRoom.FriendsCircleId = m2SStartGame.FriendsCircleId; fiveStarRoom.NeedJeweNumCount = m2SStartGame.NeedJeweNumCount; //需要的钻石数量 fiveStarRoom.RoomConfig = fiveStarRoomConfig; //房间配置 fiveStarRoom.MathRoomId = m2SStartGame.RoomConfig.MatchRoomId; //匹配房间ID 在房卡模式下就是本身的房间ID fiveStarRoom.RoomId = m2SStartGame.RoomId; //房间ID fiveStarRoom.RoomType = m2SStartGame.RoomType; //赋值房间类型 fiveStarRoom.RoomNumber = fiveStarRoomConfig.RoomNumber; //房间人数 fiveStarRoom.CurrRoomStateType = RoomStateType.GameIn; //房间状态 改为游戏中 if (fiveStarRoom.RoomType == RoomType.RoomCard) { fiveStarRoom.StartVideoDataId = FiveStarRoomComponent.Ins.GetMiltaryDataStartId(); //如果在房卡模式要获取起始录像Id } fiveStarRoom.IsHaveAI = false; //默认是没有AI的 //创建玩家对象 foreach (var playerInfo in m2SStartGame.MatchPlayerInfos) { fiveStarRoom.FiveStarPlayerDic[playerInfo.SeatIndex] = await FiveStarPlayerFactory.Create(playerInfo, fiveStarRoom); if (playerInfo.IsAI) { fiveStarRoom.IsHaveAI = true;//只要有一个AI就是有AI } } await fiveStarRoom.AddComponent <MailBoxComponent>().AddLocation(); return(fiveStarRoom); } catch (Exception e) { Log.Error(e); throw; } }