tryRotate method

({int kickIndex, Tetromino piece})? tryRotate(
  1. Tetromino piece,
  2. BoardState board, {
  3. 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;
}