Example #1
0
    protected List <Board.Move> GetMovesInDirection(Board.Direction direction, Board.Square square, Board.Square[,] board, bool multipleSquares = true, bool isPawn = false)
    {
        List <Board.Move> moves = new List <Board.Move>();

        Board.Square s     = Board.instance.GetSquareInDirection(square, direction, board);
        Board.Square prevS = square;
        while (s != prevS)
        {
            if (s.piece == null)
            {
                moves.Add(new Board.Move(s.file, s.rank, this));
            }
            else if (s.piece.color != color)
            {
                if (!isPawn)
                {
                    moves.Add(new Board.Move(s.file, s.rank, this));
                }
                break;
            }
            else
            {
                break;
            }
            if (!multipleSquares)
            {
                break;
            }

            prevS = s;
            s     = Board.instance.GetSquareInDirection(s, direction, board);
        }
        return(moves);
    }
Example #2
0
    public PieceMove GetNextMove(Vector3 StartLoc, BoardPiece cat, BoardSpace moveSpace, Board.Direction direction)
    {
        //movesIndex += 1;
        PieceMove move = Moves[movesIndex];

        if (move.GetMyType() == "Walk" && Board.GetBoardDistance(move.moveSpace.GetSpaceByDirection(direction).GetCenterPoint(), cat.transform.position) > 0.1f)
        {
            moveSpace = moveSpace.GetSpaceByDirection(direction);
            Debug.Log("flipped " + moveSpace.name + " " + move.moveSpace.name);

            Board.Direction flippedDir = Board.FlipDirection(direction);
            cat.pieceDirection = flippedDir;
            GetMoveFlipped(flippedDir, moveSpace);
            return(move);
        }
        else if (movesIndex + 1 >= Moves.Count)
        {
            isActive = false;
            return(null);
        }
        else
        {
            movesIndex += 1;
            initializeMove(StartLoc, cat, moveSpace, direction, movesIndex);
            return(GetMove());
        }
    }
Example #3
0
 public void InitializeMove(Vector3 StartLoc, BoardPiece myPiece, BoardSpace moveSpace, Board.Direction Direction, bool lastSpace)
 {
     this.myPiece   = myPiece;
     this.moveSpace = moveSpace;
     this.Direction = Direction;
     //StartLoc = myPiece.transform.position;
     this.StartLoc = StartLoc;
     InitializeMoveType(lastSpace);
 }
Example #4
0
        public void GetNeighbor_GoesBeyondGrid_ReturnsHole(Board.Direction direction, int originCoordsX,
                                                           int originCoordsY)
        {
            var board    = new Board(array2x2x1);
            var origin   = board[originCoordsX, originCoordsY];
            var neighbor = board.GetNeighbor(origin as Tile, direction);

            Assert.That(neighbor, Is.InstanceOf(typeof(Hole)));
        }
Example #5
0
        public void GetNeighbor_SingleLayerBoard_NeighborIsCorrect(Board.Direction direction, char expectedLetter,
                                                                   int expectedCoordX, int expectedCoordY)
        {
            var  board       = new Board(array3x3x1);
            Tile centralTile = board[1, 1] as Tile;
            var  result      = board.GetNeighbor(centralTile, direction) as Tile;

            Assert.AreEqual(result.Letter, expectedLetter);
            Assert.AreEqual(result.Coords.X, expectedCoordX);
            Assert.AreEqual(result.Coords.Y, expectedCoordY);
        }
Example #6
0
        // GetMovePositions(): given MoveType, MoveStep, currentCell, return list of Cells representing available moves
        // .. return Vector2Int to decouple PieceManager and Board
        // .. assume currentCell is valid
        List <Vector2Int> GetMovePositions(BasePiece.MoveType moveType, BasePiece.MoveStep moveStep,
                                           Cell currentCell, Board.Direction frontDirection)
        {
            Debug.Log("PieceManager::GetMovePositions()");

            List <Vector2Int> result          = new List <Vector2Int>();
            Vector2Int        currentPosition = currentCell.GetBoardPosition();

            if (moveType == BasePiece.MoveType.Vertical)
            {
                List <Vector2Int> topPositions = GetDirectionPositions(Board.Direction.N, moveStep, currentCell, frontDirection);
                topPositions.ForEach(position => result.Add(position));
                List <Vector2Int> bottomPositions = GetDirectionPositions(Board.Direction.S, moveStep, currentCell, frontDirection);
                bottomPositions.ForEach(position => result.Add(position));
            }
            else if (moveType == BasePiece.MoveType.Diagonal)
            {
                List <Vector2Int> topLeftPositions = GetDirectionPositions(Board.Direction.NW, moveStep, currentCell, frontDirection);
                topLeftPositions.ForEach(position => result.Add(position));
                List <Vector2Int> topRightPositions = GetDirectionPositions(Board.Direction.NE, moveStep, currentCell, frontDirection);
                topRightPositions.ForEach(position => result.Add(position));

                List <Vector2Int> bottomRightPositions = GetDirectionPositions(Board.Direction.SE, moveStep, currentCell, frontDirection);
                bottomRightPositions.ForEach(position => result.Add(position));
                List <Vector2Int> bottomLeftPositions = GetDirectionPositions(Board.Direction.SW, moveStep, currentCell, frontDirection);
                bottomLeftPositions.ForEach(position => result.Add(position));
            }
            else if (moveType == BasePiece.MoveType.Horizontal)
            {
                List <Vector2Int> leftPositions = GetDirectionPositions(Board.Direction.W, moveStep, currentCell, frontDirection);
                leftPositions.ForEach(position => result.Add(position));

                List <Vector2Int> rightPositions = GetDirectionPositions(Board.Direction.E, moveStep, currentCell, frontDirection);
                rightPositions.ForEach(position => result.Add(position));
            }
            else if (moveType == BasePiece.MoveType.L)
            {
                List <Vector2Int> lPositions = GetLPositions(currentCell);
                lPositions.ForEach(position => result.Add(position));
            }
            else if (moveType == BasePiece.MoveType.Pawn)
            {
                List <Vector2Int> pawnPositions = GetPawnPositions(currentCell, frontDirection);

                pawnPositions.ForEach(position => result.Add(position));
            }

            return(result);
        }
Example #7
0
    public bool StartMoves(BoardPiece cat, BoardSpace startSpace, Board.Direction direction)
    {
        if (!isActive)
        {
            movesIndex = 0;
            isActive   = true;

            initializeMove(cat.transform.position, cat, startSpace, direction, 0);
            return(true);
        }
        else
        {
            return(false);
        }
    }
Example #8
0
        public void Refresh()
        {
            // Cogemos la dirección actual pulsada por el jugador en el teclado
            direction = board.GetDirectionKeyboard();

            // Por defecto increase_snake = false
            bool increase_snake = false;

            // Obtenemos la siguiente posición a la cabeza actual, antes de mover para realizar comprobaciones
            Piece next_position = board.NextPiece(direction, GetHead());

            // Si el snake se encuentra con otra posición de tipo BODY, terminará el juego
            if (hasColision(Piece.Type.BODY))
            {
                throw new GameOverException(board);
            }

            // Si el tipo de la pieza actual es FOOD significa que ha encontrado comida
            if (hasColision(Piece.Type.NORMAL_FOOD) || hasColision(Piece.Type.SPECIAL_FOOD))
            {
                // Seteamos increase_snake a true, informando que hay que incrementar el snake.body
                increase_snake = true;

                // Aumentamos puntuación del usuario en 1
                board.RefreshScore(1);

                if (hasColision(Piece.Type.NORMAL_FOOD))
                {
                    board.GetFood().SetActiveFood(false); // Seteamos active_food = false, informando que ya no existe comida en el tablero
                }
                else if (hasColision(Piece.Type.SPECIAL_FOOD))
                {
                    board.GetSpecialFood().SetActiveFood(false); // Seteamos active_food = false, informando que ya no existe comida en el tablero
                }
            }

            // Movemos el snake a la siguiente posición
            MoveSnake(increase_snake);

            // Comprobamos si existe o debemos asignar comida en el tablero
            board.GetFood().UpdateFood(board);

            // Comida especial
            board.GetSpecialFood().UpdateFood(board);
        }
Example #9
0
        // GetGeneralDirection(): given 2 positions (Vector2Int), return the direction of targetPosition relative to originalPosition
        Board.Direction GetGeneralDirection(Vector2Int originalPosition, Vector2Int targetPosition)
        {
            int originalX = originalPosition.x;
            int originalY = originalPosition.y;
            int targetX   = targetPosition.x;
            int targetY   = targetPosition.y;

            Board.Direction generalDirection = Board.Direction.None;

            if (targetX < originalX && targetY > originalY)
            {
                generalDirection = Board.Direction.NW;
            }
            else if (targetX == originalX && targetY > originalY)
            {
                generalDirection = Board.Direction.N;
            }
            else if (targetX > originalX && targetY > originalY)
            {
                generalDirection = Board.Direction.NE;
            }
            else if (targetX > originalX && targetY == originalY)
            {
                generalDirection = Board.Direction.E;
            }
            else if (targetX > originalX && targetY < originalY)
            {
                generalDirection = Board.Direction.SE;
            }
            else if (targetX == originalX && targetY < originalY)
            {
                generalDirection = Board.Direction.S;
            }
            else if (targetX < originalX && targetY < originalY)
            {
                generalDirection = Board.Direction.SW;
            }
            else if (targetX < originalX && targetY == originalY)
            {
                generalDirection = Board.Direction.W;
            }

            return(generalDirection);
        }
Example #10
0
        private Tuple <bool, Piece> validateJumpMove(
            Board.Direction directionOfMove,
            Tuple <Player, Piece> oldPieceInfo,
            Point newCoordinates)
        {
            Tuple <Player, Piece> pieceInfo;
            Tuple <bool, Piece>   rtnInfo = null;

            switch (directionOfMove)
            {
            case Board.Direction.NE:     // (0,4) -> (1,3)
                pieceInfo = getPieceInfo(newCoordinates.X - 1, newCoordinates.Y - 1);
                if (pieceInfo?.Item1.Color != oldPieceInfo?.Item1.Color)
                {
                    rtnInfo = new Tuple <bool, Piece>(true, pieceInfo?.Item2);
                }
                break;

            case Board.Direction.NW:    // (7,4) -> (6,3)
                pieceInfo = getPieceInfo(newCoordinates.X + 1, newCoordinates.Y - 1);
                if (pieceInfo?.Item1.Color != oldPieceInfo?.Item1.Color)
                {
                    rtnInfo = new Tuple <bool, Piece>(true, pieceInfo.Item2);
                }
                break;

            case Board.Direction.SW:
                pieceInfo = getPieceInfo(newCoordinates.X + 1, newCoordinates.Y + 1);
                if (pieceInfo?.Item1.Color != oldPieceInfo?.Item1.Color)
                {
                    rtnInfo = new Tuple <bool, Piece>(true, pieceInfo.Item2);
                }
                break;

            case Board.Direction.SE:
                pieceInfo = getPieceInfo(newCoordinates.X - 1, newCoordinates.Y + 1);
                if (pieceInfo?.Item1.Color != oldPieceInfo?.Item1.Color)
                {
                    rtnInfo = new Tuple <bool, Piece>(true, pieceInfo.Item2);
                }
                break;
            }
            return(rtnInfo);
        }
    public bool Move(Board.Direction direction, Func <GameObject, Vector2Int, bool> moveFunction)
    {
        Debug.Log("Player Try move: " + direction);
        Vector2Int newPos;

        Direction = direction;
        newPos    = direction switch
        {
            Board.Direction.UP => new Vector2Int(BoardPos.x - 1, BoardPos.y),
            Board.Direction.DOWN => new Vector2Int(BoardPos.x + 1, BoardPos.y),
            Board.Direction.RIGHT => new Vector2Int(BoardPos.x, BoardPos.y + 1),
            Board.Direction.LEFT => new Vector2Int(BoardPos.x, BoardPos.y - 1),
            _ => throw new Exception("Player move: Bad direction: " + direction),
        };
        if (moveFunction(Instance, newPos))
        {
            BoardPos = newPos;
            return(true);
        }
        return(false);
    }
Example #12
0
    //public void InitializeMoving()
    //{

    //}
    public bool MovePiece()//bool isStarting, bool forward, Board.Direction direction, MoveSet moveSet)
    {
        //if (isStarting) InitializeMoves(direction, moveSet);
        PieceMove move       = moveSet.GetMove();
        Vector3   moveVector = move.ForwardVector();
        float     friction   = currentBoardLoc.GetFriction(transform.position.x, transform.position.z);

        moveVector = friction * Speed * Time.deltaTime * moveVector;
        float remainingDistance = Vector3.Distance(transform.position, move.GetEndLoc());

        if (remainingDistance > moveVector.magnitude)
        {
            transform.position += moveVector;
        }
        else
        {
            //PieceMove nextMove = moveSet.GetNextMove(transform.position, this, currentBoardLoc, pieceDirection);
            if (moveSet.HasNextMove())
            {
                BoardSpace nextSpace = currentBoardLoc.GetSpaceByDirection(pieceDirection);
                pieceDirection = move.Direction;
                PieceMove nextMove = moveSet.GetNextMove(transform.position, this, currentBoardLoc, pieceDirection);
                //currentBoardLoc = nextSpace;
                move = nextMove;
                float deltaTime = Time.deltaTime * moveVector.magnitude / remainingDistance;
                moveVector = move.ForwardVector();
                friction   = 1; //currentBoardLoc.GetFriction()
                moveVector = friction * Speed * deltaTime * moveVector;
            }
            else
            {
                transform.position = move.GetEndLoc();

                PieceStat = PieceStats.idle;
                return(false);
            }
        }

        return(true);
    }
Example #13
0
        private void TakeTurn(Player currentPlayer)
        {
            Board.Direction direction = Board.Direction.Default;
            var             command   = Console.ReadKey().Key;

            switch (command)
            {
            case ConsoleKey.DownArrow:
                direction = Board.Direction.Down;
                break;

            case ConsoleKey.UpArrow:
                direction = Board.Direction.Up;
                break;

            case ConsoleKey.LeftArrow:
                direction = Board.Direction.Left;
                break;

            case ConsoleKey.RightArrow:
                direction = Board.Direction.Right;
                break;

            case ConsoleKey.Enter:
                board.LockPosition(currentPlayer.getSymbol());
                if (board.LockPosition(currentPlayer.getSymbol()) == false)
                {
                    Console.WriteLine("That position is alrdy taken!");
                    TakeTurn(currentPlayer);
                }
                else
                {
                    currentPlayer.getSymbol();
                }
                break;
            }

            board.ChangePosition(direction);
        }
Example #14
0
 //public abstract Vector3 GetEastPoint();
 //public abstract Vector3 GetWestPoint();
 //public abstract Vector3 GetNorthPoint();
 //public abstract Vector3 GetSouthPoint();
 public BoardSpace GetSpaceByDirection(Board.Direction Direction)
 {
     if (Direction == Board.Direction.East)
     {
         return(PosX);
     }
     else if (Direction == Board.Direction.North)
     {
         return(PosZ);
     }
     else if (Direction == Board.Direction.West)
     {
         return(NegX);
     }
     else if (Direction == Board.Direction.South)
     {
         return(NegZ);
     }
     else
     {
         return(null);
     }
 }
Example #15
0
 public Vector3 GetPointStartByDirection(Board.Direction enters)
 {
     if (enters == Board.Direction.East)
     {
         return(GetWestPoint());
     }
     else if (enters == Board.Direction.West)
     {
         return(GetEastPoint());
     }
     else if (enters == Board.Direction.North)
     {
         return(GetSouthPoint());
     }
     else if (enters == Board.Direction.South)
     {
         return(GetNorthPoint());
     }
     else
     {
         return(new Vector3(0, -10, 0));
     }
 }
Example #16
0
 public BoardSpace GetNextSpace(BoardSpace space, Board.Direction direction)
 {
     return(space.GetSpaceByDirection(direction));
 }
Example #17
0
        // GetPawnPositions():
        List <Vector2Int> GetPawnPositions(Cell currentCell, Board.Direction frontDirection)
        {
            Debug.Log("PieceManager::GetPawnPositions");

            List <Vector2Int> result           = new List <Vector2Int>();
            Vector2Int        originalPosition = currentCell.GetBoardPosition();

            Pawn piece = (Pawn)currentCell.GetCurrentPiece();

            // determine front direction adjustment
            Vector2Int frontOffset = Vector2Int.zero;

            if (frontDirection == Board.Direction.N)
            {
                frontOffset = Vector2Int.one;
            }
            else if (frontDirection == Board.Direction.S)
            {
                frontOffset = new Vector2Int(1, -1);
            }

            // get top positions
            Vector2Int step = Vector2Int.up;

            step = Vector2Int.Scale(step, frontOffset);
            Vector2Int currentPosition = originalPosition;

            for (int stepCount = 0; stepCount < 2; ++stepCount)
            {
                currentPosition = currentPosition + step;

                if (Board.IsOutOfBound(currentPosition) || !mBoard.IsCellEmpty(currentPosition))
                {
                    break;
                }
                else
                {
                    result.Add(currentPosition);
                }

                if (!piece.IsFirstMove())   // only 1 step forward if not first move
                {
                    break;
                }
            }

            // get NW position
            step            = new Vector2Int(-1, 1);
            step            = Vector2Int.Scale(step, frontOffset);
            currentPosition = originalPosition;

            currentPosition = currentPosition + step;
            if (!Board.IsOutOfBound(currentPosition) && mBoard.IsEnemyInCell(piece, currentPosition))
            {
                result.Add(currentPosition);
            }

            // get NE position
            step            = new Vector2Int(1, 1);
            step            = Vector2Int.Scale(step, frontOffset);
            currentPosition = originalPosition;

            currentPosition = currentPosition + step;
            if (!Board.IsOutOfBound(currentPosition) && mBoard.IsEnemyInCell(piece, currentPosition))
            {
                result.Add(currentPosition);
            }

            return(result);
        }
Example #18
0
        // GetDirectionPositions(): given Direction, current cell, moveStep, return all available positions
        List <Vector2Int> GetDirectionPositions(Board.Direction direction, BasePiece.MoveStep moveStep, Cell currentCell, Board.Direction frontDirection)
        {
            List <Vector2Int> result          = new List <Vector2Int>();
            Vector2Int        currentPosition = currentCell.GetBoardPosition();
            BasePiece         currentPiece    = currentCell.GetCurrentPiece();

            // determine direction to step to
            Vector2Int offset = Vector2Int.zero;

            if (direction == Board.Direction.NW)
            {
                offset = new Vector2Int(-1, 1);
            }
            else if (direction == Board.Direction.N)
            {
                offset = Vector2Int.up;
            }
            else if (direction == Board.Direction.NE)
            {
                offset = new Vector2Int(1, 1);
            }
            else if (direction == Board.Direction.E)
            {
                offset = Vector2Int.right;
            }
            else if (direction == Board.Direction.SE)
            {
                offset = new Vector2Int(1, -1);
            }
            else if (direction == Board.Direction.S)
            {
                offset = Vector2Int.down;
            }
            else if (direction == Board.Direction.SW)
            {
                offset = new Vector2Int(-1, -1);
            }
            else if (direction == Board.Direction.W)
            {
                offset = Vector2Int.left;
            }

            // determine front direction adjustment
            Vector2Int frontOffset = Vector2Int.zero;

            if (frontDirection == Board.Direction.N)
            {
                frontOffset = Vector2Int.one;
            }
            else if (frontDirection == Board.Direction.S)
            {
                frontOffset = new Vector2Int(1, -1);
            }

            offset = Vector2Int.Scale(offset, frontOffset);

            // determine how many times we are stepping
            int stepNum = 0;

            if (moveStep == BasePiece.MoveStep.Single)
            {
                stepNum = 1;
            }
            else if (moveStep == BasePiece.MoveStep.Double)
            {
                stepNum = 2;
            }
            else if (moveStep == BasePiece.MoveStep.Multiple)
            {
                stepNum = -1;
            }

            while (stepNum != 0)
            {
                Vector2Int nextPosition = currentPosition + offset;
                if (!Board.IsOutOfBound(nextPosition) && mBoard.IsTargetCellValid(currentPiece, nextPosition))
                {
                    result.Add(nextPosition);

                    // cannot advance if path is blocked by another piece
                    if (!mBoard.IsCellEmpty(nextPosition))
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }

                currentPosition = nextPosition;
                stepNum        -= 1;
            }

            return(result);
        }
Example #19
0
 public Piece SetDirection(Board.Direction direction)
 {
     this.direction = direction;
     return(this);
 }
Example #20
0
    public void GetMoveFlipped(Board.Direction direction, BoardSpace newSpace)
    {
        PieceMove move = Moves[movesIndex];

        initializeMove(move.myPiece.transform.position, move.myPiece, newSpace, direction, movesIndex);
    }
Example #21
0
    private void initializeMove(Vector3 StartLoc, BoardPiece cat, BoardSpace moveSpace, Board.Direction direction, int moveIndex)
    {
        bool lastMove = Moves.Count - 1 == moveIndex || Moves[moveIndex + 1].GetMyType() != "Walk";

        Moves[moveIndex].InitializeMove(StartLoc, cat, moveSpace, direction, lastMove);
    }
Example #22
0
 public void InitializeMoves(Board.Direction direction, MoveSet moveSet)
 {
     this.moveSet = moveSet;
     moveSet.StartMoves(this, currentBoardLoc, direction);
 }
Example #23
0
        private MoveInfo getMoveInfo(Piece piece, Point newCoordinates)
        {
            if (piece == null)
            {
                throw new ArgumentNullException();
            }
            if (newCoordinates == null)
            {
                throw new ArgumentNullException();
            }
            var rtnMove = new MoveInfo();

            if (newCoordinates.X >= Board.GRID_SIZE || newCoordinates.Y >= Board.GRID_SIZE ||
                newCoordinates.X < 0 || newCoordinates.Y < 0)
            {
                return(rtnMove);
            }

            int dX = newCoordinates.X - piece.Location.X,
                dY = newCoordinates.Y - piece.Location.Y;

            Board.Direction directionOfMove = Board.getMoveDirection(dY, dX);

            bool isJumpMove = Math.Abs(dX) == 2 && Math.Abs(dY) == 2;
            bool isMove     = Math.Abs(dX) == 1 && Math.Abs(dY) == 1;

            Tuple <Player, Piece> pieceInfo    = getPieceInfo(newCoordinates.X, newCoordinates.Y);
            Tuple <Player, Piece> oldPieceInfo = getPieceInfo(piece.Location.X, piece.Location.Y);

            if (pieceInfo == null)
            {
                if (isMove)
                {
                    if (oldPieceInfo.Item1.Color == Player.EnumColor.White)
                    {
                        if (piece.TypeOfPiece == Piece.PieceType.Man)
                        {
                            rtnMove.isValidMove = directionOfMove == Board.Direction.SE || directionOfMove == Board.Direction.SW;
                        }
                    }
                    else
                    {
                        if (piece.TypeOfPiece == Piece.PieceType.Man)
                        {
                            rtnMove.isValidMove = directionOfMove == Board.Direction.NE || directionOfMove == Board.Direction.NW;
                        }
                    }
                }
                else if (isJumpMove)
                {
                    bool validDirection = true;
                    if (oldPieceInfo.Item1.Color == Player.EnumColor.White)
                    {
                        if (piece.TypeOfPiece == Piece.PieceType.Man)
                        {
                            validDirection = directionOfMove == Board.Direction.SE || directionOfMove == Board.Direction.SW;
                        }
                    }
                    else
                    {
                        if (piece.TypeOfPiece == Piece.PieceType.Man)
                        {
                            validDirection = directionOfMove == Board.Direction.NE || directionOfMove == Board.Direction.NW;
                        }
                    }
                    if (validDirection)
                    {
                        Tuple <bool, Piece> validate = validateJumpMove(directionOfMove, oldPieceInfo, newCoordinates);
                        rtnMove.isValidJumpMove = validate.Item1;
                        rtnMove.JumpedPiece     = validate.Item2;
                    }
                }
            }
            return(rtnMove);
        }
Example #24
0
        // GetPathPositions(): given 2 positiosn (Vector2Int), return list of positions
        // .. maybe should be in PieceManager...
        List <Vector2Int> GetPathPositions(Vector2Int originalPosition, Vector2Int targetPosition)
        {
            Debug.Log("PieceManager::GetPathPositions()");

            List <Vector2Int> results = new List <Vector2Int>();

            int originalX = originalPosition.x;
            int originalY = originalPosition.y;
            int targetX   = targetPosition.x;
            int targetY   = targetPosition.y;

            Board.Direction generalDirection = GetGeneralDirection(originalPosition, targetPosition);
            Debug.Log("general direction is: " + generalDirection);

            // determine if it is a line
            Vector2Int offset = Vector2Int.zero;

            if (generalDirection == Board.Direction.N)
            {
                offset = Vector2Int.up;
            }
            else if (generalDirection == Board.Direction.E)
            {
                offset = Vector2Int.right;
            }
            else if (generalDirection == Board.Direction.S)
            {
                offset = Vector2Int.down;
            }
            else if (generalDirection == Board.Direction.W)
            {
                offset = Vector2Int.left;
            }
            else if (generalDirection == Board.Direction.NE)
            {
                if (targetX - originalX == targetY - originalY)
                {
                    Debug.Log("is a line!");
                    offset = new Vector2Int(1, 1);
                }
            }
            else if (generalDirection == Board.Direction.SE)
            {
                if (targetX - originalX == -(targetY - originalY))
                {
                    Debug.Log("is a line!");
                    offset = new Vector2Int(1, -1);
                }
            }
            else if (generalDirection == Board.Direction.SW)
            {
                if (targetX - originalX == targetY - originalY)
                {
                    Debug.Log("is a line!");
                    offset = new Vector2Int(-1, -1);
                }
            }
            else if (generalDirection == Board.Direction.NW)
            {
                if (-(targetX - originalX) == targetY - originalY)
                {
                    Debug.Log("is a line");
                    offset = new Vector2Int(-1, 1);
                }
            }

            // construct list
            Vector2Int currentPosition = originalPosition;

            while (true)
            {
                results.Add(currentPosition);

                // reach target
                if (currentPosition == targetPosition)
                {
                    break;
                }

                // keep stepping
                Vector2Int nextPosition = currentPosition + offset;
                if (nextPosition == currentPosition)
                {
                    Debug.Log("not a line!");
                    currentPosition = targetPosition;
                }
                else
                {
                    currentPosition = nextPosition;
                }
            }

            return(results);
        }
Example #25
0
 /// <summary>
 /// Initialize MoveSet
 /// </summary>
 /// <returns><c>true</c>, if piece was moved, <c>false</c> otherwise.</returns>
 /// <param name="moveSet">Move set.</param>
 /// <param name="direction">Direction.</param>
 ///
 public bool MovePiece(MoveSet moveSet, Board.Direction direction)
 {
     InitializeMoves(direction, moveSet);
     PieceStat = PieceStats.isMoving;
     return(MovePiece());
 }