/// <summary> /// 自分のターンを終了する /// </summary> /// <param name="source"></param> /// <param name="destination"></param> /// <param name="IsBring"></param> public void TurnEnd(BoardIndex source, BoardIndex destination, bool IsBring) { /* 自分のコマを非アクティブにする */ List <BoardIndex> indexList = board.GetMyTopBoardIndex(); foreach (BoardIndex index in indexList) { GameObject obj = board.GetObjByIndex(index); obj.GetComponent <BattleTopCtrl>().SetIsMyTurn(false); } //自分の持ち駒をすべてアクティブにする List <GameObject> objList = myTopStage.GetGameObjectAll(); foreach (GameObject obj in objList) { obj.GetComponent <BattleTopCtrl>().SetIsMyTurn(false); } /* ターン情報通知 */ TopMoveInf inf = new TopMoveInf(source, destination, IsBring); float move = ConvMoveInf(inf); Debug.Log(move); //自分のターンはここで終了 turnManager.SendMove(move, true); }
//プレイヤーのムーブが終了したとき public void OnPlayerFinished(Player player, int turn, object move) { //ターンは1から開始されるので-1しておく int activePlayerIndex = (turn - 1) % 2; /* 自分のターンでなければに相手からのメッセージを受信 */ if (myTurnIndex != activePlayerIndex) { //送信されてきたデータをもとにオブジェクトを動かす if (player != PhotonNetwork.LocalPlayer) { float inf = (float)move; if (inf != 0) { TopMoveInf moveInf = ConvSetMoveInf(inf); BoardUpDate(moveInf); } } } }
/// <summary> /// 移動情報をfloat型に変換する /// </summary> /// <param name="inf"></param> /// <returns></returns> public float ConvMoveInf(TopMoveInf inf) { float i = 0x00000000; if (inf.IsBring) { i += 1 * Mathf.Pow(0x10, 4); } else { i += 2 * Mathf.Pow(0x10, 4); } i += inf.source.xIndex * Mathf.Pow(0x10, 3); /* 4桁目 */ i += inf.source.yIndex * Mathf.Pow(0x10, 2); /* 3桁目 */ i += inf.destination.xIndex * Mathf.Pow(0x10, 1); /* 2桁目 */ i += inf.destination.yIndex * Mathf.Pow(0x10, 0); /* 1桁目 */ return(i); }
/// <summary> /// 盤面アップデート /// </summary> /// <param name="inf"></param> private void BoardUpDate(TopMoveInf inf) { BoardIndex source; //持ち駒かどうかによってソースは変わる if (inf.IsBring) { source = ComvOppenentIndexChild(inf.source); } else { source = ComvOpponentIndex(inf.source); } BoardIndex distination = ComvOpponentIndex(inf.destination); //行先にコマがあれば削除して相手の持ち駒とする if (board.ChkBoardTop(distination)) { GameObject obj = board.GetObjByIndex(distination); board.DelBoardInf(distination); int id = obj.GetComponent <BattleTopCtrl>().topId; LostATop(obj); } //盤面情報更新 if (inf.IsBring) { GameObject obj = opponentTopStage.GetObjByIndex(source); //相手からの情報なので相手の持ち駒を削除 opponentTopStage.DelBoardInf(source); int topId = obj.GetComponent <BattleTopCtrl>().topId; Vector2 tmpVec = board.GetBoardPosByIndex(distination); obj.transform.position = new Vector3(tmpVec.x, 1, tmpVec.y); board.SetBoardInf(topId, obj, false, distination); PaintCell(new BoardIndex(distination.xIndex, distination.yIndex), false); } else { GameObject obj = board.GetObjByIndex(source); board.DelBoardInf(source); int topId = obj.GetComponent <BattleTopCtrl>().topId; Vector2 tmpVec = board.GetBoardPosByIndex(distination); obj.transform.position = new Vector3(tmpVec.x, 1, tmpVec.y); board.SetBoardInf(topId, obj, false, distination); //とびがないかチェック(狙撃手はとび確認不要) if (topId != 9) { List <BoardIndex> indexList = board.GetCellIndexBitweenCells(source, distination); foreach (BoardIndex index in indexList) { PaintCell(index, false); } } PaintCell(new BoardIndex(distination.xIndex, distination.yIndex), false); } }