tryRotate method
({int kickIndex, Tetromino piece})?
tryRotate(
- Tetromino piece,
- BoardState board, {
- required bool clockwise,
Attempts a rotation and also reports which SRS kick test succeeded (0 = no kick, 4 = the fifth and final test).
Returns null when every kick test collides.
Implementation
({Tetromino piece, int kickIndex})? tryRotate(
Tetromino piece,
BoardState board, {
required bool clockwise,
}) {
final rotated = clockwise ? piece.rotatedCW() : piece.rotatedCCW();
final kicks = _getKicks(piece.type, piece.rotation, clockwise);
for (var i = 0; i < kicks.length; i++) {
final kicked = rotated.copyWith(
position: Position(
rotated.position.row + kicks[i].row,
rotated.position.col + kicks[i].col,
),
);
if (!_collision.hasCollision(kicked, board)) {
return (piece: kicked, kickIndex: i);
}
}
return null;
}