/// <summary> /// Checks if a move is valid without performing it /// </summary> /// <param name="move"></param> /// <returns></returns> public bool IsMoveValid(Move move) { if (move.Piece == null) { return(false); } IRuleSet pieceRuleset = _settings.GetRulesFor(move.Piece.Type); if (pieceRuleset == null) { throw new NotImplementedException("Rules are not defined for " + move.Piece.Type); } return(pieceRuleset.IsMoveValid(this, move)); }