示例#1
0
    public void TakePiece(Vector2 space)
    {
        PieceInformation pieceInfo = null;

        foreach (PieceInformation info in pieceInformations)
        {
            if (info.gridCoordinate == space)
            {
                pieceInfo = info;
            }
        }

        if (pieceInfo != null)
        {
            if (pieceInfo.isWhite)
            {
                blackScore += pieceInfo.score;
            }
            else
            {
                whiteScore += pieceInfo.score;
            }
            Destroy(pieceInfo.gameObject);
            UpdateScores();
            CheckPiecesRemaining();
        }
    }
示例#2
0
 void Start()
 {
     chessController = FindObjectOfType <ChessController>();
     gridSize        = chessController.gridSize;
     gridOrigin      = chessController.gridOrigin;
     rectTransform   = GetComponent <RectTransform>();
     GetComponent <Button>().onClick.AddListener(() => ShowMoves());
     thisInformation = GetComponent <PieceInformation>();
     thisInformation.gridCoordinate = gridCoordinate;
     thisInformation.isWhite        = isWhite;
     thisInformation.isKing         = false;
 }
示例#3
0
    public PieceInformation CheckPieceOnSquare(Vector2 space)
    {
        PieceInformation pieceInfo = null;

        foreach (PieceInformation info in pieceInformations)
        {
            if (info.gridCoordinate == space)
            {
                pieceInfo = info;
            }
        }
        return(pieceInfo);
    }
示例#4
0
        static public PieceInformation GetPieceInformation(UInt16 ZoneID, byte PieceId)
        {
            string PieceInfoFile = Program.Config.ZoneFolder + "zone" + String.Format("{0:000}", ZoneID) + "/mappieces.csv";

            try
            {
                using (StreamReader Reader = new StreamReader(PieceInfoFile))
                {
                    int CurrentPieceId = 0;
                    while (Reader.Peek() > 0)
                    {
                        string Line = Reader.ReadLine();

                        if (CurrentPieceId == PieceId)
                        {
                            string[]         Values = Line.Split(',');
                            PieceInformation Info   = new PieceInformation();
                            Info.PieceId = byte.Parse(Values[0]);
                            Info.OffsetX = ushort.Parse(Values[1]);
                            Info.OffsetY = ushort.Parse(Values[2]);
                            Info.Width   = ushort.Parse(Values[3]);
                            Info.Height  = ushort.Parse(Values[4]);
                            return(Info);
                        }

                        ++CurrentPieceId;
                    }
                }
            }
            catch
            {
                Log.Error("WorldMgr", "Invalid Piece File Directory : " + PieceInfoFile);
                return(null);
            }

            return(null);
        }
示例#5
0
    void ShowMoves()
    {
        showMoves = !showMoves;
        if (showMoves)
        {
            List <Vector2>   possibleMoves = new List <Vector2>();
            Vector2          checkSpace    = new Vector2();
            PieceInformation checkInfo     = null;
            //check space in front is empty
            if (gridCoordinate.y + 1 < 8)                                         // checking if space is on the board
            {
                checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y + 1); //checking space directly infront
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                if (checkInfo == null)                                            //if piece doesn't exist
                {
                    possibleMoves.Add(checkSpace);                                //add coordinate for button
                }
            }
            //check if first move
            if (firstMove && gridCoordinate.y + 2 < 8)                                //if first move can move two spaces
            {
                if (possibleMoves.Count > 0)                                          //if piece can't move in front then it wont be able to move two in front
                {
                    checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y + 2); //checking space two infront
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                    if (checkInfo == null)                                            //if piece doesn't exist
                    {
                        possibleMoves.Add(checkSpace);                                //add coordinate for button
                    }
                }
            }
            //check diagonal left
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 1 < 8)                  //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 1);   //checking space up and to the left
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !thisInformation.isWhite) //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                              //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }
            //check diagonal right
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y + 1 < 8)                   //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y + 1);   //checking space up and to the right
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !thisInformation.isWhite) //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                              //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }

            GameObject dismissClone = Instantiate(dismissButton, transform.parent);
            dismissClone.GetComponent <Button>().onClick.AddListener(() => ShowMoves());
            dismissButtonClone = dismissClone;

            for (int i = 0; i < possibleMoves.Count; i++)//spawning buttons
            {
                GameObject    buttonClone = Instantiate(moveButton, transform.parent);
                RectTransform rect        = buttonClone.GetComponent <RectTransform>();
                Vector2       move        = new Vector2((possibleMoves[i].x * gridSize) + gridOrigin.x, (possibleMoves[i].y * gridSize) + gridOrigin.y);
                rect.localPosition = move;
                moveButtons.Add(buttonClone);
                Vector2 moveTo = new Vector2(possibleMoves[i].x, possibleMoves[i].y);
                Button  button = buttonClone.GetComponent <Button>();
                button.onClick.AddListener(() => MovePiece(moveTo));
            }
        }
        else //Destroy move buttons
        {
            for (int i = 0; i < moveButtons.Count; i++)
            {
                Destroy(moveButtons[i]);
            }
            moveButtons.Clear();
            Destroy(dismissButtonClone);
        }
    }
示例#6
0
    List <Vector2> PawnMoves(Vector2 position, bool isWhite, bool firstMove)
    {
        Vector2          gridCoordinate = position;
        List <Vector2>   possibleMoves  = new List <Vector2>();
        Vector2          checkSpace     = new Vector2();
        PieceInformation checkInfo      = null;

        if (isWhite)
        {
            //check space in front is empty
            if (gridCoordinate.y + 1 < 8)                                         // checking if space is on the board
            {
                checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y + 1); //checking space directly infront
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                if (checkInfo == null)                                            //if piece doesn't exist
                {
                    possibleMoves.Add(checkSpace);                                //add coordinate for button
                }
            }

            //check if first move
            if (firstMove && gridCoordinate.y + 2 < 8)                                //if first move can move two spaces
            {
                if (possibleMoves.Count > 0)                                          //if piece can't move in front then it wont be able to move two in front
                {
                    checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y + 2); //checking space two infront
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                    if (checkInfo == null)                                            //if piece doesn't exist
                    {
                        possibleMoves.Add(checkSpace);                                //add coordinate for button
                    }
                }
            }

            //check diagonal left
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 1 < 8)                //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 1); //checking space up and to the left
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !isWhite)               //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                            //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }
            //check diagonal right
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y + 1 < 8)                 //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y + 1); //checking space up and to the right
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !isWhite)               //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                            //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }
        }
        else
        {
            if (gridCoordinate.y - 1 >= 0)                                        // checking if space is on the board
            {
                checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y - 1); //checking space directly infront
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                if (checkInfo == null)                                            //if piece doesn't exist
                {
                    possibleMoves.Add(checkSpace);                                //add coordinate for button
                }
            }
            //check if first move
            if (firstMove && gridCoordinate.y - 2 >= 0)                               //if first move can move two spaces
            {
                if (possibleMoves.Count > 0)                                          //if piece can't move in front then it wont be able to move two in front
                {
                    checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y - 2); //checking space two infront
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);      //getting info on piece (if piece is there) on square
                    if (checkInfo == null)                                            //if piece doesn't exist
                    {
                        possibleMoves.Add(checkSpace);                                //add coordinate for button
                    }
                }
            }
            //check diagonal left
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y - 1 >= 0)               //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y - 1); //checking space up and to the left
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !isWhite)               //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                            //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }
            //check diagonal right
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y - 1 >= 0)                //check if space is on board
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y - 1); //checking space up and to the right
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo != null && checkInfo.isWhite == !isWhite)               //checking if piece exists AND is piece is opposite colour
                {
                    if (!checkInfo.isKing)                                            //checking if piece is not a king
                    {
                        possibleMoves.Add(checkSpace);
                    }
                }
            }
        }
        return(possibleMoves);
    }
示例#7
0
    List <Vector2> RookMoves(Vector2 position, bool isWhite)
    {
        Vector2          gridCoordinate = position;
        List <Vector2>   possibleMoves  = new List <Vector2>();
        Vector2          checkSpace     = new Vector2();
        PieceInformation checkInfo      = null;

        //checking down line
        if (gridCoordinate.y > 0)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y - i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.y - i < 0)//else space is not on board
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null) //if space is empty
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite) //else if space has an enemy
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                    else if (checkInfo.isWhite == isWhite)//else space has a friendly
                    {
                        isFinished = true;
                    }
                }
            }
        }

        //checking up line
        if (gridCoordinate.y < 7)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x, gridCoordinate.y + i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.y + i > 7)//else space is not on board
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null) //if space is empty
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite) //else if space has an enemy
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                    else if (checkInfo.isWhite == isWhite)//else space has a friendly
                    {
                        isFinished = true;
                    }
                }
            }
        }

        //checking right line
        if (gridCoordinate.x > 0)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x - i, gridCoordinate.y);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x - i < 0)//else space is not on board
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null) //if space is empty
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite) //else if space has an enemy
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                    else if (checkInfo.isWhite == isWhite)//else space has a friendly
                    {
                        isFinished = true;
                    }
                }
            }
        }
        //checking right line
        if (gridCoordinate.x < 7)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x + i, gridCoordinate.y);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x + i > 7)//else space is not on board
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null) //if space is empty
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite) //else if space has an enemy
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                    else if (checkInfo.isWhite == isWhite)//else space has a friendly
                    {
                        isFinished = true;
                    }
                }
            }
        }
        return(possibleMoves);
    }
示例#8
0
    List <Vector2> KnightMoves(Vector2 position, bool isWhite)
    {
        List <Vector2>   possibleMoves  = new List <Vector2>();
        Vector2          checkSpace     = new Vector2();
        PieceInformation checkInfo      = null;
        Vector2          gridCoordinate = position;

        //checking UL
        if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 2 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking UR
        if (gridCoordinate.x + 1 < 8 && gridCoordinate.y + 2 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y + 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking UL
        if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 2 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking RU
        if (gridCoordinate.x + 2 < 8 && gridCoordinate.y + 1 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y + 1);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking RD
        if (gridCoordinate.x + 2 < 8 && gridCoordinate.y - 1 >= 0)
        {
            checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y - 1);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking RU
        if (gridCoordinate.x + 2 < 8 && gridCoordinate.y + 1 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y + 1);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking DR
        if (gridCoordinate.x + 1 < 8 && gridCoordinate.y - 2 >= 0)
        {
            checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y - 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking DR
        if (gridCoordinate.x + 1 < 8 && gridCoordinate.y - 2 >= 0)
        {
            checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y - 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking DL
        if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y - 2 >= 0)
        {
            checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y - 2);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking LD
        if (gridCoordinate.x - 2 >= 0 && gridCoordinate.y - 1 >= 0)
        {
            checkSpace = new Vector2(gridCoordinate.x - 2, gridCoordinate.y - 1);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        //checking RU
        if (gridCoordinate.x - 2 >= 0 && gridCoordinate.y + 1 < 8)
        {
            checkSpace = new Vector2(gridCoordinate.x - 2, gridCoordinate.y + 1);
            checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
            if (checkInfo == null || checkInfo.isWhite == !isWhite)
            {
                possibleMoves.Add(checkSpace);
            }
        }

        return(possibleMoves);
    }
示例#9
0
    List <Vector2> BishopMoves(Vector2 position, bool isWhite)
    {
        List <Vector2>   possibleMoves  = new List <Vector2>();
        Vector2          checkSpace     = new Vector2();
        PieceInformation checkInfo      = null;
        Vector2          gridCoordinate = position;

        //checking diagonal UR
        if (gridCoordinate.x < 7 && gridCoordinate.y < 7)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x + i, gridCoordinate.y + i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x + i > 7 || gridCoordinate.y + i > 7 || (checkInfo != null && checkInfo.isWhite == isWhite))
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null)
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite)
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                }
            }
        }

        //checking diagonal UL
        if (gridCoordinate.x > 0 && gridCoordinate.y < 7)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x - i, gridCoordinate.y + i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x - i < 0 || gridCoordinate.y + i > 7 || (checkInfo != null && checkInfo.isWhite == isWhite))
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null)
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite)
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                }
            }
        }

        //checking diagonal DR
        if (gridCoordinate.x < 7 && gridCoordinate.y > 0)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x + i, gridCoordinate.y - i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x + i > 7 || gridCoordinate.y - i < 0 || (checkInfo != null && checkInfo.isWhite == isWhite))
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null)
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite)
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                }
            }
        }

        //checking diagonal DL
        if (gridCoordinate.x > 0 && gridCoordinate.y > 0)
        {
            bool isFinished = false;
            for (int i = 1; i < 8; i++)
            {
                if (!isFinished)
                {
                    checkSpace = new Vector2(gridCoordinate.x - i, gridCoordinate.y - i);
                    checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                    if (gridCoordinate.x - i < 0 || gridCoordinate.y - i < 0 || (checkInfo != null && checkInfo.isWhite == isWhite))
                    {
                        isFinished = true;
                    }
                    else if (checkInfo == null)
                    {
                        possibleMoves.Add(checkSpace);
                    }
                    else if (checkInfo.isWhite == !isWhite)
                    {
                        possibleMoves.Add(checkSpace);
                        isFinished = true;
                    }
                }
            }
        }
        return(possibleMoves);
    }
示例#10
0
    void ShowMoves()
    {
        showMoves = !showMoves;
        if (showMoves)
        {
            List <Vector2>   possibleMoves = new List <Vector2>();
            Vector2          checkSpace    = new Vector2();
            PieceInformation checkInfo     = null;

            //checking diagonal UR
            if (gridCoordinate.x < 7 && gridCoordinate.y < 7)
            {
                bool isFinished = false;
                for (int i = 1; i < 8; i++)
                {
                    if (!isFinished)
                    {
                        checkSpace = new Vector2(gridCoordinate.x + i, gridCoordinate.y + i);
                        checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                        if (gridCoordinate.x + i > 7 || gridCoordinate.y + i > 7 || (checkInfo != null && checkInfo.isWhite == thisInformation.isWhite))
                        {
                            isFinished = true;
                        }
                        else if (checkInfo == null)
                        {
                            possibleMoves.Add(checkSpace);
                        }
                        else if (checkInfo.isWhite == !thisInformation.isWhite)
                        {
                            possibleMoves.Add(checkSpace);
                            isFinished = true;
                        }
                    }
                }
            }

            //checking diagonal UL
            if (gridCoordinate.x > 0 && gridCoordinate.y < 7)
            {
                bool isFinished = false;
                for (int i = 1; i < 8; i++)
                {
                    if (!isFinished)
                    {
                        checkSpace = new Vector2(gridCoordinate.x - i, gridCoordinate.y + i);
                        checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                        if (gridCoordinate.x - i < 0 || gridCoordinate.y + i > 7 || (checkInfo != null && checkInfo.isWhite == thisInformation.isWhite))
                        {
                            isFinished = true;
                        }
                        else if (checkInfo == null)
                        {
                            possibleMoves.Add(checkSpace);
                        }
                        else if (checkInfo.isWhite == !thisInformation.isWhite)
                        {
                            possibleMoves.Add(checkSpace);
                            isFinished = true;
                        }
                    }
                }
            }

            //checking diagonal DR
            if (gridCoordinate.x < 7 && gridCoordinate.y > 0)
            {
                bool isFinished = false;
                for (int i = 1; i < 8; i++)
                {
                    if (!isFinished)
                    {
                        checkSpace = new Vector2(gridCoordinate.x + i, gridCoordinate.y - i);
                        checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                        if (gridCoordinate.x + i > 7 || gridCoordinate.y - i < 0 || (checkInfo != null && checkInfo.isWhite == thisInformation.isWhite))
                        {
                            isFinished = true;
                        }
                        else if (checkInfo == null)
                        {
                            possibleMoves.Add(checkSpace);
                        }
                        else if (checkInfo.isWhite == !thisInformation.isWhite)
                        {
                            possibleMoves.Add(checkSpace);
                            isFinished = true;
                        }
                    }
                }
            }

            //checking diagonal DL
            if (gridCoordinate.x > 0 && gridCoordinate.y > 0)
            {
                bool isFinished = false;
                for (int i = 1; i < 8; i++)
                {
                    if (!isFinished)
                    {
                        checkSpace = new Vector2(gridCoordinate.x - i, gridCoordinate.y - i);
                        checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                        if (gridCoordinate.x - i < 0 || gridCoordinate.y - i < 0 || (checkInfo != null && checkInfo.isWhite == thisInformation.isWhite))
                        {
                            isFinished = true;
                        }
                        else if (checkInfo == null)
                        {
                            possibleMoves.Add(checkSpace);
                        }
                        else if (checkInfo.isWhite == !thisInformation.isWhite)
                        {
                            possibleMoves.Add(checkSpace);
                            isFinished = true;
                        }
                    }
                }
            }

            GameObject dismissClone = Instantiate(dismissButton, transform.parent);
            dismissClone.GetComponent <Button>().onClick.AddListener(() => ShowMoves());
            dismissButtonClone = dismissClone;
            if (possibleMoves.Count > 0)
            {
                for (int i = 0; i < possibleMoves.Count; i++)//spawning buttons
                {
                    GameObject    buttonClone = Instantiate(moveButton, transform.parent);
                    RectTransform rect        = buttonClone.GetComponent <RectTransform>();
                    Vector2       move        = new Vector2((possibleMoves[i].x * gridSize) + gridOrigin.x, (possibleMoves[i].y * gridSize) + gridOrigin.y);
                    rect.localPosition = move;
                    moveButtons.Add(buttonClone);
                    Vector2 moveTo = new Vector2(possibleMoves[i].x, possibleMoves[i].y);
                    Button  button = buttonClone.GetComponent <Button>();
                    button.onClick.AddListener(() => MovePiece(moveTo));
                }
            }
        }
        else //Destroy move buttons
        {
            for (int i = 0; i < moveButtons.Count; i++)
            {
                Destroy(moveButtons[i]);
            }
            moveButtons.Clear();
            Destroy(dismissButtonClone);
        }
    }
示例#11
0
    void ShowMoves()
    {
        showMoves = !showMoves;
        if (showMoves)
        {
            List <Vector2>   possibleMoves = new List <Vector2>();
            Vector2          checkSpace    = new Vector2();
            PieceInformation checkInfo     = null;

            //checking UL
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 2 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking UR
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y + 2 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y + 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking UL
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y + 2 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y + 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking RU
            if (gridCoordinate.x + 2 < 8 && gridCoordinate.y + 1 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y + 1);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking RD
            if (gridCoordinate.x + 2 < 8 && gridCoordinate.y - 1 >= 0)
            {
                checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y - 1);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking RU
            if (gridCoordinate.x + 2 < 8 && gridCoordinate.y + 1 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x + 2, gridCoordinate.y + 1);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking DR
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y - 2 >= 0)
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y - 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking DR
            if (gridCoordinate.x + 1 < 8 && gridCoordinate.y - 2 >= 0)
            {
                checkSpace = new Vector2(gridCoordinate.x + 1, gridCoordinate.y - 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking DL
            if (gridCoordinate.x - 1 >= 0 && gridCoordinate.y - 2 >= 0)
            {
                checkSpace = new Vector2(gridCoordinate.x - 1, gridCoordinate.y - 2);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking LD
            if (gridCoordinate.x - 2 >= 0 && gridCoordinate.y - 1 >= 0)
            {
                checkSpace = new Vector2(gridCoordinate.x - 2, gridCoordinate.y - 1);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            //checking RU
            if (gridCoordinate.x - 2 >= 0 && gridCoordinate.y + 1 < 8)
            {
                checkSpace = new Vector2(gridCoordinate.x - 2, gridCoordinate.y + 1);
                checkInfo  = chessController.CheckPieceOnSquare(checkSpace);
                if (checkInfo == null || checkInfo.isWhite == !thisInformation.isWhite)
                {
                    possibleMoves.Add(checkSpace);
                }
            }

            GameObject dismissClone = Instantiate(dismissButton, transform.parent);
            dismissClone.GetComponent <Button>().onClick.AddListener(() => ShowMoves());
            dismissButtonClone = dismissClone;
            if (possibleMoves.Count > 0)
            {
                for (int i = 0; i < possibleMoves.Count; i++)//spawning buttons
                {
                    GameObject    buttonClone = Instantiate(moveButton, transform.parent);
                    RectTransform rect        = buttonClone.GetComponent <RectTransform>();
                    Vector2       move        = new Vector2((possibleMoves[i].x * gridSize) + gridOrigin.x, (possibleMoves[i].y * gridSize) + gridOrigin.y);
                    rect.localPosition = move;
                    moveButtons.Add(buttonClone);
                    Vector2 moveTo = new Vector2(possibleMoves[i].x, possibleMoves[i].y);
                    Button  button = buttonClone.GetComponent <Button>();
                    button.onClick.AddListener(() => MovePiece(moveTo));
                }
            }
        }
        else //Destroy move buttons
        {
            for (int i = 0; i < moveButtons.Count; i++)
            {
                Destroy(moveButtons[i]);
            }
            moveButtons.Clear();
            Destroy(dismissButtonClone);
        }
    }