toFen method
Implementation
String toFen() {
final sb = StringBuffer();
for (var rank = 7; rank >= 0; rank--) {
var empty = 0;
for (var file = 0; file < 8; file++) {
final sq = rank * 8 + file;
final type = mailbox[sq];
if (type == -1) {
empty++;
} else {
if (empty > 0) {
sb.write(empty);
empty = 0;
}
final isWhite = (occ[white] & (1 << sq)) != 0;
final ch = _pieceChar(type);
sb.write(isWhite ? ch.toUpperCase() : ch);
}
}
if (empty > 0) sb.write(empty);
if (rank > 0) sb.write('/');
}
sb.write(turn == white ? ' w ' : ' b ');
final c = StringBuffer();
if ((castling & castleWK) != 0) c.write('K');
if ((castling & castleWQ) != 0) c.write('Q');
if ((castling & castleBK) != 0) c.write('k');
if ((castling & castleBQ) != 0) c.write('q');
sb.write(c.isEmpty ? '-' : c.toString());
sb.write(' ');
sb.write(epSquare >= 0 ? _squareName(epSquare) : '-');
sb.write(' $halfmove $fullmove');
return sb.toString();
}