//選択 public void MoveSelectPiece(Guide guide) { if (SelectPiece == null) { Debug.LogError("Error MoveSelectPiece"); return; } //移動 PieceBase comp = SelectPiece.GetComponent <PieceBase>(); //成り判定 if (guide.kind != GuideKind.PROMOTE) { if (PromoteCheck(guide, comp) == true) { return; //成りガイドを新たに設置 } } else { //成り用ガイドならガイドの情報を使用 comp.SetPromote(guide.promote); } //移動させる comp.SetBoardPos(guide.pos_x, guide.pos_y); comp.SetMoveTargetPos(guide.pos_x, guide.pos_y); SetPieceMoveAnimStart(SelectPiece); //自分のターンか確認 if (GameManager.GetInstance().GetIsTurnPlayerMe() == true) { //移動情報の送信 StartCoroutine(PostPieceMove()); GameManager.GetInstance().SetIsTurnPlayerMe(false); } else { Debug.Log("自分のターンではない"); //仮 loginDataManager.user_id = GameManager.GetInstance().turn_player_id; Debug.Log("UserIDを変更しました"); GameManager.GetInstance().last_turn = -1; } //選択解除 SelectPiece = null; //ガイドをすべて削除 Guide.AllGuideDelete(); }
//成り判定 返り値がtrueならガイドを設置したので移動処理を中断 bool PromoteCheck(Guide gui, PieceBase piece) { int pos_x = gui.pos_x; int pos_y = gui.pos_y; //ガイドが移動用なら成り用ガイドを設置するか判定 if (piece.move.CanPromote == true && piece.have_flag == false) //成ることが出来る駒で配置ではない { bool check = false; //移動先が相手陣地なら if (CheckEnemyTerritory(pos_y)) { check = true; } //元の場所が相手陣地だった場合 if (CheckEnemyTerritory(piece.board_pos_y)) { check = true; } if (check == true) { //成ることが出来る //成らないと動ける場所がなくなる場合を調べる if (CheckMovePos(piece.kind, pos_y) == true) { Guide.CreateGuidePromote(pos_x, pos_y, piece); //成るかどうか選択させる return(true); } else { //動ける場所がない Debug.Log("成り"); piece.SetPromote(true); //強制的に成る return(false); } } } //成ることが出来ない return(false); }
//GET //駒の状態を取得 IEnumerator DownloadPiecesData() { string url = define.URL; if (loginDataManager.login_flag == false) { url = (define.URL + "get_pieces.json"); //test用 } else { url += "plays/" + loginDataManager.play_id.ToString() + "/pieces"; } WWW www = new WWW(url); //接続待ち yield return(www); if (www.error != null) { Debug.Log("Error!"); } else { //接続成功 Debug.Log("DOWNLOAD Piece Success"); Debug.Log(www.text); Debug.Log(www.url); //JSON //1~40 駒のID var jsonAllPieceData = MiniJSON.Json.Deserialize(www.text) as Dictionary <string, object>; //初期化 InitBoardPosArray(); HavePiecesList.Clear(); HavePiecesListEnemy.Clear(); Guide.AllDeleteFromTag(define.LastMoverTag); //最後に移動した駒表示ガイドを削除 bool create_flag = false; //各駒の情報 for (int i = 0; i < define.PieceNum; i++) { var jsonOnePieceData = (Dictionary <string, object>)jsonAllPieceData[(i + 1).ToString()]; if (PiecesArrayID[i] == null) //初めて呼ばれた時は作成する { GameObject piece = CreatePiece(); PiecesArrayID[i] = piece; create_flag = true; } //コンポーネントの取得 PieceBase comp = PiecesArrayID[i].GetComponent <PieceBase> (); //ID設定 comp.SetID(i + 1); //位置設定 int pos_x = System.Convert.ToInt32(jsonOnePieceData["posx"]); int pos_y = System.Convert.ToInt32(jsonOnePieceData["posy"]); if (create_flag == false) //初期化時ではない { //このターン移動した駒を判定 if (comp.board_pos_x != pos_x || comp.board_pos_y != pos_y) { comp.last_move_flag = true; } if (comp.last_move_flag == true) { Guide.CreateGuide(pos_x, pos_y, GuideKind.LAST_MOVER); comp.SetBoardPos(pos_x, pos_y); //駒をアニメーション移動 //持ち駒ではなく盤面にあるかチェック if (BoardManager.CheckOutRangeBoardPointXY(pos_x, pos_y) == false) { comp.SetMoveTargetPos(pos_x, pos_y); SetPieceMoveAnimStart(PiecesArrayID[i]); } } } else { comp.SetLocalPos(pos_x, pos_y); } comp.last_move_flag = false; int user_id = loginDataManager.user_id; if (loginDataManager.login_flag == false) { //test用 user_id = 5; } if (loginDataManager.watcher_flag == true) { //観戦者なら先手視点 user_id = UserNameManager.GetInst().first_player_user_ID; } int owner_ID = System.Convert.ToInt32(jsonOnePieceData["owner"]); comp.owner_ID = owner_ID; if (owner_ID == user_id) { //自軍 comp.SetEnemyFlag(false); } else { //敵 comp.SetEnemyFlag(true); } //成り bool promote_flag = System.Convert.ToBoolean(jsonOnePieceData["promote"]); comp.SetPromote(promote_flag); //駒の名前と敵判定と成りの情報から種類を決定 int kind = PieceKind.ChangeKindStringToint((string)jsonOnePieceData["name"]); comp.SetKind(kind); //盤面配列に記録 if (BoardManager.CheckOutRangeBoardPointXY(pos_x, pos_y) == false) //盤面上の駒なら 取った駒は座標0,0 { int tx = pos_x - 1; int ty = pos_y - 1; BoardPosArray[ty, tx] = PiecesArrayID[i]; comp.SetHaveFlag(false); //持ち駒ではなくす } else { //盤面に無い駒は持ち駒とする comp.SetHaveFlag(true); if (comp.enemy_flag == true) { HavePiecesList.Add(PiecesArrayID[i]); } else { HavePiecesListEnemy.Add(PiecesArrayID[i]); } } } //王手判定 CheckOhte(); Guide.AllGuideDelete(); //ガイド削除 //持ち駒を並べる if (create_flag == true) { //最初はアニメーション移動あり 観戦者用 UpdateHavePiece(true); } else { UpdateHavePiece(false); } //盤 if (GameManager.GetInstance().first_player_flag == false) { //後手なら盤を180度回転させる board.transform.localEulerAngles = new Vector3(0, 0, 180.0f); } else { board.transform.localEulerAngles = new Vector3(0, 0, 0.0f); } } }