コード例 #1
0
 void Awake()
 {
     instance = this;
 }
コード例 #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray screenRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(screenRay, out RaycastHit hit))
            {
                GameObject hitObject   = hit.collider.gameObject;
                Vector3    hitPosition = hitObject.transform.position - chessBoard.transform.position;
                Vector2Int gridPoint   = Geometry.GridFromPoint(hitPosition);
                if (hitObject.CompareTag("Highlight"))
                {
                    if (ARChessGameManager.instance.specialMove == 1) //switch king with rook1
                    {
                        GameObject rook1 = ARChessGameManager.instance.GetPieceAtPosition(ARChessGameManager.pieces, 0, 0);

                        if (piece.gameObject.CompareTag("BlackKing"))
                        {
                            ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 1, piece.GetGameObject());
                            ARChessGameManager.instance.SetPositionToNull(0, 3);

                            Vector2Int specialMove         = new Vector2Int(0, 2);
                            Vector3    specialMovePosition = Geometry.PointFromGrid(specialMove);
                            ARChessGameManager.instance.MovePiece(rook1, specialMovePosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 2, rook1);
                            ARChessGameManager.instance.SetPositionToNull(0, 0);

                            ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                            ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                            ARChessGameManager.instance.ChangePlayer();

                            if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                            {
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 1);
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "BlackRook1", 0, 2);
                                piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                            }
                        }
                        else if (piece.gameObject.CompareTag("WhiteKing"))
                        {
                            ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 2, piece.GetGameObject());
                            ARChessGameManager.instance.SetPositionToNull(0, 4);

                            Vector2Int specialMove         = new Vector2Int(0, 3);
                            Vector3    specialMovePosition = Geometry.PointFromGrid(specialMove);
                            ARChessGameManager.instance.MovePiece(rook1, specialMovePosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 3, rook1);
                            ARChessGameManager.instance.SetPositionToNull(0, 0);

                            ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                            ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                            ARChessGameManager.instance.ChangePlayer();

                            if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                            {
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 2);
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "WhiteRook1", 0, 3);
                                piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                            }
                        }
                        ARChessGameManager.instance.specialMove = 0;
                    }
                    else if (ARChessGameManager.instance.specialMove == 2) //switch king with rook2
                    {
                        GameObject rook2 = ARChessGameManager.instance.GetPieceAtPosition(ARChessGameManager.pieces, 0, 7);

                        if (piece.gameObject.CompareTag("BlackKing"))
                        {
                            ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 5, piece.GetGameObject());
                            ARChessGameManager.instance.SetPositionToNull(0, 3);

                            Vector2Int specialMove         = new Vector2Int(0, 4);
                            Vector3    specialMovePosition = Geometry.PointFromGrid(specialMove);
                            ARChessGameManager.instance.MovePiece(rook2, specialMovePosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 4, rook2);
                            ARChessGameManager.instance.SetPositionToNull(0, 7);

                            ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                            ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                            ARChessGameManager.instance.ChangePlayer();

                            if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                            {
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 5);
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "BlackRook2", 0, 4);
                                piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                            }
                        }
                        else if (piece.gameObject.CompareTag("WhiteKing"))
                        {
                            ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 6, piece.GetGameObject());
                            ARChessGameManager.instance.SetPositionToNull(0, 4);

                            Vector2Int specialMove         = new Vector2Int(0, 5);
                            Vector3    specialMovePosition = Geometry.PointFromGrid(specialMove);
                            ARChessGameManager.instance.MovePiece(rook2, specialMovePosition + chessBoard.transform.position);
                            ARChessGameManager.instance.SetPositionToObject(0, 5, rook2);
                            ARChessGameManager.instance.SetPositionToNull(0, 7);

                            ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                            ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                            ARChessGameManager.instance.ChangePlayer();

                            if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                            {
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 6);
                                piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "WhiteRook2", 0, 5);
                                piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                            }
                        }

                        ARChessGameManager.instance.specialMove = 0;
                    }

                    if (ARChessGameManager.instance.CheckIfPositionIsFree(ARChessGameManager.pieces, gridPoint.x, gridPoint.y)) //empty location => can move
                    {
                        ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
                        Vector2Int initialPosition = ARChessGameManager.instance.GetRowAndColumn(ARChessGameManager.pieces, piece.tag);
                        ARChessGameManager.instance.SetPositionToObject(gridPoint.x, gridPoint.y, piece.GetGameObject());
                        ARChessGameManager.instance.SetPositionToNull(initialPosition.x, initialPosition.y);

                        ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                        ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                        //debugText.text += " " + initialPosition.x + " " + initialPosition.y;
                        ARChessGameManager.instance.ChangePlayer();

                        if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                        {
                            piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, gridPoint.x, gridPoint.y);
                            piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                        }
                    }

                    if (piece.tag.Contains("Pawn") && gridPoint.x == 7) //transform the black pawn into a black queen
                    {
                        Mesh meshInstance = Instantiate(queenMesh);
                        piece.GetComponent <MeshFilter>().sharedMesh = meshInstance;
                        Destroy(piece.GetComponent <Pawn>());
                        piece.gameObject.AddComponent <Queen>();

                        string oldTag = piece.tag; //store the old tag

                        if (piece.tag.Contains("Black"))
                        {
                            ARChessGameManager.IncrementNumberOfBlackQueens();
                            piece.tag = "BlackQueen" + ARChessGameManager.GetNumberOfBlackQueens(); //new tag
                        }
                        else if (piece.tag.Contains("White"))
                        {
                            ARChessGameManager.IncrementNumberOfWhiteQueens();
                            piece.tag = "WhiteQueen" + ARChessGameManager.GetNumberOfWhiteQueens(); //new tag
                        }

                        if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                        {
                            //tell the opponent to also instantiate the queen
                            piece.GetPhotonView().RPC("TransformPawnInQueen", RpcTarget.OthersBuffered, oldTag, piece.tag);
                        }
                    }

                    ExitState();
                }
                //else if (ARChessGameManager.instance.highlightedObjects.Contains(hitObject) && ((piece.tag.StartsWith("White") && hitObject.tag.StartsWith("Black")) || (piece.tag.StartsWith("Black") && hitObject.tag.StartsWith("White")))) //full location => capture piece
                else if (ARChessGameManager.highlightedObjects.Contains(hitObject) && (piece.tag.StartsWith(ARChessGameManager.currentPlayer) && hitObject.tag.StartsWith(ARChessGameManager.otherPlayer)))

                {
                    ARChessGameManager.instance.CapturePieceAt(gridPoint);
                    ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);

                    Vector2Int initialPosition = ARChessGameManager.instance.GetRowAndColumn(ARChessGameManager.pieces, piece.tag);

                    ARChessGameManager.instance.SetPositionToObject(gridPoint.x, gridPoint.y, piece.GetGameObject());
                    ARChessGameManager.instance.SetPositionToNull(initialPosition.x, initialPosition.y);

                    ARChessGameManager.instance.RefreshAttackedSquares(ARChessGameManager.pieces, false);
                    ARChessGameManager.instance.VerifyForCheck(ARChessGameManager.pieces, false);

                    ARChessGameManager.instance.ChangePlayer();

                    if (ARChessGameManager.ChosenGameMode != GameMode.SinglePlayer)
                    {
                        piece.GetPhotonView().RPC("CapturePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, gridPoint.x, gridPoint.y);
                        piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
                    }

                    ExitState();
                }
            }
        }

        /*if (Input.touchCount > 0)
         * {
         *  foreach (Touch touch in Input.touches)
         *  {
         *      if (touch.phase == TouchPhase.Began)
         *      {
         *          Ray screenRay = Camera.main.ScreenPointToRay(touch.position);
         *          if (Physics.Raycast(screenRay, out RaycastHit hit))
         *          {
         *              GameObject hitObject = hit.collider.gameObject;
         *              Vector3 hitPosition = hitObject.transform.position - chessBoard.transform.position;
         *              Vector2Int gridPoint = Geometry.GridFromPoint(hitPosition);
         *
         *              if (hitObject.tag == "Highlight")
         *              {
         *                  if (ARChessGameManager.instance.specialMove == 1) //switch king with rook1
         *          {
         *              GameObject rook1 = ARChessGameManager.instance.GetPieceAtPosition(0, 0);
         *
         *              if (piece.gameObject.tag.Equals("BlackKing") || piece.gameObject.tag.Equals("BlueKing"))
         *              {
         *                  ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 1, piece.GetGameObject());
         *                  ARChessGameManager.instance.SetPositionToNull(0, 3);
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 1);
         *
         *                  Vector2Int specialMove = new Vector2Int();
         *                  specialMove.Set(0, 2);
         *                  Vector3 specialMovePosition = Geometry.PointFromGrid(specialMove);
         *                  ARChessGameManager.instance.MovePiece(rook1, specialMovePosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 2, rook1);
         *                  ARChessGameManager.instance.SetPositionToNull(0, 0);
         *
         *                  //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                  //ARChessGameManager.instance.VerifyForCheck();
         *
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "BlackRook1", 0, 2);
         *
         *                  ARChessGameManager.instance.ChangePlayer();
         *                  piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *              }
         *              else if (piece.gameObject.tag.Equals("WhiteKing") || piece.gameObject.tag.Equals("RedKing"))
         *                      {
         *                  ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 2, piece.GetGameObject());
         *                  ARChessGameManager.instance.SetPositionToNull(0, 4);
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 2);
         *
         *                  Vector2Int specialMove = new Vector2Int();
         *                  specialMove.Set(0, 2);
         *                  Vector3 specialMovePosition = Geometry.PointFromGrid(specialMove);
         *                  ARChessGameManager.instance.MovePiece(rook1, specialMovePosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 3, rook1);
         *                  ARChessGameManager.instance.SetPositionToNull(0, 0);
         *
         *                  //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                  //ARChessGameManager.instance.VerifyForCheck();
         *
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "WhiteRook1", 0, 3);
         *
         *                  ARChessGameManager.instance.ChangePlayer();
         *                  piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *              }
         *              ARChessGameManager.instance.specialMove = 0;
         *          }
         *          else if (ARChessGameManager.instance.specialMove == 2) //switch king with rook2
         *          {
         *              GameObject rook2 = ARChessGameManager.instance.GetPieceAtPosition(0, 7);
         *
         *              if (piece.gameObject.tag.Equals("BlackKing") || piece.gameObject.tag.Equals("BlueKing"))
         *              {
         *                  ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 5, piece.GetGameObject());
         *                  ARChessGameManager.instance.SetPositionToNull(0, 3);
         *
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 5);
         *
         *                  Vector2Int specialMove = new Vector2Int();
         *                  specialMove.Set(0, 4);
         *                  Vector3 specialMovePosition = Geometry.PointFromGrid(specialMove);
         *                  ARChessGameManager.instance.MovePiece(rook2, specialMovePosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 4, rook2);
         *                  ARChessGameManager.instance.SetPositionToNull(0, 7);
         *
         *                  //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                  //ARChessGameManager.instance.VerifyForCheck();
         *
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "BlackRook2", 0, 4);
         *
         *                  ARChessGameManager.instance.ChangePlayer();
         *                  piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *              }
         *              else if (piece.gameObject.tag.Equals("WhiteKing") || piece.gameObject.tag.Equals("RedKing"))
         *              {
         *                  ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 6, piece.GetGameObject());
         *                  ARChessGameManager.instance.SetPositionToNull(0, 4);
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, 0, 6);
         *
         *                  Vector2Int specialMove = new Vector2Int();
         *                  specialMove.Set(0, 5);
         *                  Vector3 specialMovePosition = Geometry.PointFromGrid(specialMove);
         *                  ARChessGameManager.instance.MovePiece(rook2, specialMovePosition + chessBoard.transform.position);
         *                  ARChessGameManager.instance.SetPositionToObject(0, 5, rook2);
         *                  ARChessGameManager.instance.SetPositionToNull(0, 7);
         *
         *                  //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                  //ARChessGameManager.instance.VerifyForCheck();
         *
         *                  piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, "WhiteRook2", 0, 5);
         *
         *                  ARChessGameManager.instance.ChangePlayer();
         *                  piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *              }
         *
         *              ARChessGameManager.instance.specialMove = 0;
         *          }
         *
         *                  //debugText.text = "can move " + gridPoint.x + " " + gridPoint.y;
         *                  if (ARChessGameManager.instance.CheckIfPositionIsFree(gridPoint.x, gridPoint.y)) //empty location => can move
         *                  {
         *                      ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *
         *                      //ARChessGameManager.instance.MovePiece(piece.gameObject); //add the piece to movedPieces list
         *
         *                      Vector2Int initialPosition = ARChessGameManager.instance.GetRowAndColumn(piece.tag);
         *                      ARChessGameManager.instance.SetPositionToObject(gridPoint.x, gridPoint.y, piece.GetGameObject());
         *                      ARChessGameManager.instance.SetPositionToNull(initialPosition.x, initialPosition.y);
         *
         *                      //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                      //ARChessGameManager.instance.VerifyForCheck();
         *
         *                      piece.GetPhotonView().RPC("MovePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, gridPoint.x, gridPoint.y);
         *                      ARChessGameManager.instance.ChangePlayer();
         *                      piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *                  }
         *
         *                  if (piece.tag.Contains("Pawn") && gridPoint.x == 7) //transform the black pawn into a black queen
         *                  {
         *                      Mesh meshInstance = Instantiate(queenMesh);
         *                      piece.GetComponent<MeshFilter>().sharedMesh = meshInstance;
         *                      Destroy(piece.GetComponent<Pawn>());
         *                      piece.gameObject.AddComponent<Queen>();
         *
         *                      string oldTag = piece.tag; //store the old tag
         *
         *                      if (piece.tag.Contains("Black"))
         *                      {
         *                          ARChessGameManager.IncrementNumberOfBlackQueens();
         *                          piece.tag = "BlackQueen" + ARChessGameManager.GetNumberOfBlackQueens();
         *                      }
         *                      else if (piece.tag.Contains("White"))
         *                      {
         *                          ARChessGameManager.IncrementNumberOfWhiteQueens();
         *                          piece.tag = "WhiteQueen" + ARChessGameManager.GetNumberOfWhiteQueens();
         *                      }
         *                      else if (piece.tag.Contains("Blue"))
         *                      {
         *                          ARChessGameManager.IncrementNumberOfBlueQueens();
         *                          piece.tag = "BlueQueen" + ARChessGameManager.GetNumberOfBlueQueens();
         *                      }
         *                      else if (piece.tag.Contains("Red"))
         *                      {
         *                          ARChessGameManager.IncrementNumberOfRedQueens();
         *                          piece.tag = "RedQueen" + ARChessGameManager.GetNumberOfRedQueens();
         *                      }
         *
         *                      //tell the opponent to also instantiate the queen
         *                      piece.GetPhotonView().RPC("TransformPawnInQueen", RpcTarget.OthersBuffered, oldTag, piece.tag);
         *                  }
         *
         *                  ExitState();
         *              }
         *              //else if (ARChessGameManager.instance.highlightedObjects.Contains(hitObject) && ((piece.tag.StartsWith("White") && hitObject.tag.StartsWith("Black")) || (piece.tag.StartsWith("Black") && hitObject.tag.StartsWith("White")))) //full location => capture piece
         *              else if (ARChessGameManager.instance.highlightedObjects.Contains(hitObject) && (piece.tag.StartsWith(ARChessGameManager.instance.currentPlayer) && hitObject.tag.StartsWith(ARChessGameManager.instance.otherPlayer)))
         *              {
         *                  ARChessGameManager.instance.CapturePieceAt(gridPoint);
         *                  ARChessGameManager.instance.MovePiece(piece.GetGameObject(), hitPosition + chessBoard.transform.position);
         *
         *                  //ARChessGameManager.instance.MovePiece(piece.gameObject); //add the piece to movedPieces list
         *
         *                  Vector2Int initialPosition = ARChessGameManager.instance.GetRowAndColumn(piece.tag);
         *                  ARChessGameManager.instance.SetPositionToObject(gridPoint.x, gridPoint.y, piece.GetGameObject());
         *                  ARChessGameManager.instance.SetPositionToNull(initialPosition.x, initialPosition.y);
         *
         *                  //ARChessGameManager.instance.RefreshAttackedSquares();
         *
         *                  //ARChessGameManager.instance.VerifyForCheck();
         *
         *                  piece.GetPhotonView().RPC("CapturePieceForOpponent", RpcTarget.OthersBuffered, piece.gameObject.tag, gridPoint.x, gridPoint.y);
         *                  ARChessGameManager.instance.ChangePlayer();
         *                  piece.GetPhotonView().RPC("SwitchPlayer", RpcTarget.OthersBuffered);
         *                  ExitState();
         *              }
         *
         *
         *          }
         *      }
         *  }
         * }*/
    }