omnichess/lib/functions/legal_moves.dart

19 lines
747 B
Dart

import 'package:omnichess/classes/position.dart';
import 'package:omnichess/constants/piece.dart';
import 'package:omnichess/exceptions/king_not_found.dart';
part "_partials/legal_moves_black.dart";
part "_partials/legal_moves_white.dart";
class LegalMoves {
LegalMoves._();
static Stream<(String, Position)> getLegalMoves(Position position) => position.isWhiteTurn
? _LegalMovesWhite._getLegalMoves(position)
: _LegalMovesBlack._getLegalMoves(position);
static Future<bool> isCheckmate(Position position) async => position.isWhiteTurn
? (_LegalMovesWhite._isWhiteChecked(position) && await getLegalMoves(position).isEmpty)
: (_LegalMovesBlack._isBlackChecked(position) && await getLegalMoves(position).isEmpty);
}