ChessDotNet.Variants.Atomic.AtomicChessGame.IsValidMove C# (CSharp) Method

IsValidMove() protected method

protected IsValidMove ( Move move, bool validateCheck, bool careAboutWhoseTurnItIs ) : bool
move Move
validateCheck bool
careAboutWhoseTurnItIs bool
return bool
        protected override bool IsValidMove(Move move, bool validateCheck, bool careAboutWhoseTurnItIs)
        {
            ChessUtilities.ThrowIfNull(move, "move");
            if (move.OriginalPosition.Equals(move.NewPosition))
                return false;
            Piece piece = GetPieceAt(move.OriginalPosition.File, move.OriginalPosition.Rank);
            if (careAboutWhoseTurnItIs && move.Player != WhoseTurn) return false;
            if (piece.Owner != move.Player) return false;
            Piece pieceAtDestination = GetPieceAt(move.NewPosition);
            if (pieceAtDestination != null && (pieceAtDestination.Owner == move.Player || piece is King))
            {
                return false;
            }
            if (!piece.IsValidMove(move, this))
            {
                return false;
            }
            if (validateCheck && WouldBeSuicideOrInvalidSelfMoveInCheck(move, move.Player))
            {
                return false;
            }
            else if (WouldBeSuicide(move, move.Player))
            {
                return false;
            }

            return true;
        }