onLinesCleared method

ScoreState onLinesCleared(
  1. ScoreState state,
  2. int linesCleared,
  3. int level
)

Returns a new ScoreState after clearing linesCleared lines. level is used for point multipliers.

Implementation

ScoreState onLinesCleared(ScoreState state, int linesCleared, int level) {
  if (linesCleared == 0) {
    return state.copyWith(combo: 0, backToBack: false);
  }

  final bool isTetris = linesCleared == 4;
  final bool b2b = isTetris && state.backToBack;

  int base = _basePoints(linesCleared) * level;
  if (b2b) base = (base * 1.5).toInt();

  int comboBonus = 0;
  if (state.combo > 0) comboBonus = 50 * state.combo * level;

  return state.copyWith(
    score: state.score + base + comboBonus,
    combo: state.combo + 1,
    backToBack: isTetris,
  );
}