/// <summary> /// Game Start /// </summary> private void prepareGameStart(GameReadyResponse response) { foreach (var key in response.PlayerBoards.Keys) { bool isMine = loopParam.MineId == key; PlayerInfo info = isMine ? playerInfo[MINE_IDX] : playerInfo[ENEMY_IDX]; var playing = new NetworkPlayingState(info.Viewer, isMine); info.SetPlayState(playing); NetworkPlayStartState start = new NetworkPlayStartState(playing, ServerImpl, new GameStartRequest { Id = key, RoomName = loopParam.RoomName }); info.Ctrl.ReserveAddState(start); } }
/// <summary> /// >マッチング時に与えられたルーム名をもとにゲーム準備を宣言 /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task GameReadyAsync(GameReadyRequest request) { IsConnected = true; MineId = request.MineId; EnemyId = request.EnemyId; WithOther = request.WithOther; // ゲームループ作成 ServerMainGameLoop.LoopData data = new ServerMainGameLoop.LoopData(MineId, EnemyId, this, NetworkInput); ServerMainGameLoop.CreateNew(looperPool, logger, data); // ゲーム部屋に放り込む gameRoom = await Group.AddAsync(request.RoomName); if (WithOther) { // 2P var memberNum = await gameRoom.GetMemberCountAsync(); if (memberNum == 2) { // 2人揃ったらゲームを開始してよい logger.LogInformation($"GameReady at {MineId}"); var param = new Dictionary <string, IReadOnlyList <short> >(); // 互いの情報取得 var mineLoop = ServerMainGameLoop.TryTakeGame(MineId); var enemLoop = ServerMainGameLoop.TryTakeGame(EnemyId); param[MineId] = mineLoop.PlayingState.Board; param[EnemyId] = enemLoop.PlayingState.Board; var res = new GameReadyResponse { RoomName = request.RoomName, PlayerBoards = param }; Broadcast(gameRoom).OnGameReady(res); } } else { // 1P / 速攻でスタート logger.LogInformation($"GameReady at {MineId}"); var loop = ServerMainGameLoop.TryTakeGame(request.MineId); var param = new Dictionary <string, IReadOnlyList <short> >(); param[MineId] = loop.PlayingState.Board; BroadcastToSelf(gameRoom).OnGameReady(new GameReadyResponse { RoomName = request.RoomName, PlayerBoards = param }); } }
/// <summary> /// ゲーム準備終わり /// </summary> /// <param name="response"></param> public void OnGameReady(GameReadyResponse response) { Debug.Log($"GameReady!! at {loopParam.MineId}"); prepareGameStart(response); }