//クリックされた時 public void ClickPiece() { //自分のターンか確認 if (GameManager.GetInstance().GetIsTurnPlayerMe() == false) { return; } if (enemy_flag == true) { return; } //ピースマネージャーに選択されたことを伝える PieceManager pieceManager = PieceManager.GetInstance(); pieceManager.SetSelectPiece(this.gameObject); //ガイドリセット Guide.AllGuideDelete(); if (have_flag == true) { //持ち駒なら配置可能判定 Guide.CreateGuideForHavePiece(kind); } else { //自分の移動可能な場所にガイドを設置 move.CreateMoveGuide(board_pos_x, board_pos_y); } }
//王手判定 bool CheckOhte() { Guide.AllGuideDelete(); //ガイドリセット //ターンプレイヤーの王の位置を取得 int oh_x = -1; int oh_y = -1; foreach (var p in PiecesArrayID) { PieceBase piece = p.GetComponent <PieceBase>(); if (piece.kind == PieceKind.OH) { if (GameManager.GetInstance().turn_player_id == piece.owner_ID) { oh_x = piece.board_pos_x; oh_y = piece.board_pos_y; break; } } } Guide.ohte_check_flag = true; //ガイド制作時に味方駒の扱いを変更する //非ターンプレイヤーの全駒の移動可能範囲の取得 foreach (var p in PiecesArrayID) { PieceBase piece = p.GetComponent <PieceBase>(); if (GameManager.GetInstance().turn_player_id == piece.owner_ID) { continue; //非ターンプレイヤー } if (piece.have_flag == true) { continue; //持ち駒 } piece.move.CreateMoveGuide(piece.board_pos_x, piece.board_pos_y); } Guide.ohte_check_flag = false; //リセット GameObject[] guides = GameObject.FindGameObjectsWithTag(define.GuideTag); foreach (var g in guides) { Guide guide = g.GetComponent <Guide>(); if (guide.pos_x == oh_x && guide.pos_y == oh_y) { //王手 Debug.Log("王手"); StartCoroutine(DrawOhte()); return(true); } } return(false); }
//選択 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(); }
//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); } } }
//何もないところがクリックされた時 public void Click() { //駒選択リセット PieceManager.GetInstance().SetSelectPiece(null); Guide.AllGuideDelete(); }